![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Type mismatch при попытке сделать INSERT [D6, Paradox]
lovres © (2003-12-17 14:26:00)
Хочу добавить запись, запрос в 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;
Sandman25 (2003-12-17 16:45:00) [1]
Я сегодня нарвался на похожую же проблему.
В design-time настраиваю SQL.Text, ставлю параметры.
Один из параметров ftInteger.
Затем присваиваю параметр AsString. Почему AsString? Ну мне было так удобнее. Вызываю ExecSQL. Такая же ругань type mismatch... Стал разбираться, и оказалось, что при присвоении AsString тип параметра сам устанавливается в ftString.
Помогла установка параметров через Value. Тоже Paradox, Delphi 6.
Johnmen (2003-12-17 16:24:00) [2]
>VAleksey © (17.12.03 16:01)
>...DataType присваивать не обязательно
Возможно. Это я для строгости...:)
VAleksey (2003-12-17 16:01:00) [3]
Небольшая оговорочка... Это была D5.
VAleksey (2003-12-17 16:01:00) [4]
> Johnmen © (17.12.03 14:38)
Вообще, такого быть не должно. Я делал в своих приложениях Clear динамически подсовывал параметра и все работало. Правда не помню как я присваивал значения. Ч/з value или As...
Но 100% могу сказать что ParamByName("...").DataType присваивать не обязательно.
lovres (2003-12-17 15:49:00) [5]
> sniknik ©
Честно говоря устал. Решил сделать всё через Append...Post, благо что табличка совсем маленькая.
sniknik (2003-12-17 15:33:00) [6]
> Блин, уже полдня бьюсь с этой проблеммой, какие ещё варианты могут быть?
вставь значения в запрос как в случае с SQL Explorer,
так
...values("""+DBEdit1.Text+""", :kz, :nm)");
а после уже потихоньку разбирайся с параметрами. гдето ты напутал (ParamCheck в фалсе стоит а сделанные до этого чемто отличаются... это к примеру)
lovres (2003-12-17 15:17:00) [7]
> sniknik ©попробовал, та же ерунда
> Hawk2 ©Поля менять не имею права, чужая прога на них завязана
Блин, уже полдня бьюсь с этой проблеммой, какие ещё варианты могут быть?
Hawk2 (2003-12-17 15:09:00) [8]
Да и названия лучше латинскими буквами писать...
sniknik (2003-12-17 15:05:00) [9]
а так?
insert into "tar_zon.db" ("tar_zon.db"."_код_связи", "tar_zon.db"."_код_зоны", "tar_zon.db"."_наименование_зоны")
values(:ks, :kz, :nm)
кстати а парадокс какой длинны поля поддерживает? в dBase не так много помню 11(или около) символов.
lovres (2003-12-17 14:56:00) [10]
Ничего не помогло :(
Теперь так:
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 14:40:00) [11]
не ручками но после очередного внесения запроса SQL.Clear; SQL.Add а как это сам решай.
Johnmen (2003-12-17 14:38:00) [12]
Ты сделал SQL.Clear; а значит уже ничего, никакого запроса, никаких параметров нет...
lovres (2003-12-17 14:36:00) [13]
Да я вроде параметры через Object Inspector определил в свойствах Params у Query, всё равно надо ручками?
JibSkeart (2003-12-17 14:31:00) [14]
А точно
так как не пишу шас на делфях все уже забываю :))
Johnmen (2003-12-17 14:30:00) [15]
сначала ...ParamByName("...").DataType:=...
потом ...ParamByName("...").As...:=...
JibSkeart (2003-12-17 14:29:00) [16]
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;
JibSkeart (2003-12-17 14:28:00) [17]
Dm.TarUpdate.Params.ParamByName("ks").Value:=DBEdit1.Text;
Dm.TarUpdate.Params.ParamByName("kz").Value:=DBEdit2.Text;
или указывай конкретный тип