Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1157096069
Neo Trinitron
2006-09-01 11:34
2006.10.29
Сжатие БД MS Access


9-1137844132
Lamer:)
2006-01-21 14:48
2006.10.29
Помогите создать игру


15-1160032899
Kolan
2006-10-05 11:21
2006.10.29
Как по английски "программатор"?


2-1160883363
Max.66RUS
2006-10-15 07:36
2006.10.29
Процедура открытия диалога выбора файла...


15-1160045622
Гарри Поттер
2006-10-05 14:53
2006.10.29
Интересный опыт, кто-то объяснит?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский