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

Вниз

Помогите пожалуйста. Проблема с запросом SQL. Вот код:   Найти похожие ветки 

 
Ol-G   (2003-05-19 21:17) [0]

Есть код

Query1.SQL.add("Select * from lico.db");
Query1.SQL.add("Where name in("ЕЛЕНА","СЕРГЕЙ")");
Query1.Prepare;
Query1.Open;

Все работает, все замечательно.
а если делать через переменную, то фиг чего выходит:

Query1.SQL.add("Select * from lico.db");
Query1.SQL.add("Where name in(:Nam)");
Query1.ParamByName("Nam").AsString :=""ЕЛЕНА","СЕРГЕЙ"" ;
Query1.Prepare;
Query1.Open;
В чем тут ошибка? Я уже голову сломал.


 
sniknik ©   (2003-05-19 21:40) [1]

попробуй вот так
Query1.SQL.add("Select * from "lico.db"");
Query1.SQL.add("Where name in (:Nam1, :Nam2)");
Query1.ParamByName("Nam1").AsString:= "ЕЛЕНА";
Query1.ParamByName("Nam2").AsString:= "СЕРГЕЙ";


 
Ol-G   (2003-05-19 22:16) [2]

Спаибо за совет, но меня интересует то, чтобы я мог поставить в переменную "Nam" сколько мне угодно значений, например 10.Как быть в этом случае? Не описывать же их в виде :Nam1...Nam10


 
sniknik ©   (2003-05-19 22:23) [3]

> Не описывать же их в виде :Nam1...Nam10
или так или не работает а как вам нужно выбирайте...

или без переменных как в первом варианте.


 
Johnmen ©   (2003-05-19 22:31) [4]

>Ol-G

То, что ты хочешь, по сути, не параметр, а макроподстановка.
Не поддерживается она...
Посему просто динамически формируй строку запроса...


 
Ol-G   (2003-05-20 08:34) [5]

Всем спасибо, я всетаки допер.
Если кому вдруг надо будет:
Var
S:String
begin
S:= "Where name in("ЕЛЕНА","СЕРГЕЙ")";{Здесь можно вставлять что хочешь}
Query1.SQL.add("Select * from lico.db");
Query1.SQL.add(S);
Query1.Prepare;
Query1.Open;
end;



 
Leron   (2003-05-20 09:25) [6]

Эт фича до меня давно допёрла. Вся система запросов у меня построена таким образом))))


 
sniknik ©   (2003-05-20 10:20) [7]

Ol-G (20.05.03 08:34)
и чем это отличается от первого(в вопросе) варианта? а ничем. даже переменную s (если нигде больше не используется) оптимизатор выкинет.

уж если хочется улутшений то оформи это в виде процедуры и передавай внутрь изменяющуюся часть строки ""ЕЛЕНА","СЕРГЕЙ"" в этом случае. строку изменяй динамически как уже говорили.


 
Zn   (2003-05-20 10:51) [8]

Извините, вопрос в тему.
У меня не работает такой код:
with QDelete do
begin
SQL.Clear;
if RadioGroup1.ItemIndex=0 then
SQL.Add("Delete from t1 where id=1")
else SQL.Add("Delete from t1 where id=2")
Prepare;
ExecSQL;
end;
Выдаёт ошибку на Prepare. В чём ошибка?


 
sniknik ©   (2003-05-20 10:56) [9]

ну скорее всего ты забыл скобку ";" перед ним и как вариант тип QDelete не TQuery :о)).


 
Zn   (2003-05-20 11:09) [10]


> sniknik © (20.05.03 10:56)

Да нет, скобку я не забыл, это здесь ошибся. И QDelete как раз TQuery.
Странно, только что ещё раз попробовал - заработало.




 
Remis   (2003-05-21 11:47) [11]

А что будет если не использовать Prepare?



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
6-26632
denisWW
2003-04-07 22:26
2003.06.09
ну кто посоветует?TNMFTP вызывает NMFTP1PacketSent только кратно


14-26670
fool
2003-05-23 18:30
2003.06.09
Агульная млявасць и абыякавасць да жыцця


1-26573
wera
2003-05-28 10:18
2003.06.09
ListBox ..........


1-26565
BJValentine
2003-05-26 15:45
2003.06.09
TStringGrid


7-26820
Pitay
2003-04-08 07:51
2003.06.09
Переадресация кнопок клавиатуры