Bonjour,
Dans mon application, j'ai créé une fonction qui recrée dynamiquement la base de données et les tables si la base est absente au démarrage du programme. (Ceci est le cas pour la première utilisation du programme).
Je souhaite également créer "à la volée" les GENERATORS pour créer un champ autoincrement .(Pas de problème).
Evidemment, je souhaite créer à la volée les TRIGGERS.
J'ai parcouru les Faqs, les tutos,les docs, les *.hlp et autres; j'ai également lu le tuto sur les compteurs autoincrémentés (sur ce site).
J'ai toujours une erreur. La réponse est une erreur de syntaxe SQL à telle ligne...
Voici le code de cette fonction dans Delphi :
Plus loin dans le code, l'appel à cette fonction dans Delphi :
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 //Créations des triggers =============================== 1> Function TMain.CreateTrigInc(NomGen : string; NomTable : string):String; 2> var S : string; 3> begin 4> S := 'SET TERM ^;'+ 5> 'CREATE TRIGGER CREATE_ID FOR ' + NomTable +' '+ 6> 'BEFORE INSERT POSITION 0 '+ 7> 'AS BEGIN '+ 8> 'NEW.ID = GEN_ID('+ NomGen +', 1); '+ 9> 'END ^ 10> 'SET TERM ;^'; 11> Result := S; 12> end; //-----------------------------------------------------
La fonction retourne une erreur de syntaxe .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 IBQuery.SQL.Clear; IBQuery.SQL.Add(CreateTrigInc('GEN_ID_AP','AP')); IBQuery.ExecSQL;
Notes :
- Les N° de lignes (xx>) sont ici pour la compréhension...
- La requete SQL est effectuée au cours d'une TRANSACTION (IBTransaction.Commit;except >IBTransaction.Rollback
- La BD (IB6 GPL) est CONNECTED
- SQLDialect = 3
- J'utilise le Quinté gagnant ?? : TIBDataBase =>TIBTransaction => TIBQuery => TIBUpdateSQL => TDataSource
- Les instructions SQL et TRANSACTIONS sont éxécutées correctement ailleurs dans le code.
- Je n'ai pas mis la fonction pour créer les GENERATORS dans ce post, mais elle fonctionne (vérifié avec IBConsole)
- La requete doit être exécutée pour les 40 tables
- Je n'ai pas vérifié si le TRIGGER fonctionne correctement, le but, pour l'instant est d'envoyer la requête correctement.
Or, la requête ne retourne aucune erreur si elle exécutée depuis la fenetre SQL de IBConsole
Dans ce cas, le code est :
J'ai probablement un problème de syntaxe dans le IBQuery...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1> SET TERM ^; 2> CREATE TRIGGER CREATE_ID FOR AP 3> BEFORE INSERT POSITION 0 4> AS 5> BEGIN 6> NEW.ID = GEN_ID(GEN_ID_AP, 1); 7> END^ 8> SET TERM ;^
D'avance je remercie les développeurs qui pourront me dire où est l'erreur, oubien quelle technique dois-je employer. Et merci aux développeurs de me confirmer si l'utilisation du Quinté gagnant est une bonne combinaison de composants à utiliser.
Cordialement
N1bus
Partager