Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо