Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c