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
|
|
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
|
|
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