Les codes que j'ai proposés sont tous ok sur mon poste
Version imprimable
Les codes que j'ai proposés sont tous ok sur mon poste
Ça m'aidera peut-être à découvrir d'où vient le problème.
Parce que c'est quand même un peu fort de café que la requête fonctionne parfaitement ligne par ligne : donc pas de problème de connexion à la base.
En règle général, quand on commence à se poser des questions existentielles, c'est qu'on est arrivé au bout du sujet ;)
Je vais bien arriver à trouver d'où vient le problème.
Merci à tout le monde, même à ceux qui interviennent juste pour dire que les composants Firedac fonctionnent parfaitement :mrgreen: c'est déjà pas mal.
salut
essai de faire un truc comme ceci histoire de voir
ou peux se nicher cette satané erreur
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 try Qry.SQL.clear; St := 'EXECUTE BLOCK AS BEGIN ' +' INSERT INTO nomtable (NUM, NOM, CODE, PRIX, UNITE) VALUES (''1'',''nom'',''code'',0.04,''EUR'') ' +' INSERT INTO nomtable (NUM, NOM, CODE, PRIX, UNITE) VALUES (''2'',''nom2'',''code2'',0.05,''EUR'') ' +' END;'; Qry.SQL.Add(St); Qry.ExecSQL; except on E: Exception do raise Exception.CreateFmt( 'Error Query : %s', [ E.Message]); End;
@Anapurna ta syntaxe SQL est incorrecte
Voir mon post #13 et le #19 pour la correction de la syntaxe
il faut un ; après chaque opération INSERT (donc dans tes instruction lignes 4 et 5) et pas besoin du ; pour le END de la ligne 6
salut
j'ai repris tel quel le code sql ne connaissant pas sa bdd quise trouve derriere ... je me suis attaché a lui donnée une methode de dev afin
qu'il puisse retrouver rapidement l'erreur
pour ma part je n'utilise que les doubles quotes pour les chaine de caractere plutot que des paires de simple quote mais encore faut t'il que cela soit accepté par le moteur de bdd
Merci Anapurna,
J'ai déjà essayé ça et je continue.
Même avec les ";" comme l'a corrigé Sergio, ça ne marche pas.
C'est pour ça que j'ai un peu de mal à croire que c'est ma construction de requête qui pose problème. Puisque, quand je saisie ce petit bloc en dur dans mon code, ça ne marche pas :(
Mais je continue. Il y a sûrement plusieurs problèmes superposés.
Et évidemment, quand j'aurai trouvé, j'aurai trop honte pour vous le dire :oops: Donc, si je ne donne pas de nouvelle, c'est que j'ai trouvé le problème... :mrgreen:
Non, définitivement non.
Je récupère la requête "EXECUTE BLOCK" transmise au FDQuery qui n'INSERT aucun des 37 enreg qu'elle contient dans la base.
Je l'encadre de SET TERM !; et de !, et la lance dans Flamerobin, elle m'INSERT les 37 enreg sans problème.
D'où : il y a bien quelque chose de pas clair dans le fonctionnement du FDQuery, ou un secret d'expert à connaître.
salut
le message d'erreur c'est quoi ?
si il n'y a pas de message d'erreur
il faut peut etre regarder dans les proprietes des composants
le FDQuery est bien attaché a une base de donnée
il y a quoi dans dans le dataBaseName
ta base est bien ouverte ?
.... il y a beaucoup de questions qui semble resté sans reponse
j'utilise les query depuis plus de 20 ans je n'ai jamais eu ce genre de probleme ...
Cela fonctionne, AMHA c'est parce que la transaction est mal gérée que rien ne se passe correctement.
Chacun de mes codes #10 et #13 a été testé. Les seuls doutes en ce qui me concerne, c'est la version de Firebird et de Delphi utilisé.
une session Flamerobin commence par un StartTransaction les enregistrements n'étant validé que par le commitCitation:
lance dans Flamerobin, elle m'INSERT les 37 enreg sans problème.
PS. utiliser ArrayDML avec un TFDQuery se charge de tout ça (démarrer la transaction, créer le block, "écrire les divers Insert", faire le commit) mais bon tant que vous ne voulez pas changer votre façon d'aborder le problème :roll:
De plus j'aimerais bien comprendre davantage le contexte, car une copie d'une table vers une autre pourrait certainement aussi se faire par un TFDBatchMove