Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

regelmäßige Datenbank-Abfragen, warten auf Ereignis

Begonnen von datekk, Januar 18, 2021, 10:38:13

⏪ vorheriges - nächstes ⏩

datekk

Hi,

um mit einer Webanwendung interagieren zu können habe ich im Outlook ein kleines VBA-Tool geschrieben. Dieses wird als Makro aufgerufen. Outlook öffnet daraufhin ein UserForm.

Ich möchte nun, dass das Tool alle 2 Sekunden eine Datenbankanfrage durchführt. Die Datenbankabfrage stellt kein Problem dar. Wie aber kann ich den 2-sekündigen Abruf so gestalten, dass Outlook ganz normal weiterarbeitet?

Leider scheint es im Outlook keinen Timer-Event zu geben. Daher habe ich eine Do While Schleife gebaut, welche wie folgt aufgebaut ist:

Private Sub Zeitschleife()
Dim start As Variant

neustart:
start = Timer
Do While Timer < start + 2
    DoEvents
 
 
Loop

    If Datenbankabfrage = true Then GoTo DatenEmpfangen


GoTo neustart

DatenEmpfangen:

     AktionDatenEmpfangen

End Sub



Nur leider lähmt diese Sub trotz DoEvents mein Outlook. Ich kann z.B. nicht mehr zwischen Emails und Kalender umschalten, solang die Zeitschleife läuft. Hat hier jemand noch einen Ansatz, wie man das anders lösen könnte?

Kennt sich ansonsten hier noch jemand damit aus, wie man VBA umgehen und dies ggf. als Outlook-Plugin aufbauen könnte in C#? Hier stünden ggf. asyncrone Methoden zur Verfügung, welche im Hintergrund die Db abfragen könnten ohne das Hauptprogramm zu lähmen.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

steffen0815

#1
Hallo,
kannst du nicht die ganze Aufgabe auslagern?
Dh. es läuft ein zu definierende externes Programm (VB6, VB, MSAccess ...), welches Outlook entsprechend fernsteuert.

Ansonsten läuft das Ganze per API bei mir recht geschmeidig:Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Private TimerID As Long

Private Sub ActivateTimer(ByVal nMilliSek As Long)
  If TimerID <> 0 Then Call DeactivateTimer
  TimerID = SetTimer(0, 0, nMilliSek, AddressOf TriggerTimer)
  If TimerID = 0 Then
    MsgBox "The timer failed to activate."
  End If
End Sub

Private Sub DeactivateTimer()
Dim lSuccess As Long
  lSuccess = KillTimer(0, TimerID)
  If lSuccess = 0 Then
    MsgBox "The timer failed to deactivate."
  Else
    TimerID = 0
  End If
End Sub

Private Sub TriggerTimer(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)
Static i As Integer
    i = i + 1
    Debug.Print i, "Jetzt mach ich was"
End Sub

Sub Starten()
    Call ActivateTimer(2000)
End Sub
Sub Feierabend()
    DeactivateTimer
End Sub
Gruß Steffen

datekk

Hi Steffen,

das ist ein guter Ansatz.. auch Access wäre denkbar, da das ohnehin bei mir im HG läuft.

Danke Dir schon mal. :)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps