Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Поиск в TClientDataSet   Найти похожие ветки 

 
Rem ©   (2003-12-22 17:02) [0]

TClientDataSet отказывается находить записи, если в условиях поиска присутствуют символы кириллицы. Может, есть какие-то дополнительные локальные настройки? А то искать вручную перебором записей долго.


 
Rem ©   (2003-12-22 17:03) [1]

Имеется в виду поиск через Locate()


 
MV   (2003-12-22 17:04) [2]

А у меня ищет. Покажи, как делаешь.


 
JibSkeart ©   (2003-12-22 17:05) [3]

и у меня работает :))


 
MV   (2003-12-22 17:07) [4]

Для прикола попробуй "ручками",
while not .eof
...
.next
Что выходит?


 
Nikolay M. ©   (2003-12-22 17:08) [5]

Апдейты на дельфи установлены?


 
Rem ©   (2003-12-22 17:38) [6]

да че показывать?

пользователь набирает искомое значение m_sSearch, а оно его не находит:
m_DataSet.Locate(Grid.SelectedField.FieldName, m_sSearch, [loCaseInsensitive, loPartialKey]);


 
MV   (2003-12-22 17:41) [7]

Ну, в отладчике глянь на значения
Grid.SelectedField.FieldName
и
m_sSearch
на всякий случай

И попробуй
MV (22.12.03 17:07) [4]


 
Rem ©   (2003-12-22 17:47) [8]

2 MV
да я и ищу руками... точно так же и ищу... да долго это получается - перебирать...
вот написал, так оно ищет нормально:

function TxDataSet.LocateEx(a_sField, a_sValue: string): boolean;
var
BM: TBookMark;
sTemp: string;
sCurr: string;
begin
Result := false;
if not Active then Exit;
sTemp := AnsiUpperCase(a_sValue);
DisableControls;
try
BM := GetBookmark;
try
First;
while not EOF do
begin
sCurr := AnsiUpperCase(FieldByName(a_sField).AsString);
Result := (Pos(sTemp, sCurr) = 1);
if Result then Exit;
Next;
end;
GotoBookmark(BM);
except
on Exception do GotoBookmark(BM);
end;
finally
EnableControls;
end;
end;


но... медленно...


 
sniknik ©   (2003-12-22 20:00) [9]

Rem © (22.12.03 17:47) [8]
2 способа ускорения (навскидку можно и больше наверное ежели подумать)

var
Field_sField: TField;
begin
Field_sField:= m_DataSet.FieldByName(a_sField);

вместо этого
(?????).FieldByName(a_sField).AsString (кстати где потерял? уверен что у тебя берет от правильного датасета? (так понял гдето with есть))
вставить
Field_sField.AsString
(исключается разбор заголовка на каждом присвоении, для длинных циклов сушественно)

и вот это (главный тормоз)
Result := (Pos(sTemp, sCurr) = 1);
просматривается вся строка находится вхождение ради чего? сравнить что это вхожденей сначала. а ведь достаточно сравнить первую букву чтобы знать что не подходит(а дальше сравнение бессмысленно, прикинь сколько операций лишних убереш). перепиши своей, с побуквенным сравнением (кстати AnsiUpperCase можно применять к буквам, но тут неизвестно может получится торможение вместо ускорения, тестить нужно).

но вообщето Locate у меня тоже работает(ло сейчас не пробовал). (может действительно не от того датасета?)


 
Nikolay M. ©   (2003-12-22 22:31) [10]

А ведь я спрашивал насчет апдейтов! Может хоть на ссылки обратишь внимание?
http://ziet.zhitomir.ua:8890/bin/shMes.asp?idf=5&idm=3364
http://www.dore.ru/perl/nntp.pl?f=1&gid=9&mid=55120



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-63242
WondeRu
2004-01-09 10:30
2004.01.20
Unload Driver


14-63320
Nous Mellon
2003-12-30 19:14
2004.01.20
Софт для мобильных телефонов


1-63077
SMT
2004-01-08 17:57
2004.01.20
Применение процедур Canvas.TextWidth и Canvas.TextHeight


14-63383
Juster~~
2003-12-28 11:43
2004.01.20
SB Live!


3-62981
akhmadey
2003-12-24 07:33
2004.01.20
Проблема с InterBase