TBeCBAsyncQuery
TBeCBAsyncQuery
Ermöglicht das asynchronee Ausführen von SQL-Queries.
Eigenschaften | |
---|---|
Query:O | Das AdsQuery-Objekt |
SqlText:C | Das auszuführende SQL-Statement |
AdminConnect:L | True = Query als Administrator starten |
SqlOk:L | True = Wenn das Statement fehlerfrei ausgeführt wurde False = Wenn während der Ausführung Fehler aufgetreten sind |
LastError:C | Fehlertext des zuletzt ausgeführten Statements |
Duration:D | Die Dauer der Ausführung |
RowsAffected:N | Anzahl der betroffenen Datensätze |
SqlOpen:L | True = Der Query soll nur geöffnet werden False = Der Query soll ausgeführt werden |
ExecQuery:L | Wurde der Query angehalten, wird dieser wieder fortgesetzt und dementsprechend True oder False zurückgegeben |
Terminate:L | Der Query wird geschlossen, anschließend wird Terminated zurückgegeben |
Terminated:L | True = Der Query wurde geschlossen False = Der Query wurde nicht geschlossen |
Suspended:L | Durch setzen dieser Eigenschaft auf True wird der Query angehalten |
Aktive Eigenschaften (Events) | |
---|---|
OnInitQuery | Bei Initialisierung des Queries |
OnExitQuery | Bei Beenden des Queries |
Beispiel
//******************************************************************************
// Programm zum Testen der TBeCbAsyncQuery-Klasse
//******************************************************************************
| oAsyncQuery, lFinished, cTime, cLastTime |
//##############################################################################
//##############################################################################
// Eventhandler
//##############################################################################
//##############################################################################
//******************************************************************************
// Wird bei aufruf des OnExit Events aufgerufen
//******************************************************************************
function OnExitQuery(Sender) // Sender ist oAsyncQuery
| aQuery |
StartSeq
WriteLn('Dauer der Abfrage: ' +
FormatDateTime('hh:nn:ss:zzz', Sender.Duration)),
WriteLn('-------------------------------'),
aQuery:= Sender.Query,
DbGoTop(aQuery),
while !EoF(aQuery) do
WriteLn(Trim(aQuery:Bez1) + ' ' + Trim(aQuery:Bez2)),
DbSkip(1, aQuery),
end
Always
// Wichtig: das MUSS stattfinden !!!
lFinished:= True
StopSeq
end,
//##############################################################################
//##############################################################################
// Hauptprogramm
//##############################################################################
//##############################################################################
oAsyncQuery:= CreateObject('TBeCBAsyncQuery'), // Objekt erzeugen
if not Empty(oAsyncQuery) then
StartSeq
// Sql-Text zuweisen
oAsyncQuery.SqlText:= 'SELECT * FROM "DAB010.DBF" ' + // Alle Artikel mit 'TEST' selektieren
' WHERE ARTNR LIKE ''%TEST%'' ' +
' ORDER BY KOSTENST',
// Abfrage mit Open öffnen
oAsyncQuery.SqlOpen:= True,
AssignEvent(oAsyncQuery, 'OnExitQuery', 'OnExitQuery'),
// Abfrage ausführen
lFinished:= False,
oAsyncQuery.ExecQuery,
// Warten ...
cLastTime:= '',
while not lFinished do
// Hier kann alles mögliche gemacht werden, solange die Abfrage läuft ...
cTime:= TimeToStr(Now()),
if cTime <> cLastTime then
writeln(cTime),
cLastTime:= cTime,
endif,
ProcessMsg()
end,
Meld('Fertig: ' + iif(oAsyncQuery.SqlOk, 'Ok', oAsyncQuery.LastError))
Always
DestroyObject(oAsyncQuery)
StopSeq
endif