Datenbank mit Schaltfläche unter Access wechseln

Guten Morgen,

ich hab’ das Problem, daß ich es nicht hinkriege, mit einem Code-Schnipsel eine andere Datenbank zu öffnen. Also DB1 läuft, Schaltfläche soll angeklickt werden, woraufhin DB1 geschlossen werden und DB2 geöffnet werden soll.
Ich hoffe, mir kann jemand helfen.

Sibylle

Hallo, Sibylle.

Das Öffnen einer anderen DB ist kein Problem (geht mit der OpenDatabase -Methode). Das Problem besteht nur darin, der jetzt geöffneten DB mitzuteilen, daß sie quasi den Code der anderen DB zu Ende führen soll :

Aus dem Hut würde ich sagen, Du solltest der OpenDatabase-Geschichte einen Parameter zur Makro-Ausführung mitgeben und den restlichen Code aus diesem Makro (in der zweiten DB) heraus ausführen.

Wenn Du noch spezifischere Hilfe brauchst, melde Dich bitte nochmals.

Gruß kw

Hai, kw,

die zweite db mit OpenDatabase im Code zu öffnen und ihre Arbeit machen zu lassen ist nicht das Problem, sondern daß die db1 geschlossen werden muß - sobald ich das mache (DoCmd.Quit), ist auch die, über OpenDatabase geöffnete, zweite zu…*seufs* Hast Du noch 'ne Idee?

Sibylle

Hai, kw,

Barracuda, Sibylle :wink:

die zweite db mit OpenDatabase im Code zu öffnen und ihre
Arbeit machen zu lassen ist nicht das Problem, sondern daß die
db1 geschlossen werden muß - sobald ich das mache
(DoCmd.Quit), ist auch die, über OpenDatabase geöffnete,
zweite zu…

Das ist nicht schlimm. DoCmd.Quit schließt das komplette Anwendungsfenster, also alle in der Instanz geöffneten Datenbanken auch. Die Lösung wäre, statt DoCmd.Quit die Close_-Methode_ zu verwenden, also als Recordset die alte DB und Close.recordsetname …

OK?

Gruß kw

Piranha, kw *dabei mag ich gar keinen Fisch, der zurückbeißt* :wink:))

Es funzt!!! *trallalallalahaa*

nur noch ein kleines „.Visible“ dazu, und schon ist der spätere Anwender nicht irritiert

Hach, DANKE!!!

fetten Gruß

Sibylle

Koi, kw,

