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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2013, 07:39   #1
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию Добавление данных через DateTimePicker в бд

Добрый день. Есть база .mdb, в ней есть поле с типом "Дата". база В делфи добавляю DateTimePicker1, в итоге пытаюсь добавить дату в таблицу через делфи, выходит ошибка.
Код добавления прилагаю:
Код:
 if FormSklad.Kod = 0 then
    qr.SQL.Text := 'insert into Склад([HAC-CODE], Позиция, [Наименование_агрегата],'+
                       'КодРаботы, [Кол-во], Дата, [Время_начала],'+
                       '[Время_окончания], КодСтатуса, КодИсполнителя, '+
                       'Примечание) values ('+ QuotedStr(Edit1.Text)+','+
                        QuotedStr(Edit2.Text)+','+ QuotedStr(Edit3.Text)+','+
                        IntToStr(ICB1)+','+
                        QuotedStr(Edit4.Text)+','+ DateToStr(DateTimePicker1.Date)+','+
                        QuotedStr(MaskEdit2.Text)+','+ QuotedStr(MaskEdit3.Text)+','+
                        IntToStr(ICB2)+','+
                        IntToStr(ICB3)+','+
                        QuotedStr(Edit6.Text)+')'
   else
     qr.SQL.Text := 'update Склад set [HAC-CODE] = '+QuotedStr(Edit1.Text)+','+
                        'Позиция = '+QuotedStr(Edit2.Text)+','+
                        '[Наименование_агрегата]='+QuotedStr(Edit3.Text)+','+
                        'КодРаботы = '+IntToStr(ICB1)+','+
                        '[Кол-во] = '+QuotedStr(Edit4.Text)+','+
                        'Дата = '+ DateToStr(DateTimePicker1.Date)+','+
                        '[Время_начала] = '+QuotedStr(MaskEdit2.Text)+','+
                        '[Время_окончания] = '+QuotedStr(MaskEdit3.Text)+','+
                        'КодСтатуса = '+IntToStr(ICB2)+','+
                        'КодИсполнителя = '+IntToStr(ICB3)+','+
                        'Примечание = '+QuotedStr(Edit6.Text)+
                        ' where Код = '+IntToStr(FormSklad.Kod);


  qr.ExecSQL;
    FormSklad.ADOQSklad.DisableControls;
    FormSklad.ADOQSklad.Close;
    FormSklad.ADOQSklad.Open;
    FormSklad.ADOQSklad.EnableControls;
Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; ComboBox3.ItemIndex := -1;
  Edit6.Clear; MaskEdit2.Clear; MaskEdit3.Clear;
  ComBobox1.ItemIndex := -1; ComBobox2.ItemIndex := -1;
FormSklad.Modif := True;
if FormSklad.Kod > 0 then
Close;
Раньше добавлял все через MaskEdit1 работала успешно, решил более упросить режим добавления даты, поставил DateTimePicker, изменил поле в таблице на тип поля "Дата", поменял немного код и все равно не добавляет. Кто сможет помочь, подскажите, что делаю не так?
Изображения
Тип файла: jpg error.jpg (31.4 Кб, 73 просмотров)

Последний раз редактировалось Stilet; 04.07.2013 в 07:55.
Владимир1989 вне форума Ответить с цитированием
Старый 04.07.2013, 07:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Параметризируй запрос:
Код:
qr.Parameters.ParamByName('da').value:=DateTimePicker1.Date;
... update...
   'Дата = :da';
В таких случаях рекомендуются параметрические запросы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2013, 08:39   #3
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

Код:
var
  ICB1, ICB2, ICB3 : Integer; da:string;
begin
  ICB1 := 0; ICB2 := 0; ICB3 := 0;
  if ComboBox1.ItemIndex > -1 then
    ICB1 := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
  if ComboBox2.ItemIndex > -1 then
    ICB2 := Integer(ComboBox1.Items.Objects[ComboBox2.ItemIndex]);
  if ComboBox2.ItemIndex > -1 then
    ICB3 := Integer(ComboBox1.Items.Objects[ComboBox3.ItemIndex]);
  if Edit4.Text = '' then
    Edit4.Text := '1';


  if FormSklad.Kod = 0 then
    qr.SQL.Text := 'insert into Склад([HAC-CODE], Позиция, [Наименование_агрегата],'+
                       'КодРаботы, [Кол-во], Дата, [Время_начала],'+
                       '[Время_окончания], КодСтатуса, КодИсполнителя, '+
                       'Примечание) values ('+ QuotedStr(Edit1.Text)+','+
                        QuotedStr(Edit2.Text)+','+ QuotedStr(Edit3.Text)+','+
                        IntToStr(ICB1)+','+
                        QuotedStr(Edit4.Text)+','+
                        QuotedStr(MaskEdit2.Text)+','+ QuotedStr(MaskEdit3.Text)+','+
                        IntToStr(ICB2)+','+
                        IntToStr(ICB3)+','+
                        QuotedStr(Edit6.Text)+')'
   else
     qr.Parameters.ParamByName('da').value:=DateTimePicker1.Date;
     qr.SQL.Text := 'update Склад set [HAC-CODE] = '+QuotedStr(Edit1.Text)+','+
                        'Позиция = '+QuotedStr(Edit2.Text)+','+
                        '[Наименование_агрегата]='+QuotedStr(Edit3.Text)+','+
                        'КодРаботы = '+IntToStr(ICB1)+','+
                        '[Кол-во] = '+QuotedStr(Edit4.Text)+','+
                        'Дата = :da'+
                        '[Время_начала] = '+QuotedStr(MaskEdit2.Text)+','+
                        '[Время_окончания] = '+QuotedStr(MaskEdit3.Text)+','+
                        'КодСтатуса = '+IntToStr(ICB2)+','+
                        'КодИсполнителя = '+IntToStr(ICB3)+','+
                        'Примечание = '+QuotedStr(Edit6.Text)+
                        ' where Код = '+IntToStr(FormSklad.Kod);


  qr.ExecSQL;
    FormSklad.ADOQSklad.DisableControls;
    FormSklad.ADOQSklad.Close;
    FormSklad.ADOQSklad.Open;
    FormSklad.ADOQSklad.EnableControls;
  Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; ComboBox3.ItemIndex := -1;
  Edit6.Clear; MaskEdit2.Clear; MaskEdit3.Clear;
  ComBobox1.ItemIndex := -1; ComBobox2.ItemIndex := -1;

  FormSklad.Modif := True;
  if FormSklad.Kod > 0 then
    Close;
end;
Все равно не добавляет, хотя и ошибки не выводит, может я что-то не так указал




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.07.2013 в 09:05.
Владимир1989 вне форума Ответить с цитированием
Старый 04.07.2013, 08:45   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var d: TDateTime;

qr.SQL.Text := 'update Склад set [HAC-CODE] = '+QuotedStr(Edit1.Text)+','+.......
...
d:=Trunc(DateTimePicker1.Date);
qr.Parameters.ParamByName('da').value:=d;
qr.ExecSQL;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.07.2013, 09:04   #5
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

аналогичная ошибка что и на скриншоте только указано что 'qr: Parameter 'da' not found'
Я так понимаю, что не может найти значение?
Владимир1989 вне форума Ответить с цитированием
Старый 04.07.2013, 09:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?

Код:
if FormSklad.Kod = 0 then
    qr.SQL.Text := 'insert into Склад([HAC-CODE], Позиция, [Наименование_агрегата],'+
                       'КодРаботы, [Кол-во], Дата, [Время_начала],'+
                       '[Время_окончания], КодСтатуса, КодИсполнителя, '+
                       'Примечание) values ('+ QuotedStr(Edit1.Text)+','+
                        QuotedStr(Edit2.Text)+','+ QuotedStr(Edit3.Text)+','+
                        IntToStr(ICB1)+','+
                        QuotedStr(Edit4.Text)+','+
                        QuotedStr(MaskEdit2.Text)+','+ QuotedStr(MaskEdit3.Text)+','+
                        IntToStr(ICB2)+','+
                        IntToStr(ICB3)+','+
                        QuotedStr(Edit6.Text)+')'   
else begin
     qr.SQL.Text := 'update Склад set [HAC-CODE] = '+QuotedStr(Edit1.Text)+','+
                        'Позиция = '+QuotedStr(Edit2.Text)+','+
                        '[Наименование_агрегата]='+QuotedStr(Edit3.Text)+','+
                        'КодРаботы = '+IntToStr(ICB1)+','+
                        '[Кол-во] = '+QuotedStr(Edit4.Text)+','+
                        'Дата = :da, '+
                        '[Время_начала] = '+QuotedStr(MaskEdit2.Text)+','+
                        '[Время_окончания] = '+QuotedStr(MaskEdit3.Text)+','+
                        'КодСтатуса = '+IntToStr(ICB2)+','+
                        'КодИсполнителя = '+IntToStr(ICB3)+','+
                        'Примечание = '+QuotedStr(Edit6.Text)+
                        ' where Код = '+IntToStr(FormSklad.Kod);

     qr.Parameters.ParamByName('da').value := Trunc(DateTimePicker1.Date);
end;

  qr.ExecSQL;


UPDATED
кроме того, если уж использовать параметры, так использовать ( у вас же ещё есть поля Время начала, время окончания... )

