Здравствуйте!
Продолжая разбираться с БД/Firebird, внезапно обнаружил неприятную вещь:
почему-то не работает метод Locate, конструкция типа dataset.locate('key', значение, []);
Ничего не происходит, как будто этой строки вовсе нет в коде.
Пробовал по-всякому, грешил на кириллицу, кривую установку СУБД и т. п. Пробовал на разных машинах и в разных условиях. То, что я впервые применил этот метод, и он не работает, наводит на размышления, что, возможно, я что-то неправильно делаю. Хотя вроде бы всё очевидно.
Lazarus 1.4.4, если что.
Если нужно, ближе к вечеру выложу подробный код/проект.
Не работает LOCATE
Модератор: Модераторы
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
<<Lazarus 1.4.4>> может быть оффтоп, но зачем?! Зачем пользоваться Лазарус 1.4, когда уже стабильная версия 2.0?!
Ichthyander писал(а):стабильная версия 2.0?!
2.02!
https://forum.lazarus.freepascal.org/index.php/topic,45062.msg317727.html#msg317727
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
Использование 1.4.4 имеет только одну причину: я по жизни отстаю от жизни, плюс имею удручающую скорость разработки, не являясь, к тому же, профессиональным программистом.
Уже года два я пилю пару больших проектов, начинал их на этой версии, думаю, пока не закончу, буду пользоваться ей же.
Что касается изначального моего вопроса, я должен попросить прощения у уважаемого сообщества - я написал демо-приложение, с минимумом кода и таблиц в БД - никаких проблем, Locate работает на ура. Видимо, где-то я слажал.
Буду разбираться.
Всем спасибо, тему можно потереть.
Уже года два я пилю пару больших проектов, начинал их на этой версии, думаю, пока не закончу, буду пользоваться ей же.
Что касается изначального моего вопроса, я должен попросить прощения у уважаемого сообщества - я написал демо-приложение, с минимумом кода и таблиц в БД - никаких проблем, Locate работает на ура. Видимо, где-то я слажал.
Буду разбираться.
Всем спасибо, тему можно потереть.
-
wwswowsogon
- постоялец
- Сообщения: 157
- Зарегистрирован: 23.12.2008 19:41:37
P. S. Некоторое время поразмышляв о проблеме поиска по заданному фрагменту в наборе данных, всё же написал свою функцию, которая вполне устраивает:
Код: Выделить всё
procedure FindRec(FField, FText: String);
var
s: String;
begin
FText := UTF8UpperCase(FText);
if Main.SQLQuery1.RecNo < Main.SQLQuery1.RecordCount then
begin
repeat
s := UTF8UpperCase(Main.SQLQuery1.Fields.FieldByName(FField).AsString);
Main.SQLQuery1.Next;
until Pos(FText, s) > 0;
Main.SQLQuery1.Locate('ID', Main.SQLQuery1.FieldByName('ID').AsInteger, []);
end
else ShowMessage('Нет совпадений!');
