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

Bases de données Delphi Discussion :

Débuts avec SQLite et Zeos ; comment créer une table ?


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut Débuts avec SQLite et Zeos ; comment créer une table ?
    on ma conseillé le Sqlite mais j’ai du mal a trouver des tutoriel pour expliqué comment l'utilisé avec delphi 7

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Regarde la Zeos Lib, peut-être
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    je rame toujours avec le Sqlite y a pas un tuto ou un exemple comment l’utilisé avec le delphi 7 juste les info de base
    - installé le Sqlite avec delphi
    - crée une base sqlite
    - l'ajout
    - suppression
    - modification
    - recherche
    ??

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 929
    Points
    3 929
    Par défaut
    Salut

    Plutôt que SQLLite, utilise Firebird, autant faire les choses en grand. Même pour une application monoposte, ça reste pertinent grâce à la version Embedded du serveur pour laquelle serveur et client sont ensemble en local.

    ZeosLIB fonctionne bien avec FB.

    SQLLite a l'avantage d'être "léger" (pléonasme) car le moteur est embarqué dans l'exécutable mais je ne l'ai jamais mis en oeuvre.

    Avec des BLOB Texte tu pourras charger un fichier texte dans un seul champ, petit veinard.

    Paradox a le défaut d'être un peu gourmand en ressource (nombre de fichiers à ouvrir simultanément, d'être obsolète (et encore cela se discute) et surtout de ne pas se comporter toujours très bien en réseau surtout s'il y a de nombreux utilisateurs.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    j'ai enfin pu réaliser le traitement avec les composant Zeolib +Sqlite3

    pour l'ajout nouveau enregistrement
    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
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      // Si aucun enregistrement
      if DbGrid1.Datasource.Dataset.RecordCount = 0 then
        Exit;
      // Si aucun sélectionné
      if DbGrid1.Datasource.Dataset.RecNo < 0 then
        Exit;
      // ajouter un nouveau enrejestrement
      begin
        // Passer en mode édition
        DBGrid1.Datasource.Dataset.Append;
        // ajouter les données
        DBGrid1.Datasource.Dataset.FieldByName('Name').AsString := form1.Edit3.Text;
        DBGrid1.Datasource.Dataset.FieldByName('ProviderID').AsString := form1.Edit4.Text;
        DBGrid1.Datasource.Dataset.FieldByName('KeyIndex').AsString := form1.Edit5.Text;
        DBGrid1.Datasource.Dataset.FieldByName('Key').AsString := form1.Edit6.Text;
        DBGrid1.Datasource.Dataset.FieldByName('Comments').AsString := DateTimeToStr(now);
        // Valider
        DBGrid1.Datasource.Dataset.Post;
     end;
    end;
    Maitre ajour ou Modification
    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
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      // Si aucun enregistrement
      if DbGrid1.Datasource.Dataset.RecordCount = 0 then
        Exit;
      // Si aucun sélectionné
      if DbGrid1.Datasource.Dataset.RecNo < 0 then
        Exit;
      // Mettre à jour
      begin
        // Passer en mode édition
        DBGrid1.Datasource.Dataset.Edit;
        // Modifier les données
        DBGrid1.Datasource.Dataset.FieldByName('Name').AsString := form1.Edit3.Text;
        DBGrid1.Datasource.Dataset.FieldByName('ProviderID').AsString := form1.Edit4.Text;
        DBGrid1.Datasource.Dataset.FieldByName('KeyIndex').AsString := form1.Edit5.Text;
        DBGrid1.Datasource.Dataset.FieldByName('Key').AsString := form1.Edit6.Text;
        DBGrid1.Datasource.Dataset.FieldByName('Comments').AsString := DateTimeToStr(now);
        // Valider la modification
        DBGrid1.Datasource.Dataset.Post;
     end;
    end;
    Suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // Si aucun enregistrement
      if DbGrid1.Datasource.Dataset.RecordCount = 0 then
        Exit;
      // Si il y a un enregistrement courant
      if DbGrid1.Datasource.Dataset.RecNo >= 0 then
        if MessageDlg('Voulez vous vraiment supprimer cet enregistrement ?',
                           MtConfirmation, MbOkCancel, 0) = mrOk then
          DbGrid1.Datasource.DataSet.Delete;
    end;
    Recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Edit2Change(Sender: TObject);
    begin
      // Arrête le filtrage de la table
      form1.ZTable1.Filtered:=false;
      // Test si il n'y a rien dans le TEdit
      if Trim(Edit1.Text) <> '' then
      begin
        // Construction du Filtre avec le texte saisi dans la zone TEdit
        form1.ZTable1.Filter := 'ProviderID like ' + QuotedStr(Edit2.Text + '*');
        // Activation du filtre
        form1.ZTable1.Filtered := true;
      end;
    end;
    le problème qu il me reste que j'arrive pas a résoudre c'est la création de la base si elle n'existe pas ?
    comment on crée une base Sqlite3 ?

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    SQLite crée la base (le fichier) quand on s'y connecte s'il n'existait pas. Je suppose que le TZConnection.Connect devrait le faire.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    SQLite crée la base (le fichier) quand on s'y connecte s'il n'existait pas. Je suppose que le TZConnection.Connect devrait le faire.
    oui il le fait mais il ne crée pas les champs que je veut

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Il suffit d'un ExecuteDirect( 'CREATE TABLE IF NOT EXISTS matable (id INTEGER...)' );
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    j'ai fait comme suit
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS Mytable ([id] INTEGER  PRIMARY KEY NOT NULL,[Name] TEXT  NOT NULL,[ProviderID] TEXT  NOT NULL,[KeyIndex] TEXT  NOT NULL,[Key] TEXT  NOT NULL,[Comments] TEXT  NULL)

    ça ne marche pas y a des erreurs je ne sais pas exactement ou ?

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Tu as ici : SQL As Understood By SQLite qui est une aide précieuse pour la syntaxe des requêtes sous SQLite. J'écrirais donc plutôt (non testé) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS Mytable (id INTEGER PRIMARY KEY, Name TEXT NOT NULL, ProviderID TEXT NOT NULL, KeyIndex TEXT NOT NULL, Key TEXT NOT NULL, Comments TEXT );
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Tu as ici : SQL As Understood By SQLite qui est une aide précieuse pour la syntaxe des requêtes sous SQLite. J'écrirais donc plutôt (non testé) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS Mytable (id INTEGER PRIMARY KEY, Name TEXT NOT NULL, ProviderID TEXT NOT NULL, KeyIndex TEXT NOT NULL, Key TEXT NOT NULL, Comments TEXT );
    Merci
    mais j'ai toujours l'erreur de pas assez de paramétré ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    je n'ai plu d'erreur avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZQuery1.SQL.add('CREATE TABLE Table (id INTEGER  PRIMARY KEY NOT NULL,Name TEXT  NOT NULL,ProviderID TEXT  NOT NULL,KeyIndex TEXT  NOT NULL,Key TEXT  NOT NULL,Comments TEXT  NULL)');
    mais il ne crée aucune table ??

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Est-il judicieux d'utiliser des noms réservés comme identificateurs ?
    CREATE TABLE table ou KEY TEXT NOT NULL
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  14. #14
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Tu as ici un exemple pour Lazarus, dont tu pourras pê t'inspirer.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  15. #15
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    je viens de crée un projet test pour voir le problème exactement

    forme + ZConnection + ZTable + ZQuery + Button

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    Var Nombase : string ;
    begin
      Nombase :=  'C:\test.db' ;
     With form1.ZConnection1 do
     Begin
      Database :=   Nombase  ;
    ZQuery1.SQL.Text:='CREATE TABLE IF NOT EXISTS test (id INTEGER  PRIMARY KEY NOT NULL,Name TEXT  NOT NULL,ProviderID TEXT  NOT NULL,KeyIndex TEXT  NOT NULL,Key TEXT  NOT NULL,Comments TEXT  NULL)';
    ZQuery1.execSql;
     End;
    end;
    ben la, la table et bien crée comme je le veut

    mais je ne comprend pas pourquoi ça ne marche pas dans l’événement AfterConnect ??

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Le ExecSQL + la Query pourrait être avantageusement remplacé par un ExecuteDirect
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Le ExecSQL + la Query pourrait être avantageusement remplacé par un ExecuteDirect
    Merci infiniment
    ça marche nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment créer une table avec une clé etrangère?
    Par nassimanocus dans le forum Bases de données
    Réponses: 10
    Dernier message: 13/12/2012, 10h19
  2. comment créer une table avec un nom variable ( le mois actuel)
    Par sarah_insat dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/02/2011, 18h00
  3. Comment créer une table avec clé primaire
    Par tavarlindar dans le forum Débuter
    Réponses: 6
    Dernier message: 25/08/2010, 13h04
  4. [D6] Comment créer une table Access en SQL avec ADO ?
    Par Lung dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/09/2007, 15h27
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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