я имею в виду что-то вроде:
Код:
begin
   qr.SQL.Text := 'update Склад set [HAC-CODE] = :hc , ' +
                        'Позиция = :pzc, ' +
                        '[Наименование_агрегата]= :name_agregate, ' +
                        'КодРаботы = :kodRaboty, ' +
                        '[Кол-во] = :Kolvo, ' +
                        'Дата = :da,' +
                        '[Время_начала] = :vrema_nach,' +
                        '[Время_окончания] = :vrema_konec, ' + 
                        'КодСтатуса = :kodStat, ' +
                        'КодИсполнителя = :kodIsp ' +
                        'Примечание = :prim' + 
                        ' where Код = :kodSklad ';

   qr.Parameters.ParamByName('hc').value := Edit1.Text;
   qr.Parameters.ParamByName('pzc').value := Edit2.Text;
   qr.Parameters.ParamByName('name_agregate').value := Edit3.Text;
   qr.Parameters.ParamByName('kodRaboty').value := ICB1;
   qr.Parameters.ParamByName('kolvo').value := Edit4.Text;
   qr.Parameters.ParamByName('da').value := Trunc(DateTimePicker1.Date);
   qr.Parameters.ParamByName('vrema_nach').value := MaskEdit2.Text;
   qr.Parameters.ParamByName('vrema_konec').value := MaskEdit3.Text;
   qr.Parameters.ParamByName('kodStat').value := ICB2;
   qr.Parameters.ParamByName('kodIsp').value := ICB3;
   qr.Parameters.ParamByName('prim').value := Edit6.Text;
   qr.Parameters.ParamByName('kodSklad').value := FormSklad.Kod;
end;

qr.ExecSQL;

Последний раз редактировалось Serge_Bliznykov; 04.07.2013 в 09:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2013, 09:39   #7
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

[QUOTE=Serge_Bliznykov;1250789]а так?

Код:
if FormSklad.Kod = 0 then
    qr.SQL.Text := 'insert into Склад([HAC-CODE], Позиция, [Наименование_агрегата],'+
                       'КодРаботы, [Кол-во], Дата, [Время_начала],'+
                       '[Время_окончания], КодСтатуса, КодИсполнителя, '+
                       'Примечание) values ('+ QuotedStr(Edit1.Text)+','+
                        QuotedStr(Edit2.Text)+','+ QuotedStr(Edit3.Text)+','+
                        IntToStr(ICB1)+','+
                        QuotedStr(Edit4.Text)+','+
                        QuotedStr(MaskEdit2.Text)+','+ QuotedStr(MaskEdit3.Text)+','+
                        IntToStr(ICB2)+','+
                        IntToStr(ICB3)+','+
                        QuotedStr(Edit6.Text)+')'   
else begin
     qr.SQL.Text := 'update Склад set [HAC-CODE] = '+QuotedStr(Edit1.Text)+','+
                        'Позиция = '+QuotedStr(Edit2.Text)+','+
                        '[Наименование_агрегата]='+QuotedStr(Edit3.Text)+','+
                        'КодРаботы = '+IntToStr(ICB1)+','+
                        '[Кол-во] = '+QuotedStr(Edit4.Text)+','+
                        'Дата = :da, '+
                        '[Время_начала] = '+QuotedStr(MaskEdit2.Text)+','+
                        '[Время_окончания] = '+QuotedStr(MaskEdit3.Text)+','+
                        'КодСтатуса = '+IntToStr(ICB2)+','+
                        'КодИсполнителя = '+IntToStr(ICB3)+','+
                        'Примечание = '+QuotedStr(Edit6.Text)+
                        ' where Код = '+IntToStr(FormSklad.Kod);

     qr.Parameters.ParamByName('da').value := Trunc(DateTimePicker1.Date);
end;

  qr.ExecSQL;
Сделал аналогично, все равно выдает ошибку. Никак не хочет добавлять. Буду пытаться разбираться дальше
Изображения
Тип файла: jpg error2.jpg (31.2 Кб, 72 просмотров)
Владимир1989 вне форума Ответить с цитированием
Старый 04.07.2013, 09:44   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В инсерте в списке 11 полей, а значений в валуес 10
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в таблицу через запросы!! Марат05 C++ Builder 6 09.05.2012 12:52
Добавление данных через форму Полотенчик Microsoft Office Access 1 23.04.2012 10:44
Добавление в ACCESS данных через SQL Rin БД в Delphi 2 17.05.2011 11:48
Добавление данных в таблицу через SQL Morfius01 БД в Delphi 18 19.12.2010 22:15
Добавление данных через поле формы porfonya Microsoft Office Excel 2 20.05.2009 20:20