QueryBroker (rtl)
<source lang='delphi'>Function QueryBroker(const iDatabaseURL:String; const iTraceIdentifier:String; const iClassName:String):TQuery;</source>
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.
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 —
}}