Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 11:59   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Ошибка при вставке записи

При вставке записи из Edit в БД выдает ошибку изображенную на картинке.
Ругается на несовместимость типов.

Код:
DM.Query2.DisableControls;
DM.Query2.SQL.Clear;
DM.Query2.SQL.Add('insert into NoteBook (Nomer_m, Pr_proc, Model_proc, Takt_proc, Oper_pam, HDD, Videokard_pr, Videopamiat, Diagonal, Type_privod, Ves, Price, Id_pr)'+'values(:Nomer_m, :Pr_proc, :Model_proc, :Takt_proc, :Oper_pam, :HDD, :Videokard_pr, :Videopamiat, :Diagonal, :Type_privod, :Ves, :Price, :Id_pr)');
DM.Query2.ParamByName('Id_pr').AsInteger:=DM.Query1.FieldByName('Id_pr').AsInteger;
DM.Query2.ParamByName('Nomer_m').AsString:=Edit2.Text;
DM.Query2.ParamByName('Pr_proc').AsString:=ComboBox1.Text;
DM.Query2.ParamByName('Model_proc').AsString:=Edit3.Text;
DM.Query2.ParamByName('Takt_proc').AsInteger:=strtoint(Edit4.Text);
DM.Query2.ParamByName('Oper_pam').AsInteger:=strtoint(Edit5.Text);
DM.Query2.ParamByName('HDD').AsInteger:=strtoint(Edit6.Text);
DM.Query2.ParamByName('Videokard_pr').AsString:=ComboBox2.Text;
DM.Query2.ParamByName('Videopamiat').AsInteger:=strtoint(Edit7.Text);
DM.Query2.ParamByName('Diagonal').AsInteger:=strtoint(Edit8.Text);
DM.Query2.ParamByName('Type_privod').AsString:=ComboBox3.Text;
DM.Query2.ParamByName('Ves').AsInteger:=strtoint(Edit9.Text);
DM.Query2.ParamByName('Price').AsInteger:=strtoint(Edit10.Text);
DM.Query2.ExecSQL;
DM.Query2.Close;
DM.Query2.SQL.Clear;
DM.Query2.SQL.Text:='Select * from NoteBook where Id_pr=:Id_pr';
DM.Query2.Open;
DM.Query2.EnableControls
Изображения
Тип файла: jpg Безымянный.jpg (31.3 Кб, 143 просмотров)
Тип файла: jpg Безымянный1.jpg (30.6 Кб, 149 просмотров)
Тип файла: jpg Безымянный2.jpg (5.2 Кб, 145 просмотров)
Вложения
Тип файла: zip Проект.zip (441.4 Кб, 10 просмотров)

Последний раз редактировалось Stilet; 10.08.2012 в 19:57.
Ericnex вне форума Ответить с цитированием
Старый 10.08.2012, 12:59   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

хм ..а файл БД мы должны сами создавать?

UPD:
а вообще можно попробовать так:
Код:
DM.Query2.ParamByName('Id_pr').Value:=DM.Query1.FieldByName('Id_pr').Value;
DM.Query2.ParamByName('Nomer_m').Value:=Edit2.Text;
DM.Query2.ParamByName('Pr_proc').Value:=ComboBox1.Text;
DM.Query2.ParamByName('Model_proc').Value:=Edit3.Text;
DM.Query2.ParamByName('Takt_proc').Value:=Edit4.Text;
DM.Query2.ParamByName('Oper_pam').Value:=Edit5.Text;
DM.Query2.ParamByName('HDD').Value:=Edit6.Text;
DM.Query2.ParamByName('Videokard_pr').Value:=ComboBox2.Text;
DM.Query2.ParamByName('Videopamiat').Value:=Edit7.Text;
DM.Query2.ParamByName('Diagonal').Value:=Edit8.Text;
DM.Query2.ParamByName('Type_privod' ).Value:=ComboBox3.Text;
DM.Query2.ParamByName('Ves').Value:=Edit9.Text;
DM.Query2.ParamByName('Price').Value:=Edit10.Text;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 10.08.2012 в 16:15.
Yurk@ вне форума Ответить с цитированием
Старый 10.08.2012, 15:40   #3
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

Не уверн, так как не знаю как работатет метод ParamByName, может нужно стринговые значение экранировать символом '?
Usov вне форума Ответить с цитированием
Старый 11.08.2012, 23:18   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А базу данных к проекту чего не приложили?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 11.08.2012 в 23:26.
Sciv вне форума Ответить с цитированием
Старый 11.08.2012, 23:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Точно ошибка на вставке? Ошибку на Open даст наверняка поскольку значение параметра не определено
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.08.2012, 07:55   #6
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Что нужно исправить в коде?
Ericnex вне форума Ответить с цитированием
Старый 14.08.2012, 06:23   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
QuotedStr(Edit1.Text);
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.08.2012, 08:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от artemavd
Код:
QuotedStr(Edit1.Text);
artemavd, не узнаю Вас!

Это же неверно! Нет смысла экранировать строки, если строчные значения передаются в запрос в качестве параметров (.ParamByName(...) := Строка )!
Это не только излишне, это приведёт к тому, что в БД будут записывать кавычки в начале и конце строки, там, где их нет и не должно быть!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.08.2012, 09:09   #9
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Приложу БД в ответ.
Пока что менял значения на Value. Ничего не изменилось
Вложения
Тип файла: rar БД.rar (2.4 Кб, 10 просмотров)
Ericnex вне форума Ответить с цитированием
Старый 15.08.2012, 12:29   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Причина ошибка проста как пень: у автора в БД идентификатор производителя "автоинкрементное" длиной 4 b. Он эти 4 байта пытается присвоить полю длина которого 2 b (проверено).
Решения: либо менять тип этого поля на LONG, либо преобразовать к байту -
Код:
  DM.Query2.ParamByName('Id_pr').Value := Byte(DM.Query1.FieldValues['Id_pr']);
//и в этих случаях тоже
  DM.Query2.ParamByName('Oper_pam').Value := Byte(StrToInt(Edit5.Text));
Короче, для всех полей типа SHORT надо делать преобразование (либо менять их на достойные типы).
Если не менять типы, а заниматься ерундой типа показанного преобразования, то в последнем случае (StrToInt) надо бы учинить проверку на корректность введенного числа, но это уже совсем другая история.

P.S. Разработчик баз данных, не занимайся садомазохизмом, не применяй устаревшие десктопные СУБД.
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вставке изображения в Joomla 2.5 Умагаджи WordPress и другие CMS 1 09.07.2012 10:32
Ошибка при записи в БД (MySQL) xew БД в Delphi 4 30.03.2012 11:15
Ошибка при добавлении записи Itachi БД в Delphi 1 10.06.2011 13:30
при вставке записи в БД (MDB) выдает ошибку "неправильный синтаксис запроса" lkjuio C# (си шарп) 8 01.05.2011 23:30
Присвоить разные значения параметру при вставке записи в базу Gover БД в Delphi 3 19.04.2010 21:37