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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2013, 20:45
Gmail Gmail вне форума
Прохожий
 
Регистрация: 04.11.2012
Сообщения: 4
Репутация: 10
По умолчанию Помогите найти ошибку

Код:
procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
  //Добавляем в дочернюю таблицу номер телефона
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Text := Format('INSERT INTO phones(Phone) VALUES(%s)',[QuotedStr(Edit3.Text)]);
  ADOQuery2.ExecSQL;

  //Получаем ID добавленной записи.
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Text := Format('SELECT Id_phone FROM phones WHERE Phone = (%s)',[QuotedStr(Edit3.Text)]);
  ADOQuery2.Active := true;
  n := ADOQuery2.Fields[0].AsInteger;
  Label4.Caption:=IntToStr(n);
  ADOQuery2.Active := false;

  //Добавляем данные в главную таблицу
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := Format('INSERT INTO clients(name,soname,phone_id) VALUES(%s,%s,%s)',[QuotedStr(Edit1.Text),QuotedStr(Edit2.Text),QuotedStr(IntToStr(n))]);
  ADOQuery1.ExecSQL;

  //Обновляем обе таблицы
  ADOTable1.Active:=false;
  ADOTable1.Active:=true;
  ADOTable2.Active:=false;
  ADOTable2.Active:=true;

end;

Работает, но после удаления всех записей из обеих таблиц, начинает ругаться. перезапускаешь программу, снова добавляет записи...
Ответить с цитированием
  #2  
Старый 25.01.2013, 20:48
Аватар для 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, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 25.01.2013, 20:53
Gmail Gmail вне форума
Прохожий
 
Регистрация: 04.11.2012
Сообщения: 4
Репутация: 10
По умолчанию

Вот так ругается
Изображения
Тип файла: jpg Error.JPG (26.3 Кбайт, 5 просмотров)
Ответить с цитированием
  #4  
Старый 25.01.2013, 21:01
Аватар для 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  
Старый 25.01.2013, 21:03
Gmail Gmail вне форума
Прохожий
 
Регистрация: 04.11.2012
Сообщения: 4
Репутация: 10
По умолчанию

Сори, я никогда с БД раньше не работал, можно немного подробнее.
Ответить с цитированием
  #6  
Старый 25.01.2013, 21:10
Аватар для 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
Репутация: выкл
По умолчанию

Почитай: http://citforum.ru/database/osbd/contents.shtml

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


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Gmail (25.01.2013)
  #7  
Старый 25.01.2013, 21:24
Gmail Gmail вне форума
Прохожий
 
Регистрация: 04.11.2012
Сообщения: 4
Репутация: 10
По умолчанию

Хм... Прочитал, сопоставил, вроде всё правильно у меня...

phone_id (FK) ----> id_phone (PK)


Clients
id (PK)
name
soname
phone_id (FK)


Phone
id_phone (PK)
phone
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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