Форум: "Базы";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
ВнизПоиск в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c