TP Delphi/InterBase
Soit le modèle de données suivant :
Client Article Fournisseur
Num_Client C (5) Code_Art C (3) Num_Four C(5)
Nom_ClientVA (15) Designation VA (15) Nom_FourVA (15)
1,N Qtt_Stock SI Prenom_FourVA (15)
Prenom_Client VA (15)
Adresse_Client VA (25) Stock_Min SI Adresse_FourVA (25)
Tel_Client C(10) Tel_FourC (10)
1,N
1,N Concerner2
Concerner1 1,N
Qtt_Cmd SI
Qtt_LivSI
Prix_UV N
Passer Prix_UAN Livrer
1,1 1,N
Commande Livraison
Num_Cmd SI Num_LivSI
1,N 1,1
Date_CmdD Date_LivD
Nom_LivreurVA (30)
Création des Tables :
/* Table : Client */
CREATE TABLE CLIENT
(
Num_Client CHAR(5) not null,
Nom_Client VARCHAR(15) not null,
Prenom_Client VARCHAR(15) not null,
Adresse_Client VARCHAR(15),
Tel_Client CHAR(10),
Constraint PK_CLIENT PRIMARY KEY (Num_Client)
);
/* Table : ARTICLE */
CREATE TABLE ARTICLE
(
Code_Art CHAR(3) not null,
Designation VARCHAR(15) not null,
Qtt_Stock SMALLINT,
Stock_Min SMALLINT,
Constraint PK_ARTICLE PRIMARY KEY (Code_Art)
);
/* Table : FOURNISSEUR */
CREATE TABLE FOURNISSEUR
(
Num_Four CHAR(5) not null,
Nom_Four VARCHAR(15) not null,
Prenom_Four VARCHAR(15) not null,
Adresse_Four VARCHAR(15),
Tel_Four CHAR(10),
Constraint PK_FOURNISSEUR PRIMARY KEY (Num_Four)
);
1
/* Table : LIVRAISON */
CREATE TABLE LIVRAISON
(
Num_Liv SMALLINT not null,
Date_Liv Date not null,
Nom_Livreur VARCHAR (30) not null,
Constraint PK_LIVRAISON PRIMARY KEY (Num_Liv)
);
/* Table : COMMANDE */
CREATE TABLE COMMANDE
(
Num_Cmd SMALLINT not null,
Date_Cmd Date not null,
Constraint PK_COMMANDE PRIMARY KEY (Num_Cmd)
);
/* Table : CONCERNER1 */
CREATE TABLE CONCERNER1
(
Num_Liv SMALLINT not null,
Code_Art CHAR(3) not null,
Qtt_Liv SMALLINT not null,
Prix_UA NUMERIC (8,2) not null,
Constraint PK_CONCERNE1 PRIMARY KEY (Num_Liv, Code_Art)
);
/* Table : CONCERNER2 */
CREATE TABLE CONCERNER2
(
Num_Cmd SMALLINT not null,
Code_Art CHAR(3) not null,
Qtt_Cmd SMALLINT not null,
Prix_UV NUMERIC (8,2) not null,
Constraint PK_CONCERNE2 PRIMARY KEY (Num_Cmd, Code_Art)
);
Modification des tables (Ajout de la clé étrangère) :
ALTER TABLE LIVRAISON
ADD Num_Four CHAR(5) Not Null;
ALTER TABLE LIVRAISON
ADD FOREIGN KEY (Num_Four)
REFERENCES FOURNISSEUR (Num_Four) ON UPDATE CASCADE;
ALTER TABLE COMMANDE
ADD Num_Client CHAR(5) Not Null;
ALTER TABLE COMMANDE
ADD FOREIGN KEY (Num_Client)
REFERENCES CLIENT (Num_Client) ON UPDATE CASCADE;
2
Création du Projet Delphi/InterBase :
Fiche Article :
Boutton + :
procedure TFArticle.SpeedButton1Click(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit1.SetFocus;
SpeedButton2.Enabled:=False;
SpeedButton3.Enabled:=False;
SpeedButton9.Enabled:=True;
SpeedButton4.Enabled:=True;
end;
Bouton - :
Procedure TFArticle.SpeedButton2Click(Sender: TObject);
begin
if MessageDlg(' Voulez Vous vraiment Supprimer cet Enregistrement !' ,mtconfirmation,
[mbyes,mbno],0)=mryes then
begin
DM.IBDB.Open;
with DM.IBQ1 do
begin
Close;
with Sql do
begin
Clear;
Add('DELETE FROM Article ');
Add('where Code_Art='''+Edit1.Text+'''');
end; // with Sql
Try
if not DM.IBTrans.InTransaction
then DM.IBTrans.StartTransaction;
// ExecQuery;
ExecSql;
DM.IBTrans.Commit;
Showmessage ('Suppression OK');
except
on e: Exception do
Showmessage ('Pb Suppretion'+e.Message);
end; // Try...Except
end; // with IbQuery1
DM.IBQ2.Active:=True;
end
end;
Bouton :
3
procedure TFArticle.SpeedButton3Click(Sender: TObject);
begin
Up:=True;
end;
Bouton :
Procedure TFArticle.SpeedButton4Click(Sender: TObject);
begin
DM.IBDB.Open;
if up=False then
begin
with DM.IBQ1 do
begin
Close;
with Sql do
begin
Clear;
Add('INSERT INTO Article');
Add('(Code_Art, Designation, Qtt_Stock, Stock_Min)');
Add('VALUES ('''+Edit1.Text+''','''+Edit2.Text+''','''+Edit3.Text+''','''+Edit4.Text+''')');
end;
Try
if not DM.IBTrans.InTransaction
then DM.IBTrans.StartTransaction;
ExecSql; // ExecQuery;
DM.IBTrans.Commit;
Showmessage ('insertion OK');
except
on e: Exception do
Showmessage ('Pb insertion');
end;
end; // with IbQuery1
end // end if
else
begin
DM.IBDB.Open;
with DM.IBQ1 do
begin
Close;
with Sql do
begin
Clear;
Add('UPDATE Article SET Code_Art='''+Edit1.Text+''', Designation='''+Edit2.Text+''',
Qtt_Stock='''+Edit3.Text+''',Stock_Min='''+Edit4.Text+'''');
Add('where Code_Art='''+Code+'''');
end; // with Sql
Try
if not DM.IBTrans.InTransaction
then DM.IBTrans.StartTransaction;
ExecSql; // ExecQuery;
DM.IBTrans.Commit;
Showmessage ('Modification OK');
except
on e: Exception do
4
Showmessage ('Pb Modification'+e.Message);
end; // Try...Except
end; // with IbQuery1
end;
DM.IBQ2.Active:=True;
SpeedButton2.Enabled:=True;
SpeedButton3.Enabled:=True;
end;
Bouton X :
Procedure TFArticle.SpeedButton9Click(Sender: TObject);
begin
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
end;
Bouton << :
procedure TFArticle.SpeedButton5Click(Sender: TObject);
begin
DM.IBQ2.First;
SpeedButton6.Enabled:=False;
SpeedButton5.Enabled:=False;
SpeedButton7.Enabled:=True;
SpeedButton8.Enabled:=True;
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
end;
Bouton < :
Procedure TFArticle.SpeedButton6Click(Sender: TObject);
begin
DM.IBQ2.Prior;
if DM.IBQ2.RecNo=1 then
begin
SpeedButton6.Enabled:=False;
SpeedButton5.Enabled:=False;
end;
SpeedButton7.Enabled:=True;
SpeedButton8.Enabled:=True;
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
end;
Bouton > :
Procedure TFArticle.SpeedButton8Click(Sender: TObject);
begin
DM.IBQ2.Next;
if DM.IBQ2.RecNo=DM.IBQ2.RecordCount then
begin
SpeedButton7.Enabled:=False;
5
SpeedButton8.Enabled:=False;
end;
SpeedButton5.Enabled:=True;
SpeedButton6.Enabled:=True;
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
end;
Bouton >> :
procedure TFArticle.SpeedButton7Click(Sender: TObject);
begin
DM.IBQ2.Last;
SpeedButton7.Enabled:=False;
SpeedButton8.Enabled:=False;
SpeedButton5.Enabled:=True;
SpeedButton6.Enabled:=True;
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
end;
FArticle.Show :
procedure TFArticle.FormShow(Sender: TObject);
begin
Edit1.Text:=DM.IBQ2.FieldValues['Code_Art'];
Edit2.Text:=DM.IBQ2.FieldValues['Designation'];
Edit3.Text:=DM.IBQ2.FieldValues['Qtt_Stock'];
Edit4.Text:=DM.IBQ2.FieldValues['Stock_Min'];
if not ((DM.IBQ2.Bof) or (DM.IBQ2.Eof)) then
begin
SpeedButton7.Enabled:=True;
SpeedButton8.Enabled:=True;
SpeedButton5.Enabled:=True;
SpeedButton6.Enabled:=True;
end;
if DM.IBQ2.Eof then
begin
SpeedButton7.Enabled:=False;
SpeedButton8.Enabled:=False;
SpeedButton5.Enabled:=True;
SpeedButton6.Enabled:=True;
end;
if DM.IBQ2.Bof then
begin
SpeedButton5.Enabled:=False;
SpeedButton6.Enabled:=False;
SpeedButton7.Enabled:=True;
SpeedButton8.Enabled:=True;
end
6
end;
POST_EVENT
SET TERM ^;
CREATE TRIGGER TR_Customer_Balance
FOR Customer
ACTIVE AFTER UPDATE
AS
BEGIN
IF ( CustomerBalance > 10000 ) THEN
POST_EVENT "High_Customer_Balance";
END^
SET TERM ;^
SET TERM^;
CREATE TRIGGER VERIF_ARTICLE_QTT_CMD FOR CONCERNE2
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE Q_Stock SMALLINT;
BEGIN
7
SELECT Qtt_Stock FROM ARTICLE WHERE Code_Art=New.Code_Art INTO : Q_STOCK ;
IF (:Q_STOCK < New.Qtt_Cmd) THEN
EXECUTE PROCEDURE MSG_STK_INS;
END^
SET TERM;^