DoCmd.CopyObject bei offener DB

19/03/2008 - 10:07 von Thomas Wolf | Report spam
Hallo NG

Ich habe einen Code, welcher mir Objekte in eine andere DB kopieren soll. Um
zu schauen, ob der Objektname dort schon vorhanden ist, öffne ich mittels
.OpenCurrentDatabase(strMDBName, False) die andere DB, dies in einer Klasse.
Dann durchlaufe ich die Objekte mittels .AllForms, .AllReports etc und
schaue nach, ob ein Objekt mit dem gleichen Namen schon vorhanden ist.
Danach möchte ich mittels DoCmd.CopyObject das Objekt von der CodeDB in die
Andere kopieren. Wenn ich vor DoCmd... die andere DB wieder schliesse,
funktioniert alles. Wenn ich sie aber offen behalte (was ich möchte, da ich
mehrere Objekte kopieren und somit vorher abfragen will), dann bricht mir
'DoCmd...' mit Fehler 2501 "Die Aktion CopyObject wurde abgebrochen" ab.
Anscheinend brauche ich exklusiven Zugriff darauf. Kriege ich das irgendwie
hin?

Gruss
Thomas
 

Lesen sie die antworten

#1 Jens Schilling
19/03/2008 - 11:28 | Warnen spam
Hallo, Thomas

Thomas Wolf wrote:

Ich habe einen Code, welcher mir Objekte in eine andere DB kopieren
soll. Um zu schauen, ob der Objektname dort schon vorhanden ist,
öffne ich mittels .OpenCurrentDatabase(strMDBName, False) die andere
DB, dies in einer Klasse. Dann durchlaufe ich die Objekte mittels
.AllForms, .AllReports etc und schaue nach, ob ein Objekt mit dem
gleichen Namen schon vorhanden ist. Danach möchte ich mittels
DoCmd.CopyObject das Objekt von der CodeDB in die Andere kopieren.
Wenn ich vor DoCmd... die andere DB wieder schliesse, funktioniert
alles. Wenn ich sie aber offen behalte (was ich möchte, da ich
mehrere Objekte kopieren und somit vorher abfragen will), dann bricht
mir 'DoCmd...' mit Fehler 2501 "Die Aktion CopyObject wurde
abgebrochen" ab. Anscheinend brauche ich exklusiven Zugriff darauf.
Kriege ich das irgendwie hin?



Hmm, ich hab's jetzt nicht probiert, aber vielleicht indem Du nicht die DB
öffnest, sondern über SQL-Statement die MSysObjects abfragst, und darauf
basierend ein Recordset erstellst, dass Du durchlaufen kannst:

Für Formulare z.B. könnte das so aussehen :

SELECT Name, Type FROM MSysObjects IN 'Pfad:\NamederDB.mdb' WHERE
Type=-32768;

Du könntest natürlich auch gezielt den Objektnamen als Bedingung versuchen -
es kommt halt darauf an, was Du genau möchtest.

Gruss
Jens
______________________________
2. SEK (SQL Server-Entwickler-Konferenz)
Nürnberg, 12./13.4 und 19./20.4.2008
FAQ: http://www.donkarl.com

Ähnliche fragen