QueryBroker (rtl)

De Wiki1000

<source lang='delphi'>Function QueryBroker(const iDatabaseURL:String; const iTraceIdentifier:String; const iClassName:String):TQuery;</source>

Attention : Il est déconseillé d'utiliser des QueryBroker. La majorité des opérations réalisables par un QueryBroker peuvent être réalisées en mode objet en utilisant les sélecteurs et les vues locales.
Attention : L'utilisation de QueryBroker peut entrainer des problèmes dans le cadre des bases de données gérées en OID numérique.
Attention : N'utilisez pas des QueryBroker pour faire des mises à jour dans des classes protégées.

Cette fonction alloue un curseur SQL.

Result Un curseur SQL sur la base de données spécifiée ou sur la base de données par défaut.
iDatabaseURL URL de la base de données dans laquelle allouer le curseur.
iTraceIdentifier Identifiant du curseur dans la trace.
iClassName Nom de classe sur laquelle mapper le résultat.

Le paramètre iClassName permet d'utiliser une vue objet de l'ensemble résultat ; si iClassName est défini le curseur allouera un objet de cette classe pour chaque ligne de l'ensemble résultat. La propriété "Instance" est alors utilisable pour accéder de manière objet aux données retournées par le curseur.

Vous devez utiliser le translateur de code SQL pour construire le code SQL de la requête.

Tip : Ces curseurs ne sont pas objets et ne doivent être utilisés que dans des cas exceptionnels; ils peuvent poser des problèmes de portabilités d'une base de données à une autre si vous ne respectez pas les règles de construction du code SQL.

Exemple

<source lang='delphi'> Procedure _CalculerSoldeInitial; var

 SoldeCompte       : Currency;
 CumulDebit        : Currency;
 CumulCredit       : Currency;
 CumulDebitAutre   : Currency;
 CumulCreditAutre  : Currency;
 Ecriture          : Tecriture;
 i                 : Integer;
 ListeEcriture     : TObjectList;
 PC                : TParametreComptable;
 Query             : String;
 vEcritureEstAutre : Boolean;
 vCursor           : TSQLQuery;
 vNomTable         : String;
 vlWhereJoin       : String;

begin

 vlWhereJoin := ;
 _RazCumuls;
 if (oidCompteGeneral=) And (oidGroupePointage=) then Exit;
 if oidCompteGeneral <>  then
   SoldeCompte := compteGeneral.totalDebitTenue.value - compteGeneral.totalCreditTenue.value;
 if oidGroupePointage<> then
   SoldeCompte := groupePointage.compteGeneral.totalDebitTenue.value - groupePointage.compteGeneral.totalCreditTenue.value ;
 soldeComptable.Value := SoldeCompte;
 CumulDebit  := 0.0;
 CumulCredit := 0.0;
 CumulDebitAutre  := 0.0;
 CumulCreditAutre := 0.0;
 PC:=ClassManager.FindSingleton('TParametreComptable');
 if not Assigned(PC) then
   raise ERule.Create('Les paramètres comptables ne sont pas initialisés');
 vCursor := QueryBroker(,'Ecriture resultat',);
 vCursor.SQL.Add('SELECT SUM(TECRITURE.credit_TCValue), SUM(TECRITURE.debit_TCValue) ');
 vCursor.SQL.Add(' FROM  ');
 vNomTable := ClassManager.FindClassTableName('TECRITURE');
 vCursor.SQL.Add(vCursor.Translator.dbOutTableName(vNomTable,'TECRITURE',dbtoNO));
 vCursor.SQL.Add(vCursor.Translator.dbOutJoin('TPIECE','Piece',dbtoNoLock,'oid','TECRITURE','oidpiece',vlWhereJoin));
 vCursor.SQL.Add(vCursor.Translator.dbOutJoin('TLOT','Lot',dbtoNoLock,'oid','Piece','oidLot',vlWhereJoin));
 vCursor.SQL.Add(vCursor.Translator.dbOutLeftOuterJoin('TGROUPEPOINTAGE','GroupePointage',dbtoNoLock,'oid','TECRITURE','oidGroupePointage',vlWhereJoin));
 vCursor.SQL.Add(' WHERE ');
 vCursor.SQL.Add(' (TECRITURE.eDate <= ' + vCursor.Translator.dbOutVariant(PC.ExerciceEnCours.Datefin) + ') ');
 vCursor.SQL.Add('  AND (Lot.origineLot <> 0) ');
 if oidGroupePointage<>
    then vCursor.SQL.Add('  AND (TECRITURE.oidcompteGeneral =  + GroupePointage.OidCompteGeneral + ) ')
    else vCursor.SQL.Add('  AND (TECRITURE.oidcompteGeneral =  + oidCompteGeneral + ) ');
 vCursor.SQL.Add(' AND (TECRITURE.typeEcriture <> 0) ');
 vCursor.SQL.Add(' AND ( ');
 vCursor.SQL.Add(' (GroupePointage.datePointage >= ' + vCursor.Translator.dbOutVariant(datePointage)+ ')');
 vCursor.SQL.Add('  OR (GroupePointage.datePointage IS NULL)');
 vCursor.SQL.Add(' ) ');
 vCursor.Open;
 vCursor.First;
 while not(vCursor.EOF) do
 begin
   CumulCredit := vCursor.Fields[0].AsVariant;
   CumulDebit  := vCursor.Fields[1].AsVariant;
   vCursor.next;
 end;
 vCursor.Close;
 if Assigned(GroupePointage) then
 begin
   if uniquementEcrituresGroupe then
     begin
       CumulCreditAutre := CumulCredit;
       CumulDebitAutre  := CumulDebit;
     end;
 end
 else
 begin
   // cursor pour autres écritures
   vCursor := QueryBroker(,'Ecriture resultat',);
   vCursor.SQL.Add('SELECT SUM(TECRITURE.credit_TCValue), SUM(TECRITURE.debit_TCValue) ');
   vCursor.SQL.Add(' FROM  ');
   vNomTable := ClassManager.FindClassTableName('TECRITURE');
   vCursor.SQL.Add(vCursor.Translator.dbOutTableName(vNomTable,'TECRITURE',dbtoNO));
   vCursor.SQL.Add(vCursor.Translator.dbOutJoin('TPIECE','Piece',dbtoNoLock,'oid','TECRITURE','oidpiece',vlWhereJoin));
   vCursor.SQL.Add(vCursor.Translator.dbOutJoin('TLOT','Lot',dbtoNoLock,'oid','Piece','oidLot',vlWhereJoin));
   vCursor.SQL.Add(vCursor.Translator.dbOutLeftOuterJoin('TGROUPEPOINTAGE','GroupePointage',dbtoNoLock,'oid','TECRITURE','oidGroupePointage',vlWhereJoin));
   vCursor.SQL.Add(' WHERE ');
   vCursor.SQL.Add(' (TECRITURE.eDate <= ' + vCursor.Translator.dbOutVariant(PC.ExerciceEnCours.Datefin) + ') ');
   vCursor.SQL.Add(' AND (TECRITURE.eDate < ' + vCursor.Translator.dbOutVariant(DateDebut) + ') ');
   vCursor.SQL.Add(' AND (TECRITURE.eDate <= ' + vCursor.Translator.dbOutVariant(Datefin) + ') ');
   vCursor.SQL.Add('  AND (Lot.origineLot <> 0) ');
   if oidGroupePointage<> then
     vCursor.SQL.Add('  AND (TECRITURE.oidcompteGeneral =  + GroupePointage.OidCompteGeneral + ) ')
   else
     vCursor.SQL.Add('  AND (TECRITURE.oidcompteGeneral =  + oidCompteGeneral + ) ');
   vCursor.SQL.Add(' AND (TECRITURE.typeEcriture <> 0) ');
   vCursor.SQL.Add(' AND ( ');
   vCursor.SQL.Add(' (GroupePointage.datePointage > ' + vCursor.Translator.dbOutVariant(datePointage)+ ')');
   vCursor.SQL.Add(' ) ');
   vCursor.Open;
   vCursor.First;
   while not(vCursor.EOF) do
   begin
     CumulCreditAutre := vCursor.Fields[0].AsVariant;
     CumulDebitAutre  := vCursor.Fields[1].AsVariant;
     vCursor.next;
   end;
   vCursor.Close;
 end;
 debitPointeAutre.Value := CumulDebitAutre;
 creditPointeAutre.Value := CumulCreditAutre;
 debitNonPointe.Value := CumulDebit;
 creditNonPointe.Value := CumulCredit;
 soldeTheorique.Value := SoldeCompte - CumulDebit + CumulCredit;
 soldeInitial.value :=  SoldeCompte - CumulDebit + CumulCredit;

end; </source>

Voir aussi:

{{#if:Développement DSM|

{{#if:Développement DSM|— Développement DSM |}} — Développement DSM

|

{{#if:|— [[{{{1}}}]] |}} — Développement DSM

}}