| Guten Morgen liebe Access-Gemeinde,
ich hätte eine kleine Frage:
wie kann ich aus einer Datenbank (Acc 2003) herausfinden, welches Control, bzw. welcher Bericht in einer ANDEREN Access-Datenbank den Focus hat.
Falls ein Control den Focus hat, möchte ich auch den Wert auslesen.
Im Beispielcode unten schaffe ich das für die eigene Datenbank, nicht jedoch für eine andere.
Konkret also:
Was muss vor "Screen" stehen, damit sich das auf eine andere Datenbank bezieht?
Hintergrund meiner Frage:
Ich habe eine Frontend.mdb mit 5 Backends auf einem TS unter 2008R2 laufen.
Die Backends liegen auf einem Fileserver, das Frontend im Homelaufwerk der User.
Aus Sicherheitsgründen wird die TS-Session nach 7 Minuten Inaktivität geschlossen.
Dadurch zerschiesst es mir regelmässig (jedoch leider nicht konkret reproduzierbar) verschiedene Backend-Datenbanken.
Um dem Zuvor zu kommen, habe ich in meinem Frontend ein unsichtbares Formular "_frm_Closer", in welchem alle 45 sec. geprüft wird, welches Feld, bzw. welcher Report gerade den Focus hat und was ggf. der Wert des Feldes ist.
Das ganze wird dann in ungebundene Felder geschrieben und mit den vorherigen 9 Werten verglichen.
Sind alle 9 Werte identisch, wird davon ausgegangen, dass der User in den letzten 6,75 Minuten nichts an der Datenbank gemacht hat und sie wird geschlossen.
In der eigenen Datenbank funktioniert das wunderbar, die Anzahl der zerschossenen Datenbanken geht quasi gegen 0 %.
Einen Haken hat die Sache jedoch:
Immer wieder kommt es vor, dass beim Ausdrucken (und nur da), anstelle des Berichts, der gedruckt werden soll, das unsichtbare Formular gedruckt wird. Ich habe keine Ahnung, wieso dies der Fall ist. Ich habe sowohl beim Öffnen des Formulars, als auch beim Öffnen der Berichte immer stehen:
Forms("_frm_Closer").Visible = False
Leider ist auch da nicht reproduzierbar, wann genau anstelle des Berichts das Formular gedruckt wird.
Als mögliche Lösung habe ich daher gedacht, packe ich das "Schließformular" in eine andere Datenbank, die dann beim Start der eigentlichen Datenbank mit geöffnet wird und von extern dann die Datenbank überwacht.
Evtl. habt Ihr ja da aber auch noch ganz andere Vorschläge/Ideen, ich bin für jede Info dankbar.
Und hier zur Erinnerung nochmal die Frage:
Was muss vor "Screen" stehen, damit sich das auf eine andere Datenbank bezieht?
Viele Grüsse
Jochen
Sub Test
strDB = CurrentProject.Path & "\Orga-FE.mdb"
Set db = DBEngine.Workspaces(0).OpenDatabase(strDB)
' geht nicht:
' db.screen
' strWas = getArt
Select Case strWas
Case "Form"
Me.strObject000 = Screen.ActiveForm.Name
Me.strsubForm000 = Screen.ActiveControl.Parent.Name
Me.strControl000 = Screen.ActiveControl.Name
intControlType = Screen.ActiveControl.ControlType
Select Case intControlType
Case 104 'Button, nichts machen
Me.strValue000 = ""
Case 106 'Checkbox
Me.strValue000 = Nz(Screen.ActiveControl.Value, 0)
Case 107 'Optionsfeld
Me.strValue000 = Nz(Screen.ActiveControl.Value, 0)
Case 109 'Textfeld
Me.strValue000 = Nz(Screen.ActiveControl.Text, 0)
Case 110 'Listfeld
Me.strValue000 = Nz(Screen.ActiveControl.Value, 0)
Case 111 'ComboBox
Me.strValue000 = Nz(Screen.ActiveControl.Text, 0)
Case 122 'Umschaltfeld
Me.strValue000 = ""
Case 123 'Reiter
Me.strValue000 = ""
Case Else
Me.strValue000 = ""
End Select
Me.intID000 = Screen.ActiveForm.Controls("ID").Value
Case "Report"
Me.strObject000 = Screen.ActiveReport.Name
Me.strsubForm000 = ""
Me.strControl000 = ""
Me.intID000 = "0"
Me.strValue000 = "0"
Case Else
Me.strObject000 = "?"
Me.strsubForm000 = "?"
Me.strControl000 = "?"
Me.intID000 = "99"
Me.strValue000 = "?"
End Select
End Sub
Function getArt() As String
Dim strArt As String
On Error Resume Next
Err.Number = 0
strArt = Screen.ActiveForm.Name
If Err.Number = 0 Then
getArt = "Form"
Exit Function
End If
Err.Number = 0
strArt = Screen.ActiveReport.Name
If Err.Number = 0 Then
getArt = "Report"
Exit Function
End If
getArt = "Unbekannt"
End Function
|