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

Вниз

помогите составить sql-запрос, а то поиск медленнее чем в paradox   Найти похожие ветки 

 
Johnny_Raw   (2006-08-20 14:20) [0]

Здравствуйте уважаемые. Очень нужен совет в след. вопросе:
есть массив строк которые, нужно заменить на строки из БД. При использовании 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?


 
Anatoly Podgoretsky ©   (2006-08-20 14:33) [1]

Поиск осуществляется на стороне клиента, метод Locate, а он у тебя не наблюдается, если не считать за него Lookup.


 
Johnny_Raw   (2006-08-20 15:45) [2]

Не понял суть ответа. Все происходит на локальном компьютере. А метод Locate это имхо тот же Lookup только с перемещением по записям


 
Anatoly Podgoretsky ©   (2006-08-20 15:57) [3]

Метод Lookup это подстановка, а не поиск. Подсмотреть


 
Johnny_Raw   (2006-08-20 18:16) [4]

мы друг-друга не поняли, но тем не менее, благодаря этому я нашел что метод lookup у query тоже есть (select я применял не в тему). Т.е. вначале нужно было select * , а потом lookup. Поиск стал быстрее более чем в два раза.


 
Dok   (2006-08-20 18:29) [5]

в чем задача то?


 
Slym ©   (2006-08-21 06:08) [6]

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;


 
Slym ©   (2006-08-21 06:18) [7]

Индекс по Col2 имеется?



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

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

Наверх




Память: 0.48 MB
Время: 0.069 c
2-1158931949
worldmen
2006-09-22 17:32
2006.10.15
Запуск проги до входа.


11-1134945791
ebta
2005-12-19 01:43
2006.10.15
forum archive


15-1159248144
Ega23
2006-09-26 09:22
2006.10.15
С Днём рождения! 26 сентября


3-1155811000
Lilia
2006-08-17 14:36
2006.10.15
Просмотр данных таблицы через DBCombobox


2-1159543721
Dysan
2006-09-29 19:28
2006.10.15
Как сворачивать дополнительную форму?