Variable base de données dans 2 fenetres

[Résolu]
Signaler
Messages postés
7
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
5 mai 2008
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Bonjour,
je debute (ou plutot redebute) et j'ai le projet de réaliser une BD avec SQLite..
Seulement je me pose le probleme des applications avec plusieurs forms.
Comment declarer ma variable base de donnée pour qu'elle puisse etre accessible depuis
les differentes fenetres de saisie ?
Par exemple j'ai dans le 'create' du form principal :
  DBchemin := ExtractFilepath(application.exename) + 'maBD.db3';
  Menudb := TSQLiteDatabase.Create(DBchemin); ouverture de la BD
  Menutb := Menudb.GetTable('SELECT * FROM Unite'); ouverture d'une table

Seulement pour acceder a une table depuis un autre formulaire je n'ai trouvé que comme solution
de fermer la BD avant l'ouverture d'un nouveau form et de reouvrir la DB a l'ouverture
de ce nouveau formulaire alors qu'il suffirait de  fermer et ouvrir  une table....si la variable BD
etait visible dans l'ensemble du programme.....
Merci d'avance ...

3 réponses

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
dans l'unite principale :

unit Main;

implementation

uses ...;

type
  TMainForm = class(TForm)
   ...
  end;

var
  MainForm   : TMainForm;
  LiteDB     : TSQLiteDataBase;
  LiteDBPath : string;

interface
 
{$R *.DFM}

uses Unit2, Unit3;

procedure TMainForm.MainFormCreate(...);
begin
  LiteDBPath := ExtractFilePath(Application.ExeName)+'base.db3';
  LiteDB     := TSQLiteDataBase.Create(LiteDBPath);
  ...
end;

procedure TMainForm.MainFormDestroy(...);
begin
  LiteDB.Free;
end;

...

end.

dans les autres unités :

unit X;

implementation
   uses ...;

type
   TFormX = class(TForm)
   ...
   end;

var
  FormX : TFormX;

interface
 
{$R *.DFM}

uses Main;

procedure FormX.FormXEvent(...);
begin
  Table := Main.LiteDB.GetTable('SELECT ... FROM ...');
end;

...

end.

<hr size="2" width="100%" />Croc (click me)
Messages postés
7
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
5 mai 2008

... rapide...simple...efficace...tu es au top !!!
Merci!!!
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
holalala,

il fallait bien sur lire :

Interface
...
Implementation
...

et pas

Implementation
...
Interface
...

Les declarations dans l'Interface sont visible pour toute les autres unités qui utilise l'unité en question,
au contraire les declarations dans l'Implementation sont invisible (privées)  pour les autres unitée.

si tu ecrit :

unit XUnit;


Interface


var X : integer;


Implementation

end.

X serat visible par les unités qui utilise XUnit.

si tu ecrit :

unit XUnit;


Interface

Implementation

var X : integer;

end.

X serat visible uniquement par les methodes declarée en aval de X dans l'implementation de XUnit.

<hr size="2" width="100%" />Croc (click me)