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, 3761 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
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 ...

Microsoft Office

Access 2016: Datenbank plötzlich defekt

gelöst Frage von honeybeeMicrosoft Office9 Kommentare

Hallo, folgendes Problem: Heute morgen hatte ich an der betroffenen Datenbank gearbeitet und sie dann ordnungsgemäß geschlossen. Zwei Stunden ...

Datenbanken

Excel Tabelle in Access Datenbank

gelöst Frage von Dr.CornwallisDatenbanken9 Kommentare

Liebe Gemeinde, ich muss aus einer Excel Tabelle Daten in einen Access Table importieren, nun möchte ich die Excel ...

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
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 4 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 5 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik11 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...