![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
странности с параметром ADO
stud © (2006-05-17 12:06:00)есть адодатасет, присваиваю:
clientsf.clientq.CommandText:='SELECT DISTINCT client.client_type, client.client_id, client.inn,
...........
where upper(client.name) like :cl_n';
при попытке присвоить значение параметру получаю сообщение об ошибке
что указаный параметр не найден.
ничего не по понимаю??
MsGuns (2006-05-18 17:55:00) [1]А что, перед стартом запроса нельзя вывести "состряпанный" сиквель и посмотреть на него "вживую" ?
ANB (2006-05-18 15:49:00) [2]Во, наконец то перенесли ветку.
> stud © (18.05.06 15:40) [23]
Огласите весь список, пожалуйста.
sniknik (2006-05-18 15:47:00) [3]в показаном коде ошибок нет...
p.s. действительно "не догоняеш" или придуриваешся?
stud (2006-05-18 15:40:00) [4]
> не можеш найти сам, покажи код другому...
Application.CreateForm(Tclientsf, clientsf);
clientsf.clientq.CommandText:='..... - и вот имею АВ. в библиотеке sqloledb.dll.
ANB (2006-05-18 15:32:00) [5]> stud © (18.05.06 13:47) [20]
Значится так. Сначала надо кверю закрыть. Потом очень желательно ее почистить, и только потом присваивать текст запроса. Совет - убери константы из запроса - легче будет читать его текст
вот этот кусок
> when '''+'Ю'''+' then
плохо читается и непонятно - зачем здесь склейка ?
sniknik (2006-05-18 15:07:00) [6]не можеш найти сам, покажи код другому...
stud (2006-05-18 13:47:00) [7]sniknik © (18.05.06 11:40) [19]
это у вас скорее всего пресловутая ошибка в 17й строке.
думаю так оно и есть, но не могу никак найти.
Ega23 © (17.05.06 19:10) [17]
Покажи, что происходит на Tclientsf.OnCreate
ничего.
sniknik (2006-05-18 11:40:00) [8]ни разу не втречался с "такими граблями в ADO"... хотя довольно долго с ним работаю. это у вас скорее всего пресловутая ошибка в 17й строке.
другие были/и есть кое что до сих пор, но не с параметрами, не надо лишнего на него наговаривать.
V-A-V (2006-05-18 07:58:00) [9]Наступал я тоже на такие грабли в ADO.
Самый верный способ, если создание запроса идет динамически и спараметрами, то нужно перед присвоением параметра и отработкой запроса, проверить наличие параметра (если нет создать), затем определить (назначить) ему тип, а потом только присваевать значение.
После этого запрос отработает, если конечно нет др. ошибок.
Ega23 (2006-05-17 19:10:00) [10]Покажи, что происходит на Tclientsf.OnCreate
stud (2006-05-17 18:14:00) [11]да создается в дизайне, все св-ва оставлены по умолчанию.
отключил в дельфх stop on delphi excesption ничего не ругается и все работает......
Ega23 (2006-05-17 16:46:00) [12]
> Application.CreateForm(Tclientsf, clientsf);
> clientsf.clientq.CommandText:='..... - и вот имею АВ. в
> библиотеке sqloledb.dll.
clientq - создаётся в design-time? Если да, то какие свойства выставлены?
Где идёт задание clientq.Connection?
stud (2006-05-17 14:58:00) [13]последовательность действий:
Application.CreateForm(Tclientsf, clientsf);
clientsf.clientq.CommandText:='..... - и вот имею АВ. в библиотеке sqloledb.dll.
но все почемуто работает. ничего не понимаю???
ЮЮ (2006-05-17 13:04:00) [14]>stud © (17.05.06 12:52) [12]
Значит AV где-то в доугом месте.
Или clientsf (clientsf.clientq) в одном случае nil и AV, в другом случае - живые
stud (2006-05-17 12:52:00) [15]чето полный финиш!!
получаю АВ, при этом текст запроса нормально присваивается и присваивается нормально параметр и запрос отрабатывает нормально!!
stud (2006-05-17 12:48:00) [16]вот полный запрос
clientsf.clientq.CommandText:='SELECT DISTINCT client.client_type, client.client_id, client.inn,'+
' client.kpp, client_person.passer, client_person.pasnum, '+
' sub_type = case when client.client_type = '''+'Ф'+''' then client_person.sub_type '+
' else client_company.sub_type '+
' end, '+
' case client.client_type '+
' when '''+'Ю'''+' then isnull((select client_company.shortname from client_company where client_company.client_id=client.client_id),client.name) '+
' else client.name '+
' end as name '+
' FROM client '+
' left join client_person on client.client_id = client_person.client_id '+
' left join client_company on client.client_id = client_company.client_id '+
' where upper(client.name) like :cl_n';
теперь при попытке присвоить его командстроке получаю AV??
stud (2006-05-17 12:42:00) [17]ЮЮ © (17.05.06 12:40) [9]
ща попробую
> Ошибка то какая ?
> указаный параметр не найден
ЮЮ (2006-05-17 12:40:00) [18]>но запрос формируется динамически и количество параметров разное
Может здесь собака и зарыта? Используй FindParam, как в справке написано, перед тем как присваивать
ЮЮ (2006-05-17 12:37:00) [19]
> сначала был true, затем поменял на false
> Задай параметр, задай ему тип String, Input и размер.
или верни true
P.S. Когда заработает, обрамляющие кавычки в значении параметра, ИМХО, лишние.
ANB (2006-05-17 12:36:00) [20]ЗЫ. upper(client.name) - убъет работу через индекс. Хотя %СТРОКА% уже не будет его использовать.