dbUseArea() auf ein SQL-Statement absetzen

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

dbUseArea() auf ein SQL-Statement absetzen

Beitrag von Friedhelm »

Für diejenigen die es interessiert: Mit eine USE Anweisung eine SQL-Abfrage realisieren!

und so gehts:

Code: Alles auswählen

FUNCTION BrowseSummen
LOCAL nSavedWorkArea
LOCAL hCursor := 0, hStatement := 0
LOCAL hConnect := DacSession():getDefault():GetConnectionHandle()
LOCAL cSQL

   // SQL Statment aufbereiten
   TEXT INTO cSQL WRAP Chr(13)+Chr(10) TRIMMED
      SELECT Count(*) as Anzahl, Kunde, Sum(Netto) 
      FROM Rechnungen
      WHERE Year(RngDatum) = 2011
      GROUP BY Kunde
   ENDTEXT
   _APICall AdsCreateSQLStatement( hConnect. @hStatement)            // Handle für ein SQL Statement anfordern
   _APICall AdsStmtSetTableType( hStatement, 2)                      // Tabellentyp auf DBF-NTX setzen
   _APICall AdsExecuteSQLDirect( hStatemente, @cSQL, @hCursor )      // SQL-Statment an ADS übergeben und CursorHandle anfordern
   nSavedWorkArea := Select()                        
   dbUseArea( .t., NIL, "<CURSOR>" + L2Bin(hCursor) + "<\CURSOR>" )   // Cursor mit USE Command öffnen
   // oder: USE ("<CURSOR>" + L2Bin(hCursor) + "<\CURSOR>") NEW 
   BROWSE()
   dbCloseArea()
   dbSelectArea(nSavedWorkArea)
RETURN


In diesem Beispiel werden nur drei zusätzliche API Calls zusätzlich benötigt, die als DLL Aufruf in die ACE32.DLL erfolgen müssen.
Ein vollständiges Xbase++ API für ADS (Version 10.1) kann ich bei Interesse zur Verfügung stellen.
Gruß Friedhelm
Antworten