![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите пожалуйста. Проблема с запросом SQL. Вот код: [D6]
Ol-G © (2003-05-19 21:17:00)Есть код
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;
В чем тут ошибка? Я уже голову сломал.
Remis (2003-05-21 11:47:00) [1]А что будет если не использовать Prepare?
Zn (2003-05-20 11:09:00) [2]
> sniknik © (20.05.03 10:56)
Да нет, скобку я не забыл, это здесь ошибся. И QDelete как раз TQuery.
Странно, только что ещё раз попробовал - заработало.
sniknik (2003-05-20 10:56:00) [3]ну скорее всего ты забыл скобку ";" перед ним и как вариант тип QDelete не TQuery :о)).
Zn (2003-05-20 10:51:00) [4]Извините, вопрос в тему.
У меня не работает такой код:
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:20:00) [5]Ol-G (20.05.03 08:34)
и чем это отличается от первого(в вопросе) варианта? а ничем. даже переменную s (если нигде больше не используется) оптимизатор выкинет.
уж если хочется улутшений то оформи это в виде процедуры и передавай внутрь изменяющуюся часть строки ""ЕЛЕНА","СЕРГЕЙ"" в этом случае. строку изменяй динамически как уже говорили.
Leron (2003-05-20 09:25:00) [6]Эт фича до меня давно допёрла. Вся система запросов у меня построена таким образом))))
Ol-G (2003-05-20 08:34:00) [7]Всем спасибо, я всетаки допер.
Если кому вдруг надо будет:
Var
S:String
begin
S:= "Where name in("ЕЛЕНА","СЕРГЕЙ")";{Здесь можно вставлять что хочешь}
Query1.SQL.add("Select * from lico.db");
Query1.SQL.add(S);
Query1.Prepare;
Query1.Open;
end;
Johnmen (2003-05-19 22:31:00) [8]>Ol-G
То, что ты хочешь, по сути, не параметр, а макроподстановка.
Не поддерживается она...
Посему просто динамически формируй строку запроса...
sniknik (2003-05-19 22:23:00) [9]> Не описывать же их в виде :Nam1...Nam10
или так или не работает а как вам нужно выбирайте...
или без переменных как в первом варианте.
Ol-G (2003-05-19 22:16:00) [10]Спаибо за совет, но меня интересует то, чтобы я мог поставить в переменную "Nam" сколько мне угодно значений, например 10.Как быть в этом случае? Не описывать же их в виде :Nam1...Nam10
sniknik (2003-05-19 21:40:00) [11]попробуй вот так
Query1.SQL.add("Select * from "lico.db"");
Query1.SQL.add("Where name in (:Nam1, :Nam2)");
Query1.ParamByName("Nam1").AsString:= "ЕЛЕНА";
Query1.ParamByName("Nam2").AsString:= "СЕРГЕЙ";