‚t funzt doch nich :frowning:(
Er macht zwar brav die zweite db auf, aber die erste nicht zu - mach‘ ich’se zu, wird die zweite gleich mitgekillt *heul*
Hier der Code-Schnipsel, der sich in DB1 befindet:

Dim appAccess As Access.Application

Private Sub Befehl22_Click()

Const pfad = „c:\Projekte\MCM\MCMDatenbank“
Dim wrksp As Workspace
Dim dbAlt As Database
Dim strDB As String

Set wrksp = DBEngine.Workspaces(0)
Set dbAlt = wrksp.Databases(0)
strDB = pfad & „Datsichfunk.mdb“
Set appAccess = CreateObject(„Access.Application“)
appAccess.OpenCurrentDatabase strDB
appAccess.Visible = True
dbAlt.Close Das ignoriert er
…blabla

DoCmd.Close dbAlt macht er ooch nicht *jammer*
Kannst Du mir da noch helfen? (Ist mir überhaupt noch zu helfen?)
*bettel*

Greetings

Sibylle

Salve Sarotti.

Dim dbAlt As Database

dbAlt muß ein Recordset sein.

dbAlt.Close Das ignoriert er

dann funktioniert auch dbAlt.Close, jedenfalls nach der reinen Lehre (ommmm) …

Gruß kw

Salve Sarotti.

*hmmm…Schokolade*

dbAlt muß ein Recordset sein.

„Typen unverträglich“ sachter - eigentlich kein Wunder - die kmpl. Datenbank in ein Recordset???

Gruß kw

Zurück-Gruß

Sibylle

Hallöle.

From the f***** Windows-Help :

Syntax

Objekt.Close

Der Platzhalter Objekt ist eine Objektvariable, die ein geöffnetes Connection-, Database-, Recordset- oder Workspace-Objekt darstellt.

Bemerkungen

Durch Schließen eines geöffneten Objekts wird dieses aus der Auflistung entfernt, an die es angefügt ist. Jeder Versuch, den Standard-Arbeitsbereich zu schließen, wird ignoriert.

Wenn das von Objekt benannte Connection-, Database-, Recordset- oder Workspace-Objekt geschlossen wird, bevor Close verwendet wird, tritt ein Laufzeitfehler auf.

Vorsicht Wenn Sie eine Prozedur beenden, die Connection-, Database- oder Recordset-Objekte deklariert, werden die Objekte geschlossen, alle noch nicht abgeschlossenen Transaktionen werden zurückgesetzt, und alle nicht gespeicherten Änderungen an Ihren Daten gehen verloren.

Wenn Sie versuchen, ein Connection- oder Database-Objekt zu schließen, während zugehörige Recordset-Objekte geöffnet sind, werden die Recordset-Objekte geschlossen und nicht abgeschlossene Änderungen werden abgebrochen. Wenn Sie versuchen, ein Workspace-Objekt zu schließen, ist es ähnlich: Wenn es geöffnete Connection- oder Database-Objekte hat, werden diese geschlossen, wodurch deren Recordset-Objekte geschlossen werden.

Wenn Sie die Close-Methode für entweder ein originales oder ein dupliziertes Recordset-Objekt verwenden, wirkt sich dies nicht auf das jeweils andere Recordset-Objekt aus.

Wenn Sie Objekte aus aktualisierbaren Auflistungen löschen wollen, und es sich dabei nicht um Connections-, Databases-, Recordsets- und Workspaces-Auflistungen handelt, müssen Sie die Delete-Methode verwenden. Sie können den Containers-, Documents- und Errors-Auflistungen keine neuen Elemente hinzufügen.

Eine Alternative zur Close-Methode ist es, den Wert einer Objektvariable auf Nothing (Set dbsTemp = Nothing) zu setzen.

und das Beispiel dazu zeigt tatsächlich die Anwendung auf ein Recordset :

Das folgende Beispiel erstellt ein Database-Objekt, das auf die aktuelle Datenbank verweist, und öffnet ein Recordset-Objekt vom Typ Tabelle, das auf einer Tabelle mit dem Namen Kunden basiert. Die Prozedur wendet die Methode Close auf die Recordset-Objektvariablen an, um die verwendeten Speicherressourcen freizugeben. Sie verwendet die Set-Anweisung mit dem Schlüsselwort Nothing, um die von der Database-Objektvariablen verwendeten Ressourcen freizugeben.

Sie können auch die Methode Close des Database-Objekts verwenden, um es zu schließen und den Speicher freizugeben. Die Methode Close des Database-Objekts schließt die in Microsoft Access geöffnete Datenbank nicht, sondern gibt nur die von der Database-Objektvariablen verwendeten Ressourcen frei.
Das Verwenden der Methode Close eines Objekts und das Einstellen der Objektvariablen auf Nothing sind wirkungsgleiche Verfahren zum Freigeben des Speichers.

Sub CloseVerwenden()
Dim dbs As Database, rst As Recordset

’ Verweis auf aktuelle Datenbank holen.
Set dbs = CurrentDb
’ Recordset-Objekt vom Typ Tabelle erstellen.
Set rst = dbs.OpenRecordset(„Kunden“)
.
.
.
’ Recordset schließen, um Speicher freizugeben.
rst.Close
’ Von der Objektvariablen verwendeten Speicher freigeben.
Set dbs = Nothing
End Sub

Irgendetwas widerspricht sich da imcio. Ich werde mich mal hinsetzen und versuchen, das Rätsel am praktischen Beispiel zu lösen; bitte etwas Geduld.

Bis bald
kw

HuHuuHu

Die *(hier bitte Lieblings-Schimpfwort einsetzen)*-ms-Hilfe hatte ich auch schon am Wickel, incl. MSDN-Library

sic!

Der Platzhalter Objekt ist eine Objektvariable,

eine ObjektVARIABLE, nicht das Objekt…

Vorsicht Wenn Sie eine Prozedur beenden, die Connection-,
Database- oder Recordset-Objekte deklariert, werden die
Objekte geschlossen,

…und damit meine db2…

Set dbs = Nothing

wieder nur die Variable, nicht das Objekt

Irgendetwas widerspricht sich da imcio. Ich werde mich mal
hinsetzen und versuchen, das Rätsel am praktischen Beispiel zu
lösen; bitte etwas Geduld.

Dank Dir für die Mühe *Däumchen-dreh’-Geduld-hab’-Pulli-aufräufel*

allerfeundlichst

Sibylle