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

 Delphi Discussion :

Modification base de données SQLite par programme


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Modification base de données SQLite par programme
    Bonjour
    Je cherche comment modifier la structure d’une table base de données SQLite par programme ? C’est-à-dire à partir de l’application DELPHIXE7.

    Merci d’avance

  2. #2
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Bonjour,

    Modifier la structure d'une table ? c'est à dire ? Que voulez vous faire exactement ? Supprimer une colonne, gérer les index de la table, ... ?

    Quels composants d'accès aux données utilisez vous ? Firedac ?

    Votre question est bien trop imprécise pour pouvoir y répondre convenablement...

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    il me semblait que l'on avait été clair dans cette discussion mais, à priori non

    en supposant que vous utilisez firedac voici au moins 3 solutions mais il y en a d'autres
    Directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FDConnection.ExecSQL('ALTER TABLE UNETABLE ADD UNECOLONNE INTEGER');
    avec une Query au runtime :
    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
     
    var FDQuery : TFDQuery;
    begin
      FDQUery:=TFDQuery.Create(nil);
      try
        FDQuery.Connection:=FDConnection;
        FDQUery.SQL.Add('ALTER TABLE UNTABLE ADD UNCOLONNE INTEGER');
        try 
           FDQUery.ExecSQL;
        except
           Showmessage('Erreur');
        end;
      finally
        FDQuery.Free;
      end;
    end;
    avec un Script contenu dans un fichier contenant les instructions terminées par ';' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FDScript.SQLScriptFileName:='monfichier.sql';
    FDScript.Validateall;
    if not FDScript.ExecuteAll then Showmessage('Erreur');
    monfichier.sql
    ALTER TABLE UNTABLE ADD UNECOLONNE INTEGER,DEUXCOLONNE STRING;
    ALTER TABLE DEUXTABLE ADD UNECOLONNE TEXT;
    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

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par free07 Voir le message
    Bonjour,

    Modifier la structure d'une table ? c'est à dire ? Que voulez vous faire exactement ? Supprimer une colonne, gérer les index de la table, ... ?
    oui
    Citation Envoyé par free07 Voir le message
    Quels composants d'accès aux données utilisez vous ? Firedac ?
    Oui FireDac

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Salut
    Citation Envoyé par SergioMaster Voir le message
    il me semblait que l'on avait été clair dans cette discussion mais, à priori non
    Excusez-moi



    Citation Envoyé par SergioMaster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FDConnection.ExecSQL('ALTER TABLE UNETABLE ADD UNECOLONNE INTEGER');
    avec une Query au runtime :
    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
     
    var FDQuery : TFDQuery;
    begin
      FDQUery:=TFDQuery.Create(nil);
      try
        FDQuery.Connection:=FDConnection;
        FDQUery.SQL.Add('ALTER TABLE UNTABLE ADD UNCOLONNE INTEGER');
        try 
           FDQUery.ExecSQL;
        except
           Showmessage('Erreur');
        end;
      finally
        FDQuery.Free;
      end;
    end;
    Ce que je cherche c’est à quelle action (événement)exécuter le programme, OnClic d’un bouton par exemple ?



    Citation Envoyé par SergioMaster Voir le message
    avec un Script contenu dans un fichier contenant les instructions terminées par ';' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FDScript.SQLScriptFileName:='monfichier.sql';
    if not FDScript.ExecuteAll then Showmessage('Erreur');
    monfichier.sql
    En ce que concerne script j’ai cherché la méthode de construire un tel fichier mais je n’ai aucune idée de l’applique avec un fichier exécutable d’une application.


    Merci d’avance.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par RahmaniS Voir le message
    Ce que je cherche c’est à quelle action (événement)exécuter le programme, OnClic d’un bouton par exemple ?
    ou encore mieux le AfterConnect de la connexion

    En ce que concerne script j’ai cherché la méthode de construire un tel fichier
    un simple éditeur notepad suffit pour saisir les instructions SQL, avec l'edi delphi Fichier/Nouveau/Autre .../Autres Fichiers/Fichier Texte

    mais je n’ai aucune idée de l’applique avec un fichier exécutable d’une application.
    je ne comprends pas cette partie, j'ai indiqué que l'on pouvait utiliser TFDScript, si vous ne savez pas utiliser ce dernier l'aide
    http://docwiki.embarcadero.com/RADSt..._%28FireDAC%29
    http://docwiki.embarcadero.com/RADSt..._%28FireDAC%29
    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

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Bonjour
    Citation Envoyé par SergioMaster Voir le message
    ou encore mieux le AfterConnect de la connexion
    Dans discussion précédente j’ai écrit le code 2(FDQuery) dans AfterConnect et vraiment les modifications sont fait, mais le problème : à chaque lancement de l’application à PC2 je reçois un message d’erreur ‘Erreur’ parce que l’évènement AfterConnect déclenche chaque lancement de l’application sur PC2
    Mais moi je cherche une solution pour faire les modifications dans le premier lancement de l’application PC2, et après ne jamais recevrai aucun message..

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    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 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Le problème avait déjà été évoqué : il faut tester si la modification doit être faite. Pour cela, soit un flag dans un fichier ini, une clef du registre, ou mieux, la base elle-même pour connaître les modifications déjà appliquées ; soit un SQL qui teste l'application de la modification (si le champ xxx n'existe pas, créer la colonne).
    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
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par RahmaniS Voir le message
    j’ai écrit le code 2(FDQuery) dans AfterConnect
    vraiment les modifications sont faites, mais le problème : à chaque lancement de l’application à PC2 je reçois un message d’erreur ‘Erreur’ parce que l’évènement AfterConnect déclenche chaque lancement de l’application sur PC2
    Si vous recopiez le code sans vous poser de question
    il suffit de ne pas envoyer le message (tout en gardant le bloc try except end)

    Franchement, et comme le souligne tourlourou vous avez toutes les informations nécessaires. Je ne vous proposerai certainement pas d'autre code avant d'avoir un aperçu de vos efforts !
    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

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Merci pour vos idées et pour vos conseils
    Vos suivis étaient très utiles .
    grande merci à SergioMaster et tourlourou

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut Pour information
    Voici quelques possibilités

    Par Query
    pour obtenir la liste des colonnes d'une table (et donc vérifier si la colonne existe)
    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
    var f : TFDQuery;
        SL : TStringlist;
    begin
    f:=TFDQuery.Create(nil);
    SL:=TStringList.Create;
    try
    f.Connection:=fdConnexion;
    f.SQL.Text:='pragma table_info(CONTACTS)';
    f.Open();
    while not f.Eof  do
     begin
      SL.Add(f.FieldByName('name').asString);
      f.Next;
     end;
    f.Close;
     if SL.IndexOf('ID')>-1 then Showmessage('Colonne Existe')
                            else  Showmessage('Colonne à créer');
    {donc pour créer la colonne 
     if SL.IndexOf('ID')=-1 then FdConnexion.ExecSQL('ALTER TABLE CONTACTS ADD  ID INTEGER');}
    finally
     freeAndnil(f);
     freeAndNil(SL);
    end;
    mais aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var f : TFDQuery;
    begin
    f:=TFDQuery.Create(nil);
    try
     f.Connection:=datas.ConnexionLocale;
     f.SQL.Text:='SELECT * FROM CONTACTS LIMIT 1';  // récupération d'un enregistrement
     f.Active:=True;
     if Assigned(f.FieldDefList.Find('TEST')) then showmessage('Colonne TEST existe')
                                            else showmessage('Colonne TEST inexistante');
     f.Active:=False;
    finally
     freeAndnil(f);
    end;
    en cherchant un peu (http://docwiki.embarcadero.com/RADSt..._%28FireDAC%29) , ces 2 codes peuvent même se résumer à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var 
        SL : TStringlist;
    begin
    SL:=TStringList.Create;
    try
     fdConnexion.GetFieldNames('','','CONTACTS','TEST',SL); // verifie si la colonne test existe
     if SL.Lines.Count=0  then Showmessage('Colonne existe')
                                   else  Showmessage('Colonne à créer');
    finally
     freeAndNil(SL);
    end;

    Obtenir un numéro de version utilisateur d'une Base SQLite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FDQuery.Open('PRAGMA  user_version');
    version:=FDQuery.Fields[0].asInteger;
    FDQuery.Close;
    Modifier le numéro de version utilisateur d'une Base SQLite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FdConnexion.ExecSQL('PRAGMA  user_version=2');
    Mais tout ceci est inutile alors qu'un fdScript peut faire facilement le travail pour peu que les options ScriptOptions.BreakOnError=False et ScriptOptions.IgnoreError=True
    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

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Administrateur
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Bonjour SergioMaster
    Merci beaucoup pour vos efforts

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

Discussions similaires

  1. Event sur base de donnée Firebird et programmation delphi
    Par seb8810 dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 16/03/2006, 17h06
  2. [SQLite] Cherche le nom de la nouvelle base de données gérée par PHP5
    Par Thierry8 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/02/2006, 20h21
  3. Accès Réseau a une base de données Access par Visual Basic
    Par thegreatbato dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/01/2006, 14h04
  4. Envoi d'une base de données MySQL par e-mail
    Par Paulinho dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/12/2005, 00h22
  5. Delphi Connexion à une base de donnée distante par TCP/IP
    Par viecel dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/01/2005, 19h19

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