Bonjour,

Reprenant mon initiation à l'environnement Lazarus, et tout particulièrement à la gestion des bases de données, je me heurte à quelques difficultés.
Mon objectif est de créer, renseigner, modifier et extraire dans un environnement monoposte une base de données. J'utilise pour cela une base de type SQLITE3 et la palette de composants Zeos.
J'ai réussi (non sans mal, mais rien d'étonnant à cela ) à*:
- Construire un formulaire qui permet d'accéder à la création/ouverture d'une base de données puis à ouvrir (au choix) l'une des deux tables de cette base (form1). Ce formulaire contient donc les divers contrôle Zeos*: Zlit_Stock (TZ connection), ZquerStocks (TZQuery), Ztb_Stock et Tdatasource*: Donnees.
L'ouverture de la table étant acquise, ce formulaire est masqué pour laisser la place à un autre formulaire (form_remplir) qui sera destiné à gérer la base de données. Il contient des contrôles «*Tedit*» destinés à recevoir les informations qui viendront renseigner les divers champs de la table concernée. Il continent aussi des contrôles boutons ( contrôles TBItBtbn) destinés à créer un enregistrement vide ( Bt_Nouveau), valider la création de l'enregistrement après avoir renseigné les champs correspondants, sélectionner un enregistrement pour le modifier, sélectionner un enregistrement pour le supprimer.
La communication entre les divers formulaires est convenablement assurée (d'après mes tests) par les déclarations d'unités.
La compilation se déroule sans problème, ainsi que la création de la base et des tables. Par contre, lorsque je tente d'ajouter un enregistrement (Click sur Nouveau – form_remplir) j'ai un message d'erreur*: SQL error*: SQL logic error or missing Database .
J'ai donc certainement oublié de renseigner quelque chose dans les contrôles de la form1 ou des instructions manquent pour que la table soit accessible mais Quoi*?
Mon code pour les deux feuilles concernées suit*:
FORM1 :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
procedure TForm1.Bt_creatClick(Sender: TObject);
Var NomRepBase : String ;
Var Dnombase :string ;
Var NomBase0 : String ;
Var Cree_tableSQL : string ;
Var Cree_table2SQL : string ;
 var Toto : string ;
 
begin
     NomRepBase := Dir_RepBase.Text ;
     NomBase0 :=  File_NomBase.text ;
     DNombase :=  NomRepBase + '\' +  NomBase0 + '.sqlite' ;
 
  if BR_Cree.checked = True Then
 
     if fileexists(DNomBase) then   // recherche si la base à déjà été créée dans le chemin complet indiqué par Dnombase
          Begin
          Showmessage ('ATTENTION - La base ' + Nombase0 + ' existe ' + #13 +'           Changer de Nom !! ') ;
          File_NomBase.Setfocus ;
          end
      Else
          Begin
          Zlit_Stock.Database := Dnombase ;
          Zlit_Stock.Connected := True  ;
           // Définition de la table Stock_A associée à la base SQLITE qui vient d'être Créée
 
           Cree_tableSQL :='CREATE TABLE Stock_A ("IDProduit" INTEGER PRIMARY KEY AUTOINCREMENT,  "Produits" VARCHAR(15), "Designation" VARCHAR(40),' ;    // ici la syntaxe est conforme
           Cree_tableSQL :=  Cree_tableSQL + '"Categorie" VARCHAR(2),"Prix" Numeric(6,2),"Quantite" Integer )';   // au langage SQL
           // Fin de la construction de la chaine de caractères définissant la structure de la table à créer
           Cree_table2SQL :='CREATE TABLE Clients ("NOM" VARCHAR(60), "Prenom" VARCHAR(120),' ;
           Cree_table2SQL :=  Cree_table2SQL + '"Ville" VARCHAR(40), "Code" VARCCHAR(5) )';
           // Définition de la seconde table
           // Création des tables
           ZQuerStocks.SQL.Clear ; // vide la chaine SQL existante   par instruction SQL du contrôle ZQuerStocks
           ZQuerStocks.SQL.Text := Cree_tableSQL ; // chargement de la commande SQL à Exécuter
           ZQuerStocks.execSql ; //Exécution de la commande SQL
           ZQuerStocks.SQL.Clear ; // vide la chaine SQL existante   par instruction SQL du contrôle ZQuerStocks
           ZQuerStocks.SQL.Text := Cree_table2SQL ; // chargement de la commande SQL à Exécuter
           ZQuerStocks.execSql ; //Exécution de la commande SQL
          // ZQuerStocks.active := True ;
          // ZTB_Stock.open ; // La table est céée on peut l'ouvrir
           // Message de succès de création de la base
           Showmessage ('Base ' + Dnombase + ' + table Créées !') ;
            edit2.caption := Dnombase ;
           end ;
            Toto := 'Coucou' ;
            edit1.caption := Toto ;
            Zlit_Stock.Connected:=True ;
         // ouverture de la table et de la feuille correspondante selon choix du bouton 'Choix de table'
    // ouverture de la base SQLITE désignée par RepBase et NomBase (valeur du bouton radio)
 
    // accéder à la table Stock_A  ou Clients
  if  BR_Produits.Checked  = True then
     Begin
     ZTb_Stock.tablename := 'Stock_A' ;
     Form_remplir.show ;
     End
     Else
     Begin
 // If BR_Clients.checked := True then
     ZTb_Stock.tablename := 'Clients' ;
     FormClient.show ;
 end ;
 End;
 
 
 
 end.
Form_remplir:
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
39
40
41
42
43
var
  Form_remplir: TForm_remplir;
 
implementation
Uses
  unitstocks;  //permet l'accès à Form1 depuis le formulaire de remplissage
 
{$R *.lfm}
 
{ TForm_remplir }
 
 
 
procedure TForm_remplir.Bt_NouveauClick(Sender: TObject);
var Nombase2  : string ;
 
begin
 Nombase2 := Form1.Edit2.Text;
 Form1.Zlit_Stock.Database := nombase2 ;
 Form1.Zlit_Stock.Connected := True  ;
 
Form1.hide ;   //masquer le formulaire d'entrée
ED_Produit.text := '' ;  // vider les diverses boites d'entrée des variables
Ed_Designation.text := '' ;
Ed_Prix.text := '00.00' ;
Ed_Quantite.Text := '0';
 
Form1.ZTb_Stock.tableName := 'Stock_A' ;
Form1.ZTb_Stock.active := True;
Form1.ZTb_Stock.append;  // ajoute un enregistrement vierge à la table Stock_A
Form1.ZTb_Stock.Fieldbyname('Produits').asstring := Ed_Produit.text;
Form1.ZTb_Stock.Fieldbyname('Designation').asstring := Ed_Designation.text;
Form1.ZTb_Stock.Fieldbyname('Categorie').asstring := CB_Categorie.text;
Form1.ZTb_Stock.Fieldbyname('Prix').asFloat := Strtofloat(Ed_Prix.text) ;
Form1.ZTb_Stock.Fieldbyname('Quantite').asinteger := Strtoint(Ed_Quantite.text);
end;
 
procedure TForm_remplir.Bt_ValideClick(Sender: TObject);
begin
 Form1.ZTb_Stock.post;
end;
 
end.
Je précise que la Form1 contient un DBGRID dont je ne me suis pas servi pour l'instant. Certaines lignes sont inutiles ou laissées en remarque ce sont des résidus de mes tests.
Question subsidiaire :
J'ai tenté de modifier la couleur du texte de certains boutons pour agrémenter l'interface (par exemple Supprimer en rouge) mais malgré la modification faite dans la "Font" du bouton rien ne se passe (Bug ?)