Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Зависание SQL запроса.


Автор: voice 16.4.2004, 10:51
При выполнени простенького запроса, тупо зависает все....
таблицы 'second.db' 'first.db'
сам запрос.

Код
Add(' SELECT f1.name, s1.Klan, s1.Rating as  d1 '+
      ' FROM ' + firstdb + ' as f1 '+
      ' Left Join ' + seconddb + '  as s1 on  '+
      ' f1.wab_name=s1.wab_name '+
      ' and s1.Data=' " '20.03.2004' " ' ');



а вот так нормально работает.
Код
Add(' SELECT f1.name, s1.Klan, s1.Rating as  d1 '+
      ' FROM ' + firstdb + ' as f1 '+
      ' Left Join ' + seconddb+ '  as s1 on  '+
      ' f1.wab_name=s1.wab_name ');


в чем грабли?
(в MySQL все шуршит аж бегом).

Автор: x77 16.4.2004, 13:34
voice, насколько я помню, бде трактует токены в двойных кавычках, как имена полей. попробуй заменить на одинарные. а ещё лучше - сделай запрос параметризированным, это, в принципе, более грамотный вариант.

Автор: voice 16.4.2004, 14:00
Цитата(x77 @ 16.4.2004, 13:34)
voice, насколько я помню, бде трактует токены в двойных кавычках, как имена полей. попробуй заменить на одинарные. а ещё лучше - сделай запрос параметризированным, это, в принципе, более грамотный вариант.

есвенно, вариантов я перепробовал кучу, в том числе и кавычки менял и убирал.
хех, не помогает sad.gif
А параметризированный запрос, у меня изначально использовался, это я уже для отладки
цифры подставил, ну чтоб более понятно было.

Автор: x77 16.4.2004, 14:23
мне вот это строка непонятна: ... from first.db as fl. я всегда пишу first.db fl left join second.db sl on ..., и всё работает. без as, короче. не пробовал?

Автор: Maverick 16.4.2004, 15:15
Есть такая функция

function QuotedStr(const S: string): string;

Description

Use QuotedStr to convert the string S to a quoted string. A single quote character (') is inserted at the beginning and end of S, and each single quote character in the string is repeated.

Очень удобно... и не надо задумыватся над количеством ковычек...

Автор: voice 16.4.2004, 15:23
Цитата(x77 @ 16.4.2004, 14:23)
мне вот это строка непонятна: ... from first.db as fl. я всегда пишу first.db fl left join second.db sl on ..., и всё работает. без as, короче. не пробовал?

дык и у меня работает, вот,
токо добавляю and s1.data='03.20.2004'
и все висим.
еслибы неправильно формат, дата задал или сравнивал дату со стрингом,
оно вернуло бы null или ругнулось, ИХМО.
(попробую без "as", сомневаюсь что картина изменится.)

Добавлено @ 15:28
Цитата(Maverick @ 16.4.2004, 15:15)
Есть такая функция

function QuotedStr(const S: string): string;

Description

Use QuotedStr to convert the string S to a quoted string. A single quote character (') is inserted at the beginning and end of S, and each single quote character in the string is repeated.

Очень удобно... и не надо задумыватся над количеством ковычек...

Спасибо за подсказку!

Автор: voice 19.4.2004, 09:38
переделал немного, запрос, заработал.
в исходном варианте не работает. sad.gif

(так работает.)
Add(' SELECT s1.name, s1.data '+
' FROM ' + seconddb + ' as s1 '+
' where s1.data=' '03.20.2004' ' ');

ничего, не понимаю.

Автор: x77 19.4.2004, 09:51
ну правильно, у тебя сейчас одинарные кавычки вместо двойных, о чём сразу и шла речь.

Автор: voice 19.4.2004, 10:50
да, на счет кавычек, в первом примере, я просто слоховал,
но дело не в этом...

Add(' SELECT f1.name, s1.Klan, s1.Rating as d1 '+
' FROM ' + firstdb + ' as f1 '+
' Left Join ' + seconddb + ' as s1 on '+
' f1.wab_name=s1.wab_name '+
' and s1.Data=' '20.03.2004' ' ');

так тоже не работает, тупо висит.

Автор: x77 19.4.2004, 11:39
а зачем ты включаешь в on условие по значению поля? его логичнее вынести в where. я понимаю, f1.wab_name = s1.wab_name, а при чём там дата, в джойне? по имени - оставь, а дату вынеси:

Код

Add(' SELECT f1.name, s1.Klan, s1.Rating as d1 '+
 ' FROM ' + firstdb + ' as f1 '+
 ' Left Join ' + seconddb + ' as s1 on '+
 ' f1.wab_name=s1.wab_name '+
 ' where s1.Data=' '20.03.2004' ' ');


всё должно работать, имхо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)