Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: Проблема с Locate
Проблема с Locate
Posted: 2008/03/06 11:02
 
AnyDAC v 1.12.2
MySQL v 5.0.51a

Проблема такая - есть таблица

 CREATE TABLE  `test`.`test_table` (   `idint(10unsigned NOT NULL auto_increment,   `testfieldvarchar(45NOT NULL,   PRIMARY KEY  (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=DEFAULT CHARSET=utf8; insert into test_table(testfieldvalues ('А'), ('Абрикос'), ('Б'), ('Бинокль'), ('В'), ('Винт');


в программе есть код

 ADConnection1.Open;   ADQuery1.SQL.Text:='select testfield from test_table order by 1';   ADQuery1.Open;   ADQuery1.IndexFieldNames:='testfield:A';   if ADQuery1.Locate('testfield''би', [loPartialKeyloCaseInsensitive]) then     ShowMessage(ADQuery1.Fields[0].AsString);   ADQuery1.IndexFieldNames:='testfield:D';   if ADQuery1.Locate('testfield''би', [loPartialKeyloCaseInsensitive]) then     ShowMessage(ADQuery1.Fields[0].AsString);


Первый ShowMessage выдает 'Б'
Второй ShowMessage выдает 'Бинокль'
По идее, во обоих случаях должно быть 'Бинокль'. В чем может быть проблема?
Re:Проблема с Locate
Posted: 2008/03/07 04:48
 
Так было задумано для совместимости с БДЕ.

Можешь изменить поведение на более правильное. Модуль daADDatsManager, метод TADDatSRow.CompareData, вариант для dtAnsiString. Там первый IF обрубает длины сравнения до минимальной. Последний IF корректирует результат.
Re:Проблема с Locate
Posted: 2008/03/07 05:14
 
Огромное спасибо за ответ!
Все заработало как надо.