IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Déclaration DataSource étrange


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Par défaut Déclaration DataSource étrange
    Bonjour,
    Pour faire suite à un autre post je teste la déclaration de composant sqlite3 hors d'un datamodule.
    Pour cela je crée une forme principale Fappli et 2 forme Form1 et Form2.
    Sur la forme principale je déclare des composants TSqlite3Dataset et TDataSource avec pour seule déclaration le Name et la table en liée pour le DataSource.
    Dans la fiche principale je crée une séquence de déclaration et d'ouverture des tables comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     const
        MREP_TABLE='/home/j/Bureau/laz-linux/essai-appli/tables/';
        MBASE='LCL.sdb';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bank.FileName:=MREP_TABLE+MBASE;
     bank.PrimaryKey:='K_BANK';
     bank.TableName:='BANK';
     bank.SQL:='Select * from bank';
     bank.Active:=True;
     bank.ExecSQL;
    Dans Form1 je déclare un DBGrid avec un bouton donnant normalement la valeur choisie au DataSource ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid.DataSource:=Fappli.Sbank;
    Valeur que je trouve si je cherche via l'inspecteur, mais à la compilation j'ai un message d'erreur comme quoi il ne trouve pas Fappli.
    Naturellement si je déclare dans les uses Fappli il m'annonce un problème de déclaration circulaire, normal Form 1 est déclarée dans Fappli.
    Si je refais la même opération dans Fappli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource:=Sbank;
    Pas de problème.
    Effectuant le même genre de manipulation avec du datamodule avec déclaration de son accès dans chaqe form je n'ai pas de problème.
    Où est mon erreur ?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Jean,

    j'ai regardé rapidement. Je joins un exemple sous Win32 : uForm1 -> Form1 et uAppli -> FAppli.
    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
    program RefCirc;
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}{$IFDEF UseCThreads}
      cthreads,
      {$ENDIF}{$ENDIF}
      Interfaces, // this includes the LCL widgetset
      Forms, uAppli, uForm1
      { you can add units after this };
     
    {$R *.res}
     
    begin
      RequireDerivedFormResource := True;
      Application.Initialize;
      Application.CreateForm(TFAppli, FAppli);
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    Pour la Form principale,
    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
    unit uAppli;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      uForm1, sqlite3conn, sqldb;
     
    type
     
      { TFAppli }
     
      TFAppli = class(TForm)
        Button1: TButton;
        SQLite3Connection1: TSQLite3Connection;
        SQLTransaction1: TSQLTransaction;
        procedure Button1Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      FAppli: TFAppli;
     
    implementation
     
    {$R *.lfm}
     
    { TFAppli }
     
    procedure TFAppli.Button1Click(Sender: TObject);
    begin
      Form1.show;
    end;
     
    end.
    Pour l'autre,
    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
    unit uForm1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, sqldb, db, FileUtil, Forms, Controls, Graphics, Dialogs,
      DBGrids;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        SQLQuery1: TSQLQuery;
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
    uses uAppli;
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       with FAppli do try
         with SQLite3Connection1 do begin
              if Connected then close;
              DatabaseName :=  'sdsauve.db';
              with SQLQuery1 do begin
                   Close;
                   DataBase     := SQLite3Connection1;
                   Transaction  := SQLTransaction1;
                   SQL.Clear;
                   SQL.Add('SELECT * FROM sddirexcept;');
              end;
              SQLite3Connection1.Connected := True;
              SQLQuery1.Open;
          end;
     
       finally
       end;
    end;
     
    end.
    Le code n'est pas optimisé mais fonctionnel sous Win32. Dans le zip, j'ai joint une petite base. J'utilise les SQLQuery et non les SQLite3DataSet : question d'habitude et surtout de portabilité du code. Je n'ai pas testé sous ma Nux 64... J'évalue Lazarus avec gtk3... et donc pour l'instant ce n'est pas très stable. Mais s'il y a problème, je testerai sur mon portable qui est resté en gtk2.

    Bonne fin de WE.
    Cordialement. Gilles
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 13/10/2013 à 11h20.

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Par défaut
    Merci pour ta réponse Gilles, nous allons pouvoir prendre un abonnement,
    Mais ma question est pourquoi cette erreur à la compilation si dans mon unité je cherche à indiquer la valeur du datasource, la même que celle trouvée via l'inspecteur.
    Je suis sous linux
    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir Jean,

    Donc les DataSource1, SQLite3Connection1, SQLQuery1 et SQLTransaction1 sont dans FAppli et seul DBGrid1 est dans TForm1 si je comprends bien ? Dans ce cas-là, la chaîne ne peut pas être utilisée en même temps par TForm2 si le SQLQuery et le Datasource sont "communs".

    Avec cette configuration, cela fonctionne sous Win32. Je rentre à la maison et je teste sur mon portable.
    Modifications apportées :
    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
    unit uAppli;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      uForm1, sqlite3conn, sqldb, db;
     
    type
     
      { TFAppli }
     
      TFAppli = class(TForm)
        Button1: TButton;
        DataSource1: TDataSource;
        SQLite3Connection1: TSQLite3Connection;
        SQLQuery1: TSQLQuery;
        SQLTransaction1: TSQLTransaction;
        procedure Button1Click(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      FAppli: TFAppli;
     
    implementation
     
    {$R *.lfm}
     
    { TFAppli }
     
    procedure TFAppli.Button1Click(Sender: TObject);
    begin
      Form1.show;
    end;
     
    end.
    et
    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
    unit uForm1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
      DBGrids;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
    uses uAppli;
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       with FAppli do try
         {Probablement inutile... par défaut tout est "coupé dans mes TForms}
         if DataSource1.Enabled then DataSource1.Enabled:= False;
         SQLQuery1.Close;
         {Donc...}
         with SQLite3Connection1 do begin
              if Connected then close;
              DatabaseName :=  'sdsauve.db';
     
              with SQLQuery1 do begin
                   Close;
                   DataBase     := SQLite3Connection1;
                   Transaction  := SQLTransaction1;
                   SQL.Clear;
                   SQL.Add('SELECT * FROM sddirexcept;');
              end;
     
              DBGrid1.DataSource := DataSource1;
     
              {On active la chaîne de connexion}
              SQLite3Connection1.Connected := True;
              SQLQuery1.Open;
              DataSource1.Enabled:= True;
          end;
     
       finally
       end;
    end;
     
    end.
    Cordialement. Gilles

  5. #5
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 389
    Par défaut
    Salut Gilles,
    Je vais être absent quelques jours sans lazarus, donc A+

Discussions similaires

  1. [Struts 1.3.8] déclaration d'une datasource
    Par pigeon11 dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/09/2007, 06h29
  2. Problème de déclaration de segment avec use32
    Par le mage tophinus dans le forum Assembleur
    Réponses: 2
    Dernier message: 10/01/2003, 10h17
  3. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31
  4. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  5. Réponses: 8
    Dernier message: 17/05/2002, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo