Ptid0m
Messages postés21Date d'inscriptionvendredi 16 janvier 2009StatutMembreDernière intervention15 mai 2009
-
14 mai 2009 à 09:50
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
15 mai 2009 à 10:52
Bonjour,
Je souhaiterais savoir si il est possible de construire une requête sur deux serveur MS SQL différents afin d'afficher le réultat dans un DBGrid ?
Si oui comment ? avec un TClientDataset ?
Cordialement,
Ptid0m
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 14 mai 2009 à 16:38
bonjour,
En fait je crois comprendre que tu veux utiliser une seule requête utilisant plusieurs tables issues de deux base de données situées sur deux serveurs distincts..
Ptid0m
Messages postés21Date d'inscriptionvendredi 16 janvier 2009StatutMembreDernière intervention15 mai 20091 14 mai 2009 à 16:53
L'idée c'était que dans un DB Grid j'ai le résultat d'une requête d'un serveur SQL et que je rajoute à cette DBGrid une colonne provenant d'une autre requête , les deux étant liés.
j'y suis arrivé avec le TQuery en ajoutant le champ référence (de la 2ième Tquery) à la première ...
J'espère avoir été clair.
Par contre je ne pense pas que cela soit possible de ne faire qu'une seule requête sur plusieurs tables de deux serveurs distincts ... ? à moins que tu ais une solution ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 15 mai 2009 à 09:28
J'ai supposé que c'était en fait ce que tu souhaitais faire..
Mais j'y ai quand même réfléchi et je n'ai pas trouvé de solution satisfaisante
mais en revanche, j'ai réussi à faire deux connexions sur deux bases différentes et réaliser une concaténation de deux champs de deux tables issues des deux bases (avec 2 query) en mettant en place une boucle et stocker le résultat dans un troisième query qui peut bien entendu et relié à un dbgrid.
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
try
try
Screen.Cursor := CrHourGlass; {sablier}
Ib_Connection1.DefaultTransaction.StartTransaction; {démarre la transaction}
with QVide.SQL do {on vide la table résultante}
begin
Clear;
Add('Delete from Conca ');
QVide.ExecSQL;
end;
IboQuery1.Open; {ouverture des query}
IboQuery2.Open;
QConca.Open; {calage en début de table par précaution}
IboQuery1.First;
IboQuery2.First;
while not IboQuery1.Eof do {double boucle imbriquée}
while not IboQuery2.Eof do
begin
QConca.Append; {mode ajout}
for i := 0 to IboQuery1.FieldCount - 1 do {boucle sur les champs de la première table}
if IboQuery1.Fields[i].DataType in {test si c'est du texte pour assurer la concaténation}
[ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString] then
QConca.Post; {enregistrement dans le tampon de la table}
IboQuery1.Next; {passage aux enregistrements suivants simulatément}
IboQuery2.Next;
end;
Ib_Connection1.DefaultTransaction.Commit; {stockage dans la table résultante}
except
Showmessage('une erreur s''est produite, l''opération est annulée'); {petit message en cas d'erreur}
Ib_Connection1.DefaultTransaction.RollBack; {annulation de toutes les opérations et retour au début}
end;
finally
Screen.Cursor := CrDefault; {arrêt du sablier}
ShowMessage('terminé !'); {message de fin, on respire}
end;
end;