Statuszeile manipulieren

07/05/2009 - 08:50 von Volker Scherf | Report spam
Hallo NG,
wenn z.b. eine Tabellenerstellungsabfrage durchlàuft, dann wird ja in der
Statuszeile "Abfrage ausführen..." o.à. angezeigt.
Nun möchte ich aber für die dauer der Abfrage eine benutzerdefinerte Meldung
anzeigen lassen.

Folgende Funktion:
#####
Function fnWriteTable() As Boolean

Dim strSQLParam As String, tmpTbl As String

On Error GoTo fnWriteTable_Error

Dim strModulName As String
Dim varErrLine As Variant

fnWriteTable = False
Application.SysCmd acSysCmdInitMeter, "berechne Wartungsfortschritt...",
0
'oder DoCmd.Echo False, "blablabla"

strModulName = "fnWriteTable"

tmpTbl = "_tmp_tblWartungAnstehendSGM"

DoCmd.SetWarnings False

strSQLParam = "SELECT tbl_id, " & _
"MaschNr, " & _
"MaschineTXT, " & _
"VorgabeTXT, " & _
"DatumLetzte, " & _
"Intervall, " & _
"Fortschritt, " & _
"MaschArtID, " & _
"VorgabeID, " & _
"MaschID, " & _
"MaschArtTXT, " & _
"IstSchuss, " & _
"SollSchuss, " & _
"IIf(DatumLetzte = Date(),'Ja','Nein') AS Durchgefuehrt, "
& _
"Now() AS erstellt " & _
"INTO " & tmpTbl & _
" FROM qry_WartungAnstehendSGM_Source" ' WHERE (tbl_ID >
0) "

DoCmd.RunSQL strSQLParam

fnWriteTable = True

ExitHere:
On Error GoTo 0
DoCmd.SetWarnings True
Application.SysCmd acSysCmdRemoveMeter
Exit Function

fnWriteTable_Error:
...
#####

Jetzt ist das Problem, dass der Code weiterrent, und dabei die Statusbar
wieder zurücksetzt.
Kann man das irgendwie einstellen, dass wàhrend der Dauer der Abfrage eine
benutzerdefinierte Meldung trotzem angeziegt wird?
Ich müsste praktisch irgendwie abwarten bis die Abfrage ausgeführt ist und
dann erst im Code weitermachen.

A2K SP3, SQL-Server 2000, MDE

Viele Grüße,
Volker
 

Lesen sie die antworten

#1 Peter Doering
07/05/2009 - 09:17 | Warnen spam
Hallo,

Volker Scherf wrote:

wenn z.b. eine Tabellenerstellungsabfrage durchlàuft, dann wird ja in der
Statuszeile "Abfrage ausführen..." o.à. angezeigt.
Nun möchte ich aber für die dauer der Abfrage eine benutzerdefinerte Meldung
anzeigen lassen.

Folgende Funktion:
#####
Function fnWriteTable() As Boolean

Dim strSQLParam As String, tmpTbl As String

On Error GoTo fnWriteTable_Error

Dim strModulName As String
Dim varErrLine As Variant

fnWriteTable = False
Application.SysCmd acSysCmdInitMeter, "berechne Wartungsfortschritt...",
0
'oder DoCmd.Echo False, "blablabla"

strModulName = "fnWriteTable"

tmpTbl = "_tmp_tblWartungAnstehendSGM"

DoCmd.SetWarnings False



Schau dir mal www.donkarl.com?FAQ2.4 an.

strSQLParam = "SELECT tbl_id, " & _
"MaschNr, " & _
"MaschineTXT, " & _
"VorgabeTXT, " & _
"DatumLetzte, " & _
"Intervall, " & _
"Fortschritt, " & _
"MaschArtID, " & _
"VorgabeID, " & _
"MaschID, " & _
"MaschArtTXT, " & _
"IstSchuss, " & _
"SollSchuss, " & _
"IIf(DatumLetzte = Date(),'Ja','Nein') AS Durchgefuehrt, "
& _
"Now() AS erstellt " & _
"INTO " & tmpTbl & _
" FROM qry_WartungAnstehendSGM_Source" ' WHERE (tbl_ID >
0) "

DoCmd.RunSQL strSQLParam



dto.


fnWriteTable = True

ExitHere:
On Error GoTo 0
DoCmd.SetWarnings True
Application.SysCmd acSysCmdRemoveMeter
Exit Function

fnWriteTable_Error:
...
#####

Jetzt ist das Problem, dass der Code weiterrent, und dabei die Statusbar
wieder zurücksetzt.
Kann man das irgendwie einstellen, dass wàhrend der Dauer der Abfrage eine
benutzerdefinierte Meldung trotzem angeziegt wird?



Was konkret moechtest du denn anzeigen? Durch die Uebernahme der Kontrolle
durch Application.SysCmd acSysCmdInitMeter uebernimmst du die Kontrolle
ueber die Statuszeile.

Ich müsste praktisch irgendwie abwarten bis die Abfrage ausgeführt ist und
dann erst im Code weitermachen.



Du kannst auch am Anfang der Prozedur ein Formular einblenden und hinterher
wieder schliessen:

DoCmd.OpenForm "DeinFormular"
...
DoCmd.Close acForm, "DeinFormular"

Wenn du darin zur Laufzeit noch etwas anzeigen moechtest, kannst du nach
dem Oeffnen eine Referenz auf das Formular setzen und entsprechende
Aktualisierungen vornehmen:

Dim Frm As Form
DoCmd.OpenForm "DeinFormular"
Set Frm = Forms("DeinFormular")
'mach was
Frm!AnzeigeFeld = "Auf geht's"
Frm.Repaint
'mach nochwas
Frm!AnzeigeFeld = "Sammer's"
Frm.Repaint
'noch mehr Code
DoCmd.Close acForm, "DeinFormular"
Set Frm = Nothing

Gruss - Peter

Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
3. SEK Sa/So 16./17.5.2009, Nürnberg http://www.donkarl.com/SEK/

Ähnliche fragen