Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.04.2014, 23:49
Nostradamus051 Nostradamus051 вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Не сохраняется запись в БД

Добрый день!

Есть код:
Код:
procedure TForm1.btn15Click(Sender: TObject);
begin
if (cbb2.ItemIndex=(-1)) or (edt2.text='') then MessageDlg('Çàïîëíåíû íå âñå ïîëÿ!',mtError, [mbOK], 0)
else begin
  if edt1.text<>'' then begin
    dm.ADOtab1.Append;
    dm.ADOtab1['name_kat']:=edt1.Text;
    dm.ADOtab1.Post;
    DM.ADOtab1.Refresh;
    end;
  if not DM.ADOtab3.Locate('name_tip',edt6.Text,[]) then begin
    DM.ADOtab3.Append;
    dm.ADOtab3['name_tip']:=edt6.Text;
    dm.ADOtab3.Post;
    dm.ADOtab3.Refresh;
    end;
  DM.ADOtab2.Append;
  if cbb2.ItemIndex>(-1) then DM.ADOtab2['name_kat']:=cbb2.text
  else dm.ADOtab2['name_kat']:=edt1.Text;
  DM.ADOtab2['name_kn']:=edt2.text;
  DM.ADOtab2['avtor']:=edt3.text;
  DM.ADOtab2['god']:=edt4.text;
  dm.ADOtab2['name_file']:=edt5.text;
  dm.ADOtab2['tip_file']:=edt6.text;
  dm.ADOtab2['data']:=date();
  dm.ADOtab2.Post;
  end;
end;

При добавлении новой записи (если создавать новую запись в adotab1['name_kat']) вылетает ошибка (во вложении).
И это странно, т.к. при добавлении новой записи в adotab3['name_tip'] все нормально работает и сохраняет.
В tab1 'name_kat' - ключ, в tab3 'name_tip' - ключ. Связаны с tab2 как один ко многим.
Ошибка вылетает на строке dm.ADOtab2.Post;
Для полной ясности во вложении проект и бд.
Пароль "2014".
Изображения
Тип файла: jpg Ошибка.jpg (36.3 Кбайт, 4 просмотров)
Вложения
Тип файла: rar Программа мой вариант.rar (352.2 Кбайт, 1 просмотров)
Ответить с цитированием
  #2  
Старый 27.04.2014, 09:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Большой совет: не пользуйся этим дермищем, используй ADOCommand с параметризованным запросом "insert into tablename(field1, field2) values(:value1, :value2)".

Ошибка, судя по всему, из-за нарушения констрейнта, ссылка на несуществующую запись.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 27.04.2014, 12:51
Nostradamus051 Nostradamus051 вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Большой совет: не пользуйся этим дермищем, используй ADOCommand с параметризованным запросом "insert into tablename(field1, field2) values(:value1, :value2)".

Ошибка, судя по всему, из-за нарушения констрейнта, ссылка на несуществующую запись.

В том то и дело, что запись создается в первой таблице.. Но сохранять запись во второй не хочет.
В то же время при новой записи в третей таблице - все работает.
Ладно, попробую разобраться в adocommand.
Ответить с цитированием
  #4  
Старый 27.04.2014, 14:28
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Транзакция на тот момент завершена?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 27.04.2014, 23:35
Nostradamus051 Nostradamus051 вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Какая-то хрень.. Методом тыка пришел к такому изменению:
Код:
  DM.ADOtab2.Append;
  dm.ADOtab2['name_kat']:=cbb2.Items.Strings[0];
  DM.ADOtab2['name_kn']:=edt2.text;
  DM.ADOtab2['avtor']:=edt3.text;
  DM.ADOtab2['god']:=edt4.text;
  dm.ADOtab2['name_file']:=edt5.text;
  dm.ADOtab2['tip_file']:=edt6.text;
  dm.ADOtab2['data']:=date();
  dm.ADOtab2.Post;
  dm.ADOtab2.Edit;
  dm.ADOtab2['name_kat']:=edt1.Text;
  dm.ADOtab2.Post;
Т.е. сначала сделал запись с точно существующей позицией, потом открыл для изменения и заменил на новую... И все работает.. Мне плевать, на сколько ужасно это выглядит, но зато работает, а другого мне и не надо )
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025