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
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
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...
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 :
avec une Query au runtime :
Code : Sélectionner tout - Visualiser dans une fenêtre à part FDConnection.ExecSQL('ALTER TABLE UNETABLE ADD UNECOLONNE INTEGER');
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
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;
monfichier.sql
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');
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
Salut
Excusez-moi
Ce que je cherche c’est à quelle action (événement)exécuter le programme, OnClic d’un bouton par exemple ?
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.
Bonjour,
ou encore mieux le AfterConnect de la connexion
un simple éditeur notepad suffit pour saisir les instructions SQL, avec l'edi delphi Fichier/Nouveau/Autre .../Autres Fichiers/Fichier TexteEn ce que concerne script j’ai cherché la méthode de construire un tel fichier
je ne comprends pas cette partie, j'ai indiqué que l'on pouvait utiliser TFDScript, si vous ne savez pas utiliser ce dernier l'aidemais je n’ai aucune idée de l’applique avec un fichier exécutable d’une application.
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
Bonjour
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..
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 !
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
Merci pour vos idées et pour vos conseils
Vos suivis étaient très utiles .
grande merci à SergioMaster et tourlourou
Voici quelques possibilités
Par Query
pour obtenir la liste des colonnes d'une table (et donc vérifier si la colonne existe)
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
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;
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
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;
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
Modifier le 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;
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part FdConnexion.ExecSQL('PRAGMA user_version=2');
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
Bonjour SergioMaster
Merci beaucoup pour vos efforts
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager