![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите составить sql-запрос, а то поиск медленнее чем в paradox [D7, MySQL, Paradox]
Johnny_Raw © (2006-08-20 14:20:00)Здравствуйте уважаемые. Очень нужен совет в след. вопросе:
есть массив строк которые, нужно заменить на строки из БД. При использовании BDE + Paradox7 делал это так:
var
Found: Variant;
Array: Array of Array of String;
for k:=0 to High(array) do
begin
Found:=DataModule1.Table1.Lookup('Col2', Array[k,0], 'Col1');
if not varisnull(Found)then
Array[k, 0]:=Found;
Found:=DataModule1.Table1.Lookup('Col2', Array[k,1], 'Col1');
if not varisnull(Found)then
Array[k, 1]:=Found;
Found:=DataModule1.Table1.Lookup('Col2', Array[k,2], 'Col1');
if not varisnull(Found)then
Array[k, 2]:=Found;
получалось очень медленно ((
Решил убыстрить процесс и установил mysql 4.1 и zeoslib
ничего умнее не придумал, чем:
for k:=0 to High(Array) do
begin
Fm1.ZQuery1.Close;
Fm1.ZQuery1.SQL.Clear;
Fm1.ZQuery1.SQL.Add('SELECT Col1 from TestTable where Col2='''+Array[k, 0]+'''');
Fm1.ZQuery1.Open;
if Fm1.ZQuery1.Fields[0].AsVariant <> null then
Array[k, 0]:=Fm1.ZQuery1.Fields[0].AsString;
Fm1.ZQuery1.Close;
Fm1.ZQuery1.SQL.Clear;
Fm1.ZQuery1.SQL.Add('SELECT Col1 from TestTable where Col2='''+Array[k, 1]+'''');
Fm1.ZQuery1.Open;
if Fm1.ZQuery1.Fields[0].AsVariant <> null then
Array[k, 1]:=Fm1.ZQuery1.Fields[0].AsString;
Fm1.ZQuery1.Close;
Fm1.ZQuery1.SQL.Clear;
Fm1.ZQuery1.SQL.Add('SELECT Col1 from TestTable where Col2='''+Array[k, 2]+'''');
Fm1.ZQuery1.Open;
if Fm1.ZQuery1.Fields[0].AsVariant <> null then
Array[k, 2]:=Fm1.ZQuery1.Fields[0].AsString;
end;
в результате получилось еще медленней.
Это мой первый опыт работы с sql, может есть более быстрый вариант, позволяющий использовать достоинства sql?
Slym (2006-08-21 06:18:00) [1]Индекс по Col2 имеется?
Slym (2006-08-21 06:08:00) [2]
Fm1.ZQuery1.Close;
Fm1.ZQuery1.SQL.Clear;
Fm1.ZQuery1.SQL.Add('SELECT Col1 from TestTable where Col2= :Param;');
Fm1.ZQuery1.Prepared:=true;
Fm1.ZQuery1.Open;
for k:=0 to High(Array) do
begin
for i:=0 to 2 do
begin
Fm1.ZQuery1.Parameters[0].Value:=Array[k, i];
Fm1.ZQuery1.Requery;
Array[k, i]:=Fm1.ZQuery1.Fields[0].AsString;
end;
end;
Dok (2006-08-20 18:29:00) [3]в чем задача то?
Johnny_Raw (2006-08-20 18:16:00) [4]мы друг-друга не поняли, но тем не менее, благодаря этому я нашел что метод lookup у query тоже есть (select я применял не в тему). Т.е. вначале нужно было select * , а потом lookup. Поиск стал быстрее более чем в два раза.
Anatoly Podgoretsky (2006-08-20 15:57:00) [5]Метод Lookup это подстановка, а не поиск. Подсмотреть
Johnny_Raw (2006-08-20 15:45:00) [6]Не понял суть ответа. Все происходит на локальном компьютере. А метод Locate это имхо тот же Lookup только с перемещением по записям
Anatoly Podgoretsky (2006-08-20 14:33:00) [7]Поиск осуществляется на стороне клиента, метод Locate, а он у тебя не наблюдается, если не считать за него Lookup.