Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: swetrain

swetrain (Level 1) - Jetzt verbinden

29.12.2013 um 11:12 Uhr, 3236 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 ..
Ähnliche Inhalte
Datenbanken

Zwei Access Datenbanken zusammenführen

Frage von geocastDatenbanken5 Kommentare

Hallo Zusammen Ich habe hier zwei Accessdatenbanken von einer internen Betriebssoftware. Vom Aufbau her sind sie Identisch, nur eben ...

Microsoft Office

Dateianhänge in einer Access-Datenbank "aktualisieren"

Frage von schrodtiMicrosoft Office3 Kommentare

Hallo Admins, bin jetzt nicht sooo der Access-Crack, habe dennoch eine kleine Datenbank erstellt (Wozu man kein Künstler sein ...

Datenbanken

MS Access Datenbank

gelöst Frage von endadaDatenbanken18 Kommentare

Hey alle zusammen, ich habe folgendes Problem: Ich versuche eine Datenbank mit Access zu erstellen, die wie im Screenshot ...

SAN, NAS, DAS

Access Datenbank auf einer (Synology) NAS?

gelöst Frage von garackSAN, NAS, DAS4 Kommentare

Hallo zusammen, Es spricht doch nichts dagegen eine Access Datenbank für max. 6 Leute gleichzeitiger Zugriff auf einer Synology ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit18 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing18 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...