![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Код:
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
|
||||
|
||||
|
Каким образом ругается? Транзакции коммитятся после инсертов?
|
|
#3
|
|||
|
|||
|
Вот так ругается
![]() |
|
#4
|
||||
|
||||
|
Ну так ты ключи левые пытаешься заинсертить, вот тебе и выдает ошибку.
Используй сиквенс, из него подбирай нужный ключ на связные таблицы. |
|
#5
|
|||
|
|||
|
Сори, я никогда с БД раньше не работал, можно немного подробнее.
![]() |
|
#6
|
||||
|
||||
|
Почитай: http://citforum.ru/database/osbd/contents.shtml
Когда поймешь, что такое уникальный ключ и внешний ключ - вопрос отпадет. |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Gmail (25.01.2013)
| ||