Форум: "Базы";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
ВнизПомогите пожалуйста. Проблема с запросом 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c