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

Вниз

Type mismatch при попытке сделать INSERT   Найти похожие ветки 

 
lovres   (2003-12-17 14:26) [0]

Хочу добавить запись, запрос в SQL Explorer отрабатывает "на ура", а вот в Delphi выдаётся ошибка несоответствия типов во время команды Query1.ExecSQL. В запрос передаются 3 параметра, типы их я уже 3 раза проверял - вроде всё ок. Из-за чего такое может быть?
Код:
DM.TarUpdate.Close;
DM.TarUpdate.SQL.Clear;
DM.TarUpdate.SQL.Add("insert into tar_zon (tar_zon.""_код_связи"", "+
"tar_zon.""_код_зоны"", tar_zon.""_наименование_зоны"") values(:ks, :kz, :nm)");
Dm.TarUpdate.Prepare;
Dm.TarUpdate.Params.ParamByName("ks").Value:=strtoint(DBEdit1.Text);
Dm.TarUpdate.Params.ParamByName("kz").Value:=strtoint(DBEdit2.Text);
Dm.TarUpdate.Params.ParamByName("nm").Value:=DBEdit3.Text;
DM.TarUpdate.ExecSQL;


 
JibSkeart ©   (2003-12-17 14:28) [1]

Dm.TarUpdate.Params.ParamByName("ks").Value:=DBEdit1.Text;
Dm.TarUpdate.Params.ParamByName("kz").Value:=DBEdit2.Text;

или указывай конкретный тип


 
JibSkeart ©   (2003-12-17 14:29) [2]

Dm.TarUpdate.Params.ParamByName("ks").AsInteger:=strtoint(DBEdit1.Text);
Dm.TarUpdate.Params.ParamByName("kz").AsInteger:=strtoint(DBEdit2.Text);
Dm.TarUpdate.Params.ParamByName("nm").AsString:=DBEdit3.Text;


 
Johnmen ©   (2003-12-17 14:30) [3]

сначала ...ParamByName("...").DataType:=...
потом ...ParamByName("...").As...:=...


 
JibSkeart ©   (2003-12-17 14:31) [4]

А точно
так как не пишу шас на делфях все уже забываю :))


 
lovres ©   (2003-12-17 14:36) [5]

Да я вроде параметры через Object Inspector определил в свойствах Params у Query, всё равно надо ручками?


 
Johnmen ©   (2003-12-17 14:38) [6]

Ты сделал SQL.Clear; а значит уже ничего, никакого запроса, никаких параметров нет...


 
sniknik ©   (2003-12-17 14:40) [7]

не ручками но после очередного внесения запроса SQL.Clear; SQL.Add а как это сам решай.


 
lovres   (2003-12-17 14:56) [8]

Ничего не помогло :(
Теперь так:
DM.TarUpdate.Close;
DM.TarUpdate.SQL.Clear;
DM.TarUpdate.SQL.Add("insert into tar_zon (tar_zon.""_код_связи"", "+
"tar_zon.""_код_зоны"", tar_zon.""_наименование_зоны"") values(:ks, :kz, :nm)");
Dm.TarUpdate.Prepare;
Dm.TarUpdate.Params.ParamByName("ks").DataType:=ftInteger;
Dm.TarUpdate.Params.ParamByName("ks").AsInteger:=strtoint(DBEdit1.Text);
Dm.TarUpdate.Params.ParamByName("kz").DataType:=ftInteger;
Dm.TarUpdate.Params.ParamByName("kz").AsInteger:=strtoint(DBEdit2.Text);
Dm.TarUpdate.Params.ParamByName("nm").DataType:=ftString;
Dm.TarUpdate.Params.ParamByName("nm").AsString:=DBEdit3.Text;
DM.TarUpdate.ExecSQL;

Сам запрос:
insert into tar_zon (tar_zon."_код_связи", tar_zon."_код_зоны", tar_zon."_наименование_зоны")
values(:ks, :kz, :nm)


 
sniknik ©   (2003-12-17 15:05) [9]

а так?
insert into "tar_zon.db" ("tar_zon.db"."_код_связи", "tar_zon.db"."_код_зоны", "tar_zon.db"."_наименование_зоны")
values(:ks, :kz, :nm)

кстати а парадокс какой длинны поля поддерживает? в dBase не так много помню 11(или около) символов.


 
Hawk2 ©   (2003-12-17 15:09) [10]

Да и названия лучше латинскими буквами писать...


 
lovres ©   (2003-12-17 15:17) [11]

> sniknik © попробовал, та же ерунда
> Hawk2 © Поля менять не имею права, чужая прога на них завязана

Блин, уже полдня бьюсь с этой проблеммой, какие ещё варианты могут быть?


 
sniknik ©   (2003-12-17 15:33) [12]

> Блин, уже полдня бьюсь с этой проблеммой, какие ещё варианты могут быть?
вставь значения в запрос как в случае с SQL Explorer,
так
...values("""+DBEdit1.Text+""", :kz, :nm)");
а после уже потихоньку разбирайся с параметрами. гдето ты напутал (ParamCheck в фалсе стоит а сделанные до этого чемто отличаются... это к примеру)


 
lovres ©   (2003-12-17 15:49) [13]


> sniknik ©
Честно говоря устал. Решил сделать всё через Append...Post, благо что табличка совсем маленькая.


 
VAleksey ©   (2003-12-17 16:01) [14]


> Johnmen © (17.12.03 14:38)

Вообще, такого быть не должно. Я делал в своих приложениях Clear динамически подсовывал параметра и все работало. Правда не помню как я присваивал значения. Ч/з value или As...
Но 100% могу сказать что ParamByName("...").DataType присваивать не обязательно.


 
VAleksey ©   (2003-12-17 16:01) [15]

Небольшая оговорочка... Это была D5.


 
Johnmen ©   (2003-12-17 16:24) [16]

>VAleksey © (17.12.03 16:01)
>...DataType присваивать не обязательно

Возможно. Это я для строгости...:)


 
Sandman25 ©   (2003-12-17 16:45) [17]

Я сегодня нарвался на похожую же проблему.
В design-time настраиваю SQL.Text, ставлю параметры.
Один из параметров ftInteger.
Затем присваиваю параметр AsString. Почему AsString? Ну мне было так удобнее. Вызываю ExecSQL. Такая же ругань type mismatch... Стал разбираться, и оказалось, что при присвоении AsString тип параметра сам устанавливается в ftString.
Помогла установка параметров через Value. Тоже Paradox, Delphi 6.



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
1-37699
MadAngel
2003-12-25 23:43
2004.01.13
TreeView


14-37871
Rem
2003-12-22 17:19
2004.01.13
Являются ли корпоративные проекты


8-37800
Незнайко
2003-09-13 12:45
2004.01.13
DynamicSkinForm


4-37982
Rog
2003-11-05 08:16
2004.01.13
Запись CD


11-37600
Centronix
2003-04-24 14:45
2004.01.13
Создание диалогового окна