Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизSQL: Parameter not found Найти похожие ветки
← →
Fostr (2006-10-12 12:41) [0]Хелп! Есть запрос в котором несколько параметров, создающихся динамически. При выполнении запроса выплывает ошибка "PARAMETER "P0" NOT FOUND". Прошу подсказать из-за чего (см. код ниже).
SetLength(A_SET,DataModule1.FindByQuery1.RecordCount); //Задается длина динамического массива
For K:=0 TO DataModule1.FindByQuery1.RecordCount-1 DO
A_SET[K]:=DataModule1.FindByQuery1.Fields[1].AsString;//Здесь значения в виде динамического массива, которые в дальнейшем присваиваются параметрам
{Пишу запрос - не говорите, что надо SQL.Text="", мне тут это не подходит}
DataModule1.FindByQuery2.Active:=False;
DataModule1.FindByQuery2.SQL.Clear;
DataModule1.FindByQuery2.SQL.Add("SELECT *");
DataModule1.FindByQuery2.SQL.Add("FROM MainTable");
DataModule1.FindByQuery2.SQL.Add("WHERE");
For K:=0 TO Length(A_SET)-1 DO
DataModule1.FindByQuery2.SQL.Add("Key1 LIKE: P"+IntToStr(K)+","); //Вношу в запрос параметры
For K:=0 TO Length(A_SET)-1 DO
DataModule1.FindByQuery2.Parameters.ParamByName("P"+IntToStr(K)+"").Value:=A_SET[K]; //Задаю значения параметрам ТУТ И ВЫДАЕТСЯ ОШИБКА!!!
Заранее спасибо за любую подсказку.
← →
Рамиль © (2006-10-12 12:45) [1]
> ("Key1 LIKE: P"+IntToStr(K)+","
("Key1 LIKE :P"+IntToStr(K)+","
← →
Fostr (2006-10-12 12:50) [2]Ну конечно же!!! Спасибо! Одна голова хорошо (одни глаза), а несколько - лучше! В упор не видел!
← →
Desdechado © (2006-10-12 13:13) [3]хм, условия WHERE через запятую?
это где такой синтаксис?
← →
Sergey13 © (2006-10-12 13:17) [4]> [0] Fostr (12.10.06 12:41)
И зачем записи первого кверика перегонять в массив?
← →
Fostr (2006-10-12 14:50) [5]У!!! Если я сейчас начно говорить зачем перегонять записи первого Query в массив - это может надолго затянуться и запутать. Поверьте, стоит такая задача, и я ее выполняю.
А вот насчет условия WHERE:
На самом деле мне надо во втором Query выбрать те записи, в которых значения некоторого поля соответствуют значениям перечисляемых через запятую в условии WHERE параметров. Если я ошибаюсь в синтаксисе, то прошу указать как правильно сделать! Access (у мне именно эта база) врооде позволяет так делать.
← →
MsGuns © (2006-10-12 14:58) [6]Для "перегонки" параметров из "кверика" в "кверик" достаточно скопировать сиквель, а потом через Parametes нового "кверика" в цикле присвоить им значения старого, изменив "нужные" как надо.
← →
Sergey13 © (2006-10-12 15:11) [7]> [5] Fostr (12.10.06 14:50)
> У!!! Если я сейчас начно говорить зачем перегонять записи
> первого Query в массив - это может надолго затянуться и
> запутать. Поверьте, стоит такая задача, и я ее выполняю.
Т.е. задача сделать это именно через массив, который тут не нужен?
Не верю! (с)
> Access (у мне именно эта база) врооде позволяет так делать.
Сомневаюсь, хоть и не знаком с Аксесом. В запятой нет логики, а тут нужно именно логическое условие.
← →
MsGuns © (2006-10-12 15:19) [8]>Sergey13 © (12.10.06 15:11) [7]
>Сомневаюсь, хоть и не знаком с Аксесом
Мелкомягкие недавно запатентовали новый секретный диалект T-SQL, в котором при перечислении условий в предикатах Where и Join разрешается использовать вместо OR, NOT и AND символа ",". Специальный встроенный реверпарсер разбирает всю эту тарабарщину, правильно вычисляя чего же все-таки хочет клиент.
Сделано для шифровки запросов секретными агентами. Бают, что сделано по личному заказу лидера "Хазболлы".
← →
Fostr (2006-10-12 15:20) [9]> Sergey13 © (12.10.06 15:11) [7]
> Т.е. задача сделать это именно через массив, который тут не нужен?
> Не верю! (с)
И правильно! Теперь знаю, что это можно сделать иначе.
>Сомневаюсь, хоть и не знаком с Аксесом. В запятой нет логики, а тут нужно именно логическое условие.
Как правильно?
← →
MsGuns © (2006-10-12 15:23) [10]>Fostr (12.10.06 15:20) [9]
>Как правильно?
BOL->Index->Select->Where||Join
← →
Sergey13 © (2006-10-12 15:25) [11]> [8] MsGuns © (12.10.06 15:19)
Ты смайлик забыл поставить. 8-)
> [9] Fostr (12.10.06 15:20)
Слушай, ну Ф1 то нажми хоть раз ради разнообразия.
← →
Fostr (2006-10-12 15:40) [12]Друзья, а ну-ка скажите, где это в Delphi по "фэ1" есть help по синтаксису SQL?
Я стараюсь про эту заветную кнопочку не забывать, если я что-то там пропустил, то пардон.
← →
MsGuns © (2006-10-12 15:43) [13]Ну, не по "ф1", но есть.
Help->Delphi Tools->Local SQL
← →
Sergey13 © (2006-10-12 15:43) [14]> [12] Fostr (12.10.06 15:40)
Если это BDE, то ищи файд LocalSQL.hlp
← →
MsGuns © (2006-10-12 16:16) [15]>Sergey13 © (12.10.06 15:25) [11]
>Ты смайлик забыл поставить. 8-)
Не забыл. Ты и представить не можешь насколько тут все серьезно
← →
ЮЮ © (2006-10-16 03:07) [16]Ввиду закрытия
http://delphimaster.net/view/2-1160770982/
отвечу здесь.
Необходимо выбрать из второй таблицы только людей из проекта 564,
Как видишь, параметр здесь только один. Просто запрос надо правильно писать:
SELECT *
FROM Perons
WHERE Key IN (SELECT LinkKey FROM ProjectPersons WHERE ProjectKey = :ProjectKey)
или
SELECT p.*
FROM
ProjectPersons pp
JOIN Perons p ON pp.LinkKey = p.Key
WHERE
pp.ProjectKey = :ProjectKey
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.079 c