Bonjour à tous,
Je voudrais transférer des données d'une table à une autre, sachant que les 2 tables se trouve dans 2 base de données différentes.
Bonjour à tous,
Je voudrais transférer des données d'une table à une autre, sachant que les 2 tables se trouve dans 2 base de données différentes.
j'ai essayer avec le code suivant
mais il me signal "token unkown c"
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
24
25 CREATE PROCEDURE SISTK ( NUM1 Varchar(5), CHE Varchar(300) ) RETURNS ( STK Integer ) AS declare variable num varchar(5); declare variable pro1 varchar(20); declare variable qta1 numeric(14,5); declare variable qtv1 numeric(14,5); BEGIN with c as ( select pro,qte as qta,0 as qtv from ACH union all select pro,0 as qta,qte as qtv from VEN ) select pro,sum(qta) as qta, sum(qtv) as qtv from C group by 1; for select pro,qta,qtv from c into :pro1,:qta1,:qtv1 do begin execute statement('update pro set stk='||:qta1-:qtv1||' where pro='||:pro1) on external :che AS USER 'sysdba' PASSWORD 'masterkey'; suspend; end
Bonjour,
pour répondre à "token unkown c", c'est normal, votre CTE doit se trouver dans la boucle for et non en dehors
par contre je m'interroge sur l'utilisation du Statement et les paramètres comme indiqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 BEGIN for with c as ( select pro,qte as qta,0 as qtv from ACH union all select pro,0 as qta,qte as qtv from VEN ) select pro,sum(qta), sum(qtv) from C group by 1 INTO :pro1,:qta1,:qtv1 do
Au fait pourquoi qta1 et qtv alors que l'opération peut être faite dans la boucle ? select pro,sum(qta)-sum(qtv) from C group by 1 INTO :pro1,:tot
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 do execute statement('update pro set stk=? where pro=?') (:qta1-:qtv1,:pro1) ON external :che AS USER 'sysdba' PASSWORD 'masterkey';
A noter, j'utilise la syntaxe trouvée au chapitre parametrized statements indiquée ici
Je doute aussi que le paramètre :che soit interprété correctement mais ça, je ne sais pas à cet instant palier ce genre de chose.
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 je vai voir si ça marche.
:che représente la base de données externe.Je doute aussi que le paramètre :che soit interprété correctement mais ça, je ne sais pas à cet instant palier ce genre de chose.
ça je l'ai compris, mais j'ai un doute, je n'ai jamais essayé ce type de passage de paramètre
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
Votre code marche , mais son execution et trés lente, elle dure presque une minute
je viens de faire un test, effectivement le passage du nom de la BDD (pour moi un alias) en paramètre ça fonctionne
Houla, ce n'est pas mon code, c'est le votre (du moins pour ce qui est la partie for select) ne vous en prenez qu'à vous.
Je vous ai indiqué les points qui ne fonctionnaient pas dans votre procédure de départ, pas d'avantage
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
C'est vrai mon code. Cependant le code marche bien si on l'execute avec ibsql ou flamrobin, par contre dans un program delphi il me signale "token unkown ?"
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,
j'ai mis le code comme il est, j'ai enlevé seulement "set term"
Alors là, c'est encore plus flou ! Je croyais cela impossible mais non, vous avez réussi à faire "mieux"j'ai mis le code comme il est, j'ai enlevé seulement "set term"
Quel rapport entre SET TERM et l'exécution d'une procédure en Delphi ?
C'est bien la preuve que sans information sur le code aucune réponse valable ne peut être donnée. Je pensais qu'il s'agissait d'une exécution de procédure et là, pour que SET TERM soit impliqué, il s'agit, selon ma boule de cristal, d'un script de création d'une procédurepar contre dans un program delphi il me signale "token unkown ?"
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,
Oui, je voudrais créer une procédure stockée à partir de mon programme delphi. C'est vrai que je peut le faire on utilisant flamrobin par exple, mais j'ai une centaine de base de données et mettre un programme c'est plus rapide.
Il fallait le préciser, tout comme il fallait préciser le composant utilisé dans Delphi.
Votre problème (toujours le même) c'est que lorsque vous posez une question dans les forums est que vous n'exposez jamais complètement le problème et l'environnement.
On est passé d'une question pure SQL Firebird à une mise à jour de structure de base de données. Moi je trouve ça "anormal"
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
Désolé pour la confusion, ce n'été pas mon attention.
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