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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
15-1160130608
zdm
2006-10-06 14:30
2006.10.29
Mercury


2-1160909998
Вася
2006-10-15 14:59
2006.10.29
шестнадцатиричные значения ключей в реестре


6-1149925061
SamProf
2006-06-10 11:37
2006.10.29
Как проверить наличие ftp сервака на компе


2-1160450667
learner
2006-10-10 07:24
2006.10.29
Жутко тормозит BDS 2006


15-1158055308
VitV
2006-09-12 14:01
2006.10.29
Стоит ли передодить на С#?