Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите пожалуйста. Проблема с запросом 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:= "СЕРГЕЙ";


Наверх

Титульная страница Поиск, карта сайта Написать письмо