Salut tout le monde,
Je suis en train de créer une application sous Delphi utilisant une base de données "Interbase". J'ai choisi ce type de BD afin d'avoir un fichier unique et non pas un fichier pour chaque table.
Une de mes tables se nomme "typesDocument" et comporte des types de document. J'ai créé une fiche avec une simple "DBGrid" afin que l'utilisateur puisse ajouter, modifier et supprimer des types de document de façon très simple.
Voici le script de création de ma table :
Sur mon DBGrid je masque la première colonne afin que l'utilisateur n'ai a saisir que l'intitulé du type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 With BD_typesDocument Do Begin Transaction.Active:=true; With FieldDefs Do Begin Clear; With AddFieldDef Do Begin Name:='ID'; DataType:=ftInteger; Required:=true; End; With AddFieldDef Do Begin Name:='LIBELLE'; DataType:=ftString; Size:=155; End; End; With IndexDefs Do Begin Clear; With AddIndexDef Do Begin Name:=''; Fields:='ID'; Options:=[ixPrimary]; End; End; CreateTable; End; BD_SQL.Transaction.Active:=true; With BD_SQL.SQL do begin Clear; Add('CREATE GENERATOR TYPESDOCUMENT_GenId;'); end; BD_SQL.ExecQuery; With BD_SQL.SQL do begin Clear; Add('CREATE TRIGGER TRIG_TYPESDOCUMENT_GenId FOR TYPESDOCUMENT'); Add('ACTIVE BEFORE INSERT AS'); Add('BEGIN'); Add(' IF ( NEW.ID IS NULL ) THEN'); Add(' NEW.ID = GEN_ID(TYPESDOCUMENT_GenId,1);'); Add('END'); end; BD_SQL.ExecQuery;
Mon problème est que :
- Utilisé ainsi, lorsque l'utilisateur saisir une ligne sur le DBGride et la valide, le programme indique que le champ ID est obligatoire
- Si je supprime "Required:=true" et que je ne créé pas de clé primaire : le programme ne me demande rien et créé bien mon enregistrement en affectant bien l'ID comme je le veux
Donc le second cas correspond à ce que je veux faire. Le seul HIC c'est que dans ma table je ne défini pas de clé primaire et cela me gène !
Comment puis-je faire pour à la fois définir une clé primaire, et en même temps mettre une valeur par défaut (NULL) à ma colonne masquée ?
Merci pour toute aide
Partager