![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
sqlduery.params.parambyname('pf2').asstring >>> error 22018 [D7, MSSQL]
zig © (2005-10-21 23:50:00)всем привет народ помогите разобратся
имеется sql запрос (если запись есть то изменить поле если записи нет то добавить запись)
и все в нем работает если не присваивать pf2 значение состоящие из цифр и букв ('123qwe')
в ентом случае получаем сообщение от sql server error 22018,
а просто с цифрами ('123') все работает.
в таблице все поля имеют тип varchar(254) not nul.
что я делаю не так ??
sql:='update tbl1 set f1 = :pf1 where f2= :pf2 if @@rowcount = 0 insert into tbl1 (f1,f2) value (:pf1,:pf2)'
sqlquery1.sql.text:=sql;
sqlquery1.params.parambyname('pf1').asstring:='123';
sqlquery1.params.parambyname('pf2').asstring:='123qwe';
sqlquery1.execsql;
sniknik (2005-10-23 13:33:00) [1]> value > values это очепятка ))
а других опечаток нет? например вот это вот
sql:='update tbl1 set f1 = :pf1 where f2= :pf2 if @@rowcount = 0 insert into tbl1 (f1,f2) value (:pf3,:pf4)'
sqlquery1.sql.text:=sql;
выполняется к коде? или это "отсебятина", а реально запрос прописан в дизайн тайме? и там есть уже предопределенные параметры...
> ошибка 22018 трактуется макрософтом как невозможность конвертачии данных
разве я просил узнать как что мелкософтом трактуется?
я вроде вполне конкретные вещи спрашивал проверить в [4] [5], и не просто так спрашивал, а потому что (см. описание в [4]). а в [5] это уже заранее предположение что тип неправилен в уже в дельфе, и проверка (именно конвертации данных изза несоответствий типов) при задании значения параметра по другому.
Anatoly Podgoretsky (2005-10-23 13:09:00) [2]Вот теперь настало время привести метаданные и типы sqlquery1.params[i]
zig (2005-10-23 12:51:00) [3]TO sninik
value > values это очепятка ))
ошибка 22018 трактуется макрософтом как невозможность конвертачии
данных
sniknik (2005-10-23 10:25:00) [4]да, еще. попробуй параметры присваивать через value
sqlquery1.params.parambyname('pf1').Value:='123';
... и т.д.
конечно же бред, но вдруг в DBExpress неправильная реализация в методе As... т.д. и тип неверно определяет. а value это вариант, т.е. то самое что в mssql в виде параметра "уходит".
sniknik (2005-10-23 10:08:00) [5]второй глюк:
в запросе должно быть value s, странно т.к. говориш в каких то случаях это работало... а должно всегда ошибку синтаксиса давать.
что за сообщение у ошибки 22018? не может быть чтобы просто цифру давало, ошибки mssql обычно сопровождаются текстом указывающим ее причину... если есть только бред в виде цифры.... ну тоже может и mssql, но всетаки большая вероятность что это местные программисты "постарались" в общем посмотри тригеры на вставку, констраинты у таблици.
потом приведи класс ошибки (знать где это, в mssql/delphi...) в общем нужны вот эти значения
try
...
except
on E: Exception do begin
... := E.ClassName;
... := E.Message;
end;
end;
zig (2005-10-23 02:19:00) [6]изменение имен параметров на :
sql:='update tbl1 set f1 = :pf1 where f2= :pf2 if @@rowcount = 0 insert into tbl1 (f1,f2) value (:pf3,:pf4)'
sqlquery1.sql.text:=sql;
sqlquery1.params.parambyname('pf1').asstring:='123';
sqlquery1.params.parambyname('pf2').asstring:='123qwe';
sqlquery1.params.parambyname('pf3').asstring:='123';
sqlquery1.params.parambyname('pf4').asstring:='123qwe';
sqlquery1.execsql;
ни чего не изменили таже самая ошибка !
Anatoly Podgoretsky (2005-10-22 13:12:00) [7]Может и допускаются, но не имеют смысла. На самом деле это P[0], P[1], P[2], P[3], а если он по недоразумению назвал почему то разные параметры одним и тем же именем, то он ССЗБ
sniknik (2005-10-22 00:03:00) [8]2 параметра с одним именем не допускается, это не BDE.