Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: wolfgang b am Februar 25, 2021, 18:25:13

Titel: Access 2016
Beitrag von: wolfgang b am Februar 25, 2021, 18:25:13
Guten Abend,
ich möchte gern, mittels einer Befehlsschaltfläche, eine bestehende Datenbank aktivieren.
Wenn die Datenbank aber schon aktiviert ist (übersehen) soll eine MSGBOX kommen: Datenbank
ist schon aktiviert.

Hier der Pfad und der Datenbankname:
"C:\#_Verkauf\Übersicht_Schränke.accdb"

mfg wolfgang b
Titel: Re: Access 2016
Beitrag von: MzKlMu am Februar 25, 2021, 19:06:19
Hallo,
was verstehts Du unter aktivieren ?
Wenn eine Datenbank geöffnet ist, ist sie auch aktiviert.

Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 25, 2021, 20:27:02
Guten Abend Klaus,
ja, ich meinte natürlich, wenn die Datenbank geöffnet ist.
Wenn man vergessen sollte das die Datenbank schon geöffnet ist,
dann sollte beim 2x ein Hinweis erscheinen, Datenbank ist schon
geöffnet.

Mit freundlichen Grüßen
Wolfgang b
Titel: Re: Access 2016
Beitrag von: MzKlMu am Februar 25, 2021, 20:33:47
Hallo,
man kann doch aber eine Datenbank nicht 2x öffnen.
Und die Prüfung müsste ja auch in der Datenbank erfolgen.

Eine solche Prüfung müsste ja außerhalb von der Accessanwendung erfolgen.
Wo ist denn die Schaltfläche die Du verwenden willst ?

Bitte beschreibe das Vorhaben mal genauer.
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 25, 2021, 21:31:51
Guten Abend Klaus,
die Befehlsschaltfläche befindet sich auf Formular ,,Vertrieb".

Gruß
Wolfgang b
Titel: Re: Access 2016
Beitrag von: MzKlMu am Februar 25, 2021, 23:45:47
Hallo,
und in welcher DB ?
Wenn die in der DB ist die geprüft werden soll, macht das doch keinen Sinn, wenn die Fläche zu sehen ist, ist die DB geöffnet.
Daher nochmal die Bitte das Vorhaben genauer zu erklären.
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 26, 2021, 09:32:29
Guten Morgen Klaus,
die aktuelle Datenbank heißt auch "Vertrieb".
Wenn ich die Datenbank "Übersicht_Schränke.accb" per Button öffne,
soll nur geprüft werden ob diese schon geöffnet ist ? Oder sie wird
geöffnet:  ("C:\#_Verkauf\Übersicht_Schränke.accdb")

mfg wolfgang b
Titel: Re: Access 2016
Beitrag von: MzKlMu am Februar 26, 2021, 11:42:50
Hallo,
dann versuche das so:
If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
   Msgbox "Ist bereits geöffnet" 'Die MsgBox kann entfallen.
Else
  ' Datenbank öffnen
End If

Wenn eine Datenbank geöffnet wird, wird eine laccdb angelegt, im gleichen Verzeichnis wie die DB und das kannst du nutzen.
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 26, 2021, 12:24:26
Guten Morgen Klaus,
es funktioniert aber wie kann ich die Datenbank öffnen ?
' Datenbank öffnen ?
Muss man die Datei laccdb so umbenennen ? Nur so klappt es !

Sub test()
If Dir("C:\#_Verkauf\Übersicht_Schränke.[b]laccdb[i][/i][/b]") <> "" Then
   MsgBox "Ist bereits geöffnet" 'Die MsgBox kann entfallen.
Else
  ' Datenbank öffnen
End If
End Sub

mfg wolfgang



Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 26, 2021, 14:03:19
Guten Tag Klaus,
so klappt es einwandfrei, danke !
Hatte mal ein wenig Gegoogelt.
Das perfekte wäre jetzt, wenn die Datenbank schon geöffnet ist,
sollte dies jetzt aktiviert werden, bzw. direkt auf die Oberfläche.

Sub test()
    Dim appAccess As Access.Application
    Dim strDB As String
Const strConPathToSamples = "C:\#_Verkauf\Übersicht_Schränke.accdb"
      strDB = strConPathToSamples & "Übersicht_Schränke.accdb"

If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
   MsgBox "Ist bereits geöffnet"                'Die MsgBox kann entfallen.
Else
  ' Datenbank öffnen
        MsgBox "Datenbank wird geöffnet"
   Set appAccess = New Access.Application       'hiermit wird geöffnet
End If
End Sub


mfg wolfgang
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 15:57:34
Guten Tag Klaus,
vorgestern, war alles i.o. .
Wieso wird die Datenbank nicht geladen ?

Sub Test_Click()
    Dim appAccess As Access.Application
    Dim strDB As String
Const strConPathToSamples = "C:\#_Verkauf\Übersicht_Schränke.accdb"
      strDB = strConPathToSamples & "Übersicht_Schränke.accdb"

If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then

   MsgBox "Ist bereits geöffnet"
Else
        MsgBox "Datenbank wird geöffnet"
   Set appAccess = New Access.Application       'hiermit wird geöffnet ?
End If

End Sub

Was ist Falsch ?

Gruß wolfgang
Titel: Re: Access 2016
Beitrag von: Maxel am Februar 27, 2021, 16:26:41
ZitatConst strConPathToSamples = "C:\#_Verkauf\Übersicht_Schränke.accdb"
      strDB = strConPathToSamples & "Übersicht_Schränke.accdb"

Das ergibt
strDB = "C:\#_Verkauf\Übersicht_Schränke.accdbÜbersicht_Schränke.accdb"
Merkst Du was?
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 16:36:42
Hallo Maxel,
habe gelöscht, wird trotzdem nicht geöffnet !

Sub Test_Click()

    Dim appAccess As Access.Application
    Dim strDB As String
Const strConPathToSamples = "C:\#_Verkauf\Übersicht_Schränke.accdb"
      strDB = strConPathToSamples

If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
   MsgBox "Ist bereits geöffnet"
Else
        MsgBox "Datenbank wird geöffnet"
   Set appAccess = New Access.Application       'hiermit wird geöffnet ?
End If
End Sub

gruß wolfgang
Titel: Re: Access 2016
Beitrag von: Maxel am Februar 27, 2021, 16:48:44
Wie öffne ich eine Acess-Datei?

Hast Du diese Frage mal im Web recherchiert, bevor Du es hier im Forum getan hast?

Wenn nein - warum nicht?

ZitatSet appAccess = New Access.Application       'hiermit wird geöffnet ?
würde Dir als untauglich auffallen.

Ich habe mal
access vba datenbank öffnen
in meine Suchmaschine eingetippt und als ersten Treffer dies erhalten:

https://docs.microsoft.com/de-de/office/vba/api/access.application.opencurrentdatabase (https://docs.microsoft.com/de-de/office/vba/api/access.application.opencurrentdatabase)











Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 17:04:24
Hallo Maxel,
DANKE für den Tip !
Funktioniert, allerdings kommt beim öffnen
Laufzeitfehler 7867
Die Datenbank ist bereits geöffnet.

Sub Test_Click()

    Dim appAccess As Access.Application
    Dim strDB As String
Const strConPathToSamples = "C:\#_Verkauf\Übersicht_Schränke.accdb"
      strDB = strConPathToSamples
If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
   MsgBox "Ist bereits geöffnet"
Else
        MsgBox "Datenbank wird geöffnet"
   Set appAccess = _
        CreateObject("Access.Application")
        appAccess.OpenCurrentDatabase strDB
  ' Set appAccess = New Access.Application          'hiermit wird geöffnet ?
End If
End Sub

mfg wolfgang b
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 17:07:55
Hallo Maxel,
Nachtrag:
bleibt hier im Makro stehen, gelb hinterlegt:
 appAccess.OpenCurrentDatabase strDB

mfg
wolfgang
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 17:11:40
Hallo Maxel,
habe dies gelöscht:
 appAccess.OpenCurrentDatabase strDB

kommt kein Fehler mehr !!!
Auch wenn ich die geöffnete Datenbank offen lasse, keine Probleme !!!

mfg
wolfgang
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 27, 2021, 18:00:12
Hallo Maxel,
recht herzlichen Dank für die Unterstützung !

Eine kleine Nachfrage:
Kann man die neu geöffnete Datenbank beim wiederholten Starten des
Makros, dann kommt ja:
MsgBox "Ist bereits geöffnet"
dann auf der Oberfläche platzieren also wie beim 1. Öffnen ?

Würde mich freuen, wenn dies klappt !

mfg wolfgang b
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 28, 2021, 12:50:15
Hallo zusammen,

ich habe eine 2. Datenbank  C:\#_Verkauf\Übersicht_Tische.accdb",
es kommt aber immer die zuletzt geöffnete Datenbank.

WIESO ?

mfg wolfgang

( Verkauf\Übersicht_Schränke.accdb" )
Titel: Re: Access 2016
Beitrag von: MzKlMu am Februar 28, 2021, 17:15:45
Hallo,
ich kann Dir da mangels Erfahrung mit solchen Funktionen nicht helfen. Es es wird schon noch einer vorbeikommen.
Titel: Re: Access 2016
Beitrag von: wolfgang b am Februar 28, 2021, 18:03:41
Hallo Klaus,
danke für deine Info.
Hoffentlich kann jemand anders helfen, würde mich freuen !!!

Mit freundlichen Grüßen
Wolfgang b
Titel: Re: Access 2016
Beitrag von: Beaker s.a. am März 01, 2021, 11:26:29
Hallo Wolfgang,
Wenn ich dieses so lese
ZitatC:\#_Verkauf\Übersicht_Schränke.accdb
C:\#_Verkauf\Übersicht_Tische.accdb
kommen doch erhebliche Zweifel am Datenmodell auf.
Eine Übersicht zu Umsätzen von Artikelgruppen bekommt man
doch durch ziemlich einfache Abfragen auf die Bewegungstabelle(n).
Ausserdem ist es eh schlecht, wenn man berechnete Werte in Tabellen
speichert. Der Aufwand diese aktuelle zu halten ist dabei doch viel
zu gross.

Worin liegt denn bei dir der Sinn der externen DBs?

gruss ekkehard
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 01, 2021, 14:32:40
Hallo ekkehard,
danke erst mal das Du das Thema aufnimmst.

Mit diesem Makro möchte ich die Datenbank "Schränke" öffnen.
Es wird die gleich Datenbank geöffnet, wie die die schon offen ist
und von der ich das Makro starte:

Sub Test_Schränke_Click()

    Dim appAccess As Access.Application
    Dim strDB As String
   Const strConPathToSamples = "C:\#_Verkauf\"

 strDB = strConPathToSamples & "Übersicht_Schränke.accdb"
 
 'If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
 ' MsgBox "Ist bereits geöffnet"
'Else
 Stop
        MsgBox "Übersicht SCHRÄNKE    Datenbank wird geöffnet"
  Set appAccess = CreateObject("Access.Application")
 ' Open database in Microsoft Access window.
 
' Set appAccess = New Access.Application
  appAccess.OpenCurrentDatabase strDB   

End Sub


mfg wolfgang
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 01, 2021, 15:56:12
Hallo ekkehard,
NACHTRAG !
Habe gerade eine neue ACCESS Datenbank erstellt und entsprechend
nach Schränke benannt.
Leider kein Erfolg,
Laufzeitfehler 7866
Die Datenbank kann von Microsoft nicht geöffnet werden, da sie nicht existiert, ein
anderer Benutzer sie bereits im Exklusivmodus geöffnet hat, oder da es sich nicht um eine
ADP-Datei handelt.


Exklusivmodus= Nein und ist auch vorher nicht geöffnet.

Hinweis:
Wenn ich die Datei über den Dateiexplorer öffne und anschließend über VBA Makro
wird die "_Übersicht_Schränke.accdb" geladen.
Es kommt aber dann Fehlermeldung:
Laufzeitfehler 7867   Die Datenbank ist bereits geöffnet.

Sub Test_Schränke_Click()
    Dim appAccess As Access.Application
    Dim strDB As String
   Const strConPathToSamples = "C:\#_Verkauf\"
 strDB = strConPathToSamples & "Übersicht_Schränke.accdb"
 
 'If Dir("C:\#_Verkauf\Übersicht_Schränke.laccdb") <> "" Then
 ' MsgBox "Ist bereits geöffnet"
      MsgBox "Übersicht SCHRÄNKE    Datenbank wird geöffnet"
  Set appAccess = CreateObject("Access.Application")
' Set appAccess = New Access.Application
 [i] appAccess.OpenCurrentDatabase strDB[b][/b][/i]    '< bleibt hier stehen
End Sub


mfg
wolfgang b

Titel: Re: Access 2016
Beitrag von: Beaker s.a. am März 01, 2021, 16:33:26
Sorry, - am Thema meiner Frage vorbei. Da bin ich raus.
Titel: Re: Access 2016
Beitrag von: DF6GL am März 01, 2021, 16:44:29
Hallo,

auch mir kommen da schwerwiegende Zweifel am Datenmodell, aber sei's drum...


Auf eine externe DB kann man auch auf diese Art zugreifen, ohne sie erst öffnen zu müssen:


.
.
.
Dim rs As Dao.Recordset
Set rs = Currentdb.OpenRecordset ("Select * From tblTabelle in '' [MS Access;database=C:\MeinVerzeichnis\MeineAndereDB.accdb]", dbOpenSnapshot)
.
.
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 01, 2021, 17:44:08
Hallo Ekkehard,
sorry habe direkt geantwortet auf mein Problem hin.
C:\#_Verkauf\Übersicht_Schränke.accdb
C:\#_Verkauf\Übersicht_Tische.accdb
Diese Dateien habe ich nur mit Musternamen versehen, so das man bei der Erstellung
des Makros dies berücksichtigen kann.

mfg
wolfgang b
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 01, 2021, 17:59:57
Hallo,
ich habe es so eingesetzt:
Sub Test_Schränke_Click()
Dim rs As Dao.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From tblTabelle in '' [MS Access;database=C:\#_Verkauf\Übersicht_Schränke.accdb]", dbOpenSnapshot)
End Sub

Es kommt eine Fehlermeldung:
Laufzeitfehler 3024
Datei....
nicht gefunden !   Obwohl vorhanden !

mfg wolfgang b

Titel: Re: Access 2016
Beitrag von: DF6GL am März 02, 2021, 13:33:52
Hallo,

wie kann man nur solche Sonderzeichen in Pfad-/Dateinamen verwenden:  C:\#_Verkauf\Übersicht_Schränke.accdb   ??

Zudem: gibt es denn "tblTabelle" in "Übersicht_Schränke.accdb" ??
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 02, 2021, 19:23:11
Guten Abend Franz,
habe die Raute weggemacht und die Tabelle, die ich nicht habe.

Set rs = CurrentDb.OpenRecordset(" '' [MS Access;database=C:\1_Verkauf\Übersicht_Schränke.accdb]", dbOpenSnapshot)

Laufzeitfehler 3078
Das Microsoft Access-Datenbankmodulfindet die Eingabetabelle oder Abfrage...

mfg wolfgang
Titel: Re: Access 2016
Beitrag von: DF6GL am März 02, 2021, 20:10:57
Hallo,


Zitathabe die Raute weggemacht und die Tabelle, die ich nicht habe.

Ist das Dein Ernst??

Du sollst nichts weglassen, sondern den Tabellen-Namen anpassen und den Verzeichnisnamen prüfen..


Was willst Du denn mit einer DB, in der keine Tabelle(n) sind?



Der Code öffnet ein Recordset auf eine Tabelle in einer externen DB, nichts weiter.  Mit den gelieferten Daten kannst Du dann anstellen, was Du willst.


Der Hinweis auf das  "#"-Zeichen ist eher als vorsorgliche Maßnahme zu verstehen.  Nicht alle Funktionen kommen mit solchen Sonderzeichen zurecht, auch wenn Windows daran nicht herummeckert.

Zudem steht immer noch die Frage zum fragwürdigen Tabellenaufbau, bzw. Datenbanken-Aufbau im Raum und die Antwort aus...
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 02, 2021, 21:55:13
Hallo Franz,
danke das Du Geduld hast !
Habe es so reingesetzt:
Dim rs As Dao.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From tbl_Daten in '' [MS Access;database=C:\1_Verkauf\_Übersicht_Schränke.accdb]", dbOpenSnapshot)

Keine Fehlerhinweise aber die Datenbank: "_Übersicht_Schränke.accdb"   wird auch nicht geöffnet.

Zur offenen Frage:
Ich habe eine "Hauptdatenbank", hier sollen die Tabellen tbl_Daten aus _Übersicht_Schränke.accdb
und _Übersicht_Tische.accdb reinkopiert werden, da 2 Kolleginen an verschiedenen Standorten
Daten einpflegen.

Wenn die Datenbänke dann auf dem Hauptrechner sind soll es einfacher sein, wenn man die beiden
Datenbänke per Button öffnen kann und die Tabellen dann kompl. Kopiert und in der Hauptdatenbank einfügen
kann.

mfg wolfgang b


Titel: Re: Access 2016
Beitrag von: wolfgang b am März 02, 2021, 23:23:20
Hallo Franz,
bitte schau nochmal #9   dieses VBA Makro läuft eigentlich gut.
Aber warum wird immer nur die Datenbank geöffnet, die vorher
geöffnet war !
Wenn ich also vorher Übersicht_Tische auf hatte, wird nur diese geöffnet, nicht
aber die ich wollte, Übersicht_Schränke !

Warum ?
Mit freundlichen Grüßen
Wolfgang b
Titel: Re: Access 2016
Beitrag von: DF6GL am März 03, 2021, 11:10:26
Hallo,

na, ich würde sagen, Du bist mit Deiner Methode komplett auf dem Holzweg
...


Mal abgesehen von Datenverlust, bzw. Überschreiben von Daten wäre insgesamt ein gangbarer Weg die TranferDatabase-Methode (oder per VBA "Relink"), mit der die Tabellen aus den beiden (oder mehreren) anderen DBs in der "Hauptdatenbak" verlinkt (nicht importiert) werden könnten.

Anschließend kann in der Haupt-DB entschieden werden, welche Daten wohin (per SQL-Statements)übernommen  werden sollen.



Titel: Re: Access 2016
Beitrag von: wolfgang b am März 03, 2021, 16:29:26
Hallo Franz,
ok, danke für die Information.

Was ist den noch mit:
Dim rs As Dao.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From tbl_Daten in '' [MS Access;database=C:\1_Verkauf\_Übersicht_Schränke.accdb]", dbOpenSnapshot)

Keine Fehlerhinweise aber die Datenbank: "_Übersicht_Schränke.accdb"   wird auch nicht geöffnet !!!

Mit freundlichen Grüßen
Wolfgang b
Titel: Re: Access 2016
Beitrag von: DF6GL am März 04, 2021, 09:06:49
Hallo.

habe es geschrieben:

ZitatDer Code öffnet ein Recordset auf eine Tabelle in einer externen DB, nichts weiter.  Mit den gelieferten Daten kannst Du dann anstellen, was Du willst.

Der Code öffnet keine "DB", so wie Du denkst!!!    Damit kann man auf die Tabellendaten in einer anderen DB zugreifen, ohne "Opendatabase" zu benutzen.

Außerdem vergiss, wie gesagt, diese Methodik.
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 04, 2021, 10:00:39
Guten Morgen Franz,
dann mach ich es so:
Private Sub Test_Schränke_Click()
    Dim Pfad As String
    Pfad = "C:\1_Verkauf"
    Shell "explorer.exe /n, /e, " & Pfad, vbMaximizedFocus
End Sub

Damit wird das Verzeichnis geöffnet und man kann die Datei dann öffnen und
bearbeiten.
Danke.

mfg wolfgang b
Titel: Re: Access 2016
Beitrag von: wolfgang b am März 04, 2021, 12:24:12
Hallo Franz,

Ich habe eine Lösung:
Private Sub Test_Schränke_Click()
    Static bOpened As Boolean
    Dim strFullPath As String
   
strFullPath = "C:\1_Verkauf\_Übersicht_Schränke.accdb"
If Dir(strFullPath, vbDirectory) <> "" Then
Shell Environ("WinDir") & "\explorer.exe /n,/e," & strFullPath, vbNormalFocus
Else
    MsgBox "Verzeichnis oder Datei " & IIf(bOpened, " ", "") & " nicht vorhanden!", vbCritical
End If
    bOpened = True
End Sub


KLAPPT einwandfrei, es wird die Datenbank gestartet, es wird auch die gestartet die
ich hinterlegt habe und nicht die ich vorher geöffnet hatte.


mfg wolfgang b