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 :

Manipulations de base Sqlite3


Sujet :

Lazarus Pascal

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut Manipulations de base Sqlite3
    Bonjour,
    Afin d'améliorer mes connaissances de Lazarus sous Linux et Sqlite3, j'essaie à partir d'une petite application avec les composants natifs TSqlite3Dataset et TDataSource de manipuler une base ESSAI.sdb.
    J'arrive à tester si la table existe, à la créer, à la supprimer, à ajouter des champs, (pas à en supprimer mais cette fonction semble impossible sous sqlite3).
    Par contre, je voudrais pouvoir afficher les tables existantes dans une base et les champs d'une table pour par exemple afficher ces informations dans un memo. Mais je n'ai pas encore trouvé comment réaliser ces fonctions.
    Alors merci d'avance pour un petit coup de main.
    .A+

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Je vais me lancer sous peu dans SQLite. Si je ne puis t'être tout de suite que d'une utilité très limitée, je reste attentif à la discussion.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Pour cela, voir du côté de la FAQ SQLite (TABLE sqlite_master) et du pragma table_info qui fourniront la syntaxe des requêtes nécessaires
    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 !

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    si vous voulez un exemple d'utilisation de sqlite3 avec lazarus regarder du côté de lazarus/examples/database/image_mushrooms/ ( version Lazarus 1.4 ou version svn). J'ai participé à la version sqlite et l'exemple permet aussi d'utiliser une base firebird.
    Attention aux dépendances dans l'exemple.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Merci de vos réponses, je reviens un peu tardivement je vais faire des tests car n'étant pas un spécialiste de sqlite3 je ne l'utilise que d'une façon basique pour écrire des données dans des tables et les manipuler. L'usage de sqlite_master et PRAGMA ne sont pas dans mes habitudes ( je suis venu u monde Dbase vers Sqlte), ni la lecture de l'anglais.
    Quand à la doc sur l'utilisation de sqlite elle n'est pas très fournie même en anglais ou bien je ne sais pas chercher mais que voulez-vous avec l'age ..
    Donc patience pour la suite et mes réponses.
    Merci A+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Dans ma recherche de compréhension de la commande PRAGMA j'ai commencé à étudier l'exemple dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lazarus/examples/database/sqlite_encryption_pragma
    Pour information pour l'usage sous linux il faut interdire la commande de recherche de la DLL dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
      // Ensure we're using the local sqlite3.dll
      //SQLiteLibraryName := 'sqlite3.dll';
     
      // Set the path to the database
      SQLite3Connection1.DatabaseName := 'new.db';
     
    end;
    Juste pour information aux petits comme moi.
    A+

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Tu as pu voir, je pense qu'une simple requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name FROM sqlite_master
    WHERE type='table'
    ORDER BY name
    fournissait les noms de toutes les tables de la base.
    Pour chaque table, connaissant son nom, il suffit ensuite d'une requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    PRAGMA table_info(nom_de_la_table)
    pour obtenir une liste de tous les champs de la table avec leur type et leurs spécificités (non nullité, valeur par défaut, appartenance à une clef primaire).
    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 !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Bonjour tourlourou,
    Malheureusement non, la commande passe bien mais je ne sais pas "afficher" le résultat et je constate en travaillant sur l'exemple de lazarus que pour créer des tables avec leurs "colonnes" et les remplir j'utilise moins de composants que dans l'exemple.
    Je n'utilise que les 2 composants natifs TSqlite3Dataset et TDataSource au lieu des composants de l'exemple Tdatasource, TSQLQuery, TSQLTransaction et TSQLConnection.
    Comme je ne suis qu'un petit util1sateur autodidacte de sqlite3 et lazarus je ne sais pas faire la différence entre les 2 solutions, pour la petite histoire mon apprentissage toujours en autodidacte utilisation de Dbase3 et sa programmatiob, puis delphi 2 et 4 avec des tables Dbase avant le passage à Lazarus et toujours des tables Dbase pour "quitter" windows et sur conseil sur ce forum j'ai découvert Sqlite3 mais tout cela à petite échelle, gestion financière, gestion dépense automobile, gestion de DVD etc tout cela pour le plaisir de programmer et d'avoir les résultats que je voulais et 2 de mes petits enfants ayant trouvé certaines applications utiles je les ai adapté à leur environnement.
    Donc pour conclure je ne sais pas afficher les infos des commandes proposées.
    Alors merci d'avance pout un petit coup de main.
    A+

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Bonsoir,
    Un TDBGrid doit permettre d'afficher le contenu du TDataSource dans une grille, mais je ne suis pas spécialiste des composants BDD : j'utilise SQLite directement, à partir de son API. Pour autant, il doit exister des tutoriels sur les composants d'accès aux données.

    Sinon, il doit être possible de parcourir les lignes du DataSet en se positionnant sur la première (n'a-t-il pas une méthode First ?) puis bouclant tant que pas EOF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DataSet1.First;
     table_name:=DataSet1.FieldByName('name');
    while not DataSet1.EOF
    do begin
      table_name:=DataSet1.FieldByName('name'); // récupère à chaque tour le nom d'une des tables de la base
      DataSet1.Next;
    end;
    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 !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Bonjour,
    Je donne des nouvelles.
    J'arrive à afficher dans un memo les tables d'une base maintenant je vais tenter ma chance sur les champs d'une table de cette base.
    Donc la suite au prochain numéro pour la suite de mon feuilleton.
    A+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Suite et fin de mon feuilleton,
    J'ai réussi avec les composants natif de Lazarus pour les bases sqlite3 à créer la base, des tables pour cette base à les supprimer, les modifier à ajouter des champs, à remplir ces champs, à éditer le nom de tables de la base spécifiée à éditer les champs d'une base mais pas leur propriété, mais pour l'instant ce n'est pas grave je n'utilise que des champs texte, mais cette information apparait dans le DBGrid avec d'autres colonnes inconnues pour moi :
    cid notnull dflt_value et pk.
    Mais c'est bien puisque je peux créer une base avec des tables et leurs champs un peu comme je le réalisé avant avec sqliteBrowser.
    Donc cette affaire peut-être close j'ai appris plusieurs manipulations.
    Merci encore pour votre aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/01/2007, 21h56
  2. Manipulation des bases de registre avec VB.NET
    Par noussaENSI dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/07/2006, 13h27
  3. Réponses: 5
    Dernier message: 19/03/2006, 18h29
  4. Peut-on manipuler une base de donnée oracle sans oracle
    Par sillycoder dans le forum Oracle
    Réponses: 8
    Dernier message: 19/01/2006, 09h00
  5. manipuler la base de registre
    Par mzt.insat dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 23/08/2005, 17h29

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