Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Zugriff auf andere Access-Datenbank

Frage Entwicklung VB for Applications

Mitglied: swetrain

swetrain (Level 1) - Jetzt verbinden

29.12.2013 um 11:12 Uhr, 2834 Aufrufe, 1 Kommentar

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
Mitglied: colinardo
29.12.2013, aktualisiert um 23:40 Uhr
Hallo Jochen,
ich würde das anders lösen, und zwar mit einem AutoIT-Script welches Access und deine Datenbank startet und in welchem dann die kontinuierliche Prüfung auf Inaktivität stattfindet. AutoIT-Scripte lassen sich zu einer ausführbaren EXE kompilieren, so dass du diese dann zum Aufruf deiner FE-Datenbank nutzen kannst. Im Script selber kannst du auf die ganzen Access-Objekte und Eigenschaften in der Datenbank zugreifen und darauf reagieren. Du kannst hier also auch deine gewünschten Felder abfragen ob sich diese geändert haben. Für ein Beispiel habe ich hier aber mal die Mausposition als Aktivitätskriterium her genommen. Das Script prüft hier als Beispiel alle 5 Sekunden ob sich die Mausposition geändert hat; wenn nicht wird ein Zähler solange hochgezählt bis dieser einen Maximalwert erreicht, daraufhin wird dann Access geschlossen. Ändert sich die Mausposition wird dieser Zähler immer wieder auf 0 zurückgesetzt.
Wie gesagt das ist kein Muss du kannst hier also deine Methode zur Aktivitätsprüfung problemlos einbauen.
(In Zeile 4 wird der Pfad zur Datenbank eingetragen / weitere Kommentare befinden sich im Code)
AutoIT-Code zum Monitoring auf Inaktivität
01.
;#NoTrayIcon 
02.
Global $arrLastPos, $timeCounter,$timeMax,$dbPath 
03.
;Pfad zur Frontend Datenbank 
04.
$dbPath = "c:\Pfad\Orga-FE.mdb" 
05.
$timeCounter = 0 
06.
; Maximale Zeit der Inaktivität in Sekunden im Beispiel 6,5 Minuten. 
07.
$timeMax = 390 
08.
;Access Datenbank starten / die Variable $objAccess entspricht dem "Application"-Objekt in Access worüber du auch die "Screen"-Eigenschaft ansprichst. 
09.
$objAccess = ObjCreate("Access.Application") 
10.
$objAccess.OpenCurrentDatabase($dbPath) 
11.
$objAccess.Visible = True 
12.
;Objekt der aktuellen Datenbank in Variable speichern 
13.
$db = $objAccess.CurrentDb 
14.
;Initiale Position der Maus holen 
15.
$arrLastPos = MouseGetPos() 
16.
While 1 
17.
	; Wenn Maximalzeit erreicht oder überschritten, beende Access und schließe dieses Programm 
18.
	if $timeCounter >= $timeMax then 
19.
		$objAccess.Quit() 
20.
		exit 0 
21.
	endif 
22.
	; Aktuelle Mauszeigerposition holen 
23.
	$arrPos = MouseGetPos() 
24.
	;Vergleiche Position mit der alten Position 
25.
	if $arrLastPos[0] = $arrPos[0] and $arrLastPos[1] = $arrPos[1] then 
26.
                : Zähle 5 Sekunden zum Zähler hinzu / Beim anpassen der Wartezeit muss hier auch angepasst werden 
27.
		$timeCounter = $timeCounter + 5 
28.
	else 
29.
                ; Mausposition hat sich geändert, setze Zähler also zurück 
30.
		$timeCounter = 0 
31.
	endif 
32.
	;Mausposition für den nächsten Vergleich sichern 
33.
	$arrLastPos = MouseGetPos() 
34.
	; Warte 5 Sekunden vor der erneuen Prüfung 
35.
	Sleep(5000) 
36.
WEnd
Denke das ist cleaner gelöst also zig Datenbanken zu öffnen, das sind alles nur zusätzliche Fehlerquellen.

nochmal zu deiner Frage:
Was muss vor "Screen" stehen, damit sich das auf eine andere Datenbank bezieht?
Das "Application"-Objekt dieser Datenbank
Beispiel:
01.
Dim app As New Application  ' Neues Access Application-Objekt erzeugen 
02.
app.OpenCurrentDatabase "c:\Pfad\Orga-FE.mdb"  ' In diesem die Datenbank öffnen 
03.
app.Visible = True   ' Das ganze für den Benutzer sichtbar machen 
04.
app.DoCmd.OpenForm "xyz"   'als Beispiel eine Form mit Namen 'xyz' öffnen 
05.
Debug.Print app.Screen.ActiveForm.Name 'den Namen der Form im Direktbereich ausgeben
Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
SAN, NAS, DAS
gelöst Access Datenbank auf einer (Synology) NAS? (4)

Frage von garack zum Thema SAN, NAS, DAS ...

Datenbanken
Access Datenbank mit Rechnungen und Summenbildung möglich? (1)

Frage von Stefan007 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...