Не работает LOCATE

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Не работает LOCATE

Сообщение wwswowsogon »

Здравствуйте!
Продолжая разбираться с БД/Firebird, внезапно обнаружил неприятную вещь:
почему-то не работает метод Locate, конструкция типа dataset.locate('key', значение, []);
Ничего не происходит, как будто этой строки вовсе нет в коде.
Пробовал по-всякому, грешил на кириллицу, кривую установку СУБД и т. п. Пробовал на разных машинах и в разных условиях. То, что я впервые применил этот метод, и он не работает, наводит на размышления, что, возможно, я что-то неправильно делаю. Хотя вроде бы всё очевидно.
Lazarus 1.4.4, если что.
Если нужно, ближе к вечеру выложу подробный код/проект.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

<<Lazarus 1.4.4>> может быть оффтоп, но зачем?! Зачем пользоваться Лазарус 1.4, когда уже стабильная версия 2.0?!
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

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

Сообщение wwswowsogon »

Использование 1.4.4 имеет только одну причину: я по жизни отстаю от жизни, плюс имею удручающую скорость разработки, не являясь, к тому же, профессиональным программистом.
Уже года два я пилю пару больших проектов, начинал их на этой версии, думаю, пока не закончу, буду пользоваться ей же.

Что касается изначального моего вопроса, я должен попросить прощения у уважаемого сообщества - я написал демо-приложение, с минимумом кода и таблиц в БД - никаких проблем, Locate работает на ура. Видимо, где-то я слажал.
Буду разбираться.
Всем спасибо, тему можно потереть. :)
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Сообщение wwswowsogon »

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('Нет совпадений!');         
Ответить