. (. 4.7.2) , , .
( 5.2).
5.2 -
. , - .
test.gdb.
CREATE TABLE PERSONA (P_ID INTEGER NOT NULL,
FIO VARCHAR(50) CHARACTER SET WIN1251,
BDATE DATE)
CREATE TABLE PNUMBER (P_ID INTEGER NOT NULL,
PNUM VARCHAR(10) NOT NULL, PTYPE VARCHAR(20));
, . PERSONA 5.3.
5.3
SQL :
alter table PERSONA add constraint PK_PERSONA primary key (P_ID)
PNUMBER FK_PNUMBER, ( 5.4).
5.4
alter table PNUMBER add constraint FK_PNUMBER foreign key (P_ID)
references PERSONA(P_ID) on delete CASCADE;
CASCADE , PERSONA PNUMBER .
, . , 3.
, , 5.5.
5.5 ( )
PERSONA DataModule2.IBQuery:
SELECT * FROM PERSONA
SQL , .
:
workquery.SQL.Add('insert into persona (p_id,fio,bdate)');
workquery.SQL.Add('VALUES (:p_id,:newfio,:newbdate)');
//
workquery.ParamByName('p_id').AsInteger:=Random(High(integer));
//
workquery.ParamByName('newfio').AsString:=EdFIO.Text;
workquery.ParamByName('newbdate').AsDate:=DTP.Date;
PERSONA P_ID, PNUMBER. 2 :
|
|
1) , GUID COM-. ;
2) . 7.
:
//
workquery.SQL.Add('delete from persona WHERE (p_id=:p_id)');
workquery.ParamByName('p_id').AsInteger:=
IBQuery.FieldByName('p_id').AsInteger;
//
workquery.SQL.Add('update persona set fio=:newfio,
bdate=:newbdate');
workquery.SQL.Add('WHERE (p_id=:p_id)');
workquery.ParamByName('p_id').AsInteger:=
IBQuery.FieldByName('p_id').AsInteger;
workquery.ParamByName('newfio').AsString:=EdFIO.Text;
workquery.ParamByName('newbdate').AsDate:=DTP.Date;
DataModule2 NumQuery. SQL
SELECT * FROM PNUMBER WHERE P_ID=:P_ID
:P_ID . , PERSONA. AfterScroll IBQuery:
procedure TDataModule2.IBQueryAfterScroll(DataSet: TDataSet);
begin
NumQuery.Active:=false;
NumQuery.ParamByName('P_ID').AsInteger:=
IBQuery.FieldByName('P_ID').AsInteger;
NumQuery.Active:=true;
end;
, PERSONA .
DBGrid DataModule2 DataSourceNum:TDataSource.
( 5.6).
5.6
. .
procedure TNumEditForm.BtAddClick(Sender: TObject);
begin
with DataModule2 do
begin
NumQuery.Active:=false; //
//
WorkNumQuery.SQL.Clear;
//
WorkNumQuery.SQL.Add('INSERT INTO PNUMBER
(p_id,pnum,ptype) VALUES (:p_id,:pnum,:ptype)');
// PERSONA
WorkNumQuery.ParamByName('p_id').AsInteger:=
IBQuery.FieldByName('p_id').AsInteger;
//
WorkNumQuery.ParamByName('pnum').AsString:=NumEdit.Text;
WorkNumQuery.ParamByName('ptype').AsString:=CBPType.Text;
//
try
WorkNumQuery.ExecSQL;
WorkNumQuery.Transaction.Commit;
except
showmessage(' ');
WorkNumQuery.Transaction.Rollback;
end;
NumQuery.Active:=true;
end;
end;
, DataModule2 WorkNumQuery Pnumber. . DataModule2 : IBQuery WorkNumQuery.Transaction.Commit. , MainTransaction. . NumQuery.Active:=true , P_ID .
|
|
:
1) IBQuery NumQuery. , ;
2) IBQuery NumQuery.
. DataModule2 NumTransaction, NumQuery, WorkNumQuery ( 5.7).
5.7 DataModule2