der Versuch, unter Acc 2003 ein Formular in eine andere Datenbank zu
kopieren schlägt leider fehl.
Mein Code:
Dim appAcc As Access.Application
Dim pf As String
pf = "Pfad der ZielDB"
appAcc.OpenCurrentDatabase pf & "\ZielDB.mdb"
appAcc.DoCmd.DeleteObject acForm, "frmReports"
DoCmd.CopyObject pf & "\ZielDB.mdb", "frmReports", acForm,
"frmReports"
das in der Ziel-DB bestehende Formular frmReports wird zwar gelöscht,
aber der Kopiervorgang wird mit der Meldung "Die Aktion CopyObject
wurde abgebrochen" beendet.
Was mache ich falsch?
Danke für Tipps.
Gruß
Herbert
mach's doch mit SaveAsText und LoadFromText.
Ist zwar undokumentiert, funktioniert aber mit allen Versionen ab A2K.
--
Gru�, Bernd
---
Access goes Subversion - http://oasis.dev2dev.de
vorerst danke.
> mach's doch mit SaveAsText und LoadFromText.
> Ist zwar undokumentiert, funktioniert aber mit allen Versionen ab A2K.
Dein Vorschlag hilft mir leider nicht, da Export um Impoert von der
sendenden Instanz bewältigt werden müssen.
Was ist an meinem Code falsch?
Gruß aus Wien
Herbert
Herbert Fidesser schrieb:
>> mach's doch mit SaveAsText und LoadFromText.
>> Ist zwar undokumentiert, funktioniert aber mit allen Versionen ab A2K.
>
> Dein Vorschlag hilft mir leider nicht, da Export um Impoert von der
> sendenden Instanz bew�ltigt werden m�ssen.
das macht's nur komplexer, aber nicht unm�glich.
Da die beiden Methoden am Application-Objekt h�ngen, sollte es prinzipiell m�glich sein, das Ganze
mit der von Dir bereits erzeugten Instanz zu regeln.
Es handelt sich dabei doch um eine eigene Access-Instanz, oder?
Luftcode:
Application.SaveAsText acForm, "frmReports", "C:\frmReports.sav"
pf = "Pfad der ZielDB"
'die Instanz appAcc muss vorher erzeugt sein
appAcc.OpenCurrentDatabase pf & "\ZielDB.mdb"
appAcc.LoadFromText acForm, "frmReports", "C:\frmReports.sav"
> Was ist an meinem Code falsch?
m�glicherweise muss die Ziel-DB nach dem DeleteObject wieder geschlossen sein.
Du solltest die andere Instanz schlie�en, bevor du von au�en
wieder was hineinschickst. Ich vermisse auch ein New.
Versuch's mal so:
Dim appAcc As Access.Application
Dim pf As String
Set appAcc = New Access.Application
appAcc.OpenCurrentDatabase pf & "\ZielDB.mdb"
appAcc.DoCmd.DeleteObject acForm, "frmReports"
appAcc.Quit
Set appAcc = Nothing
DoCmd.CopyObject pf & "\ZielDB.mdb", "frmReports", acForm, "frmReports"
--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com /// http://www.donkarl.com?NEK
.NET-Entwickler-Konferenz f�r Accessler 27./28.2. + 20./21.3.2010
der Versuch, unter Acc 2003 ein Formular in eine andere Datenbank zu
kopieren schl�gt leider fehl.
Ich mache das aus der Quelldatenbank mittels
DoCmd.TransferDatabase acExport, DBFormat, Datenbank, Objekttyp, Objektname,
Objektname, Art
Wobei gilt:
acExport ' = 1
DBFormat = "Microsoft Access"
Datenbank = "Ziel_DB" ' mit komplettem Pfad
Objekttyp = acForm ' = 2
Objektname = "DeinQuellFormName"
Objektname = "DeinZielFormName"
Art = false ' = 0
Ein in der Zieldatenbank eventuell bestendes Form wird �berschrieben.
Siehe auch in der Hilfe unter TransferDatabase (Methode).
Wolfgang
mit den Anregungen von Bernd und Karl hat es leider nicht geklaptt.
Wolfgangs Vorschlag werde ich morgen testen und dann berichten.
Beste Grüße
Herbert
Herbert Fidesser wrote:
> mit den Anregungen von Bernd und Karl hat es leider nicht geklaptt.
> Wolfgangs Vorschlag werde ich morgen testen und dann berichten.
Definiere "nicht geklappt". Bei mir funktioniert die von Karl
vorgeschlagene Methode schon ewig. Hast du denn den Pfad (Variable pf)
gesetzt?
Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
> Definiere "nicht geklappt". Bei mir funktioniert die von Karl
> vorgeschlagene Methode schon ewig. Hast du denn den Pfad (Variable pf)
> gesetzt?
Der Pfad ist korrekt (20 x geprüft). Die Ausführung erfolgt korrekt
bis zur Zeile
DoCmd.CopyObject pf & "\ZielDB.mdb", "frmReports", acForm,
"frmReports"
Hier kommt der Laufzeitfehler 29068: Anwendungsname kann diesen
Vorgang nicht abschließen. . Halten Sie die Ausführung des Codes an
und versuchen Sie es erneut.
(Die beiden Punkte stehen wirklich so in der Meldung).
Es wäre interessant, die Ursache für dieses Verhalten zu kennen,
obwohl ich mein Problem mittlerweile anders gelöst habe.
Gruß
Herbert
Herbert Fidesser wrote:
>> Definiere "nicht geklappt". Bei mir funktioniert die von Karl
>> vorgeschlagene Methode schon ewig. Hast du denn den Pfad (Variable pf)
>> gesetzt?
>
> Der Pfad ist korrekt (20 x gepr�ft). Die Ausf�hrung erfolgt korrekt
> bis zur Zeile
> DoCmd.CopyObject pf & "\ZielDB.mdb", "frmReports", acForm,
> "frmReports"
> Hier kommt der Laufzeitfehler 29068: Anwendungsname kann diesen
> Vorgang nicht abschlie�en. . Halten Sie die Ausf�hrung des Codes an
> und versuchen Sie es erneut.
> (Die beiden Punkte stehen wirklich so in der Meldung).
Ok, dann probier (evtl. zum 21x ;-)
- Vor der Ausfuehrung: Debug.Print pf & "\ZielDB.mdb"
(kein doppelter Backslash?)
- Hat die DB ein Startformular oder -Makro? Dieses muesste vorher
deaktiviert werden.
- Ist die DB evtl. anderweitig geoeffnet? Sie muesste geschlossen sein.
CopyObject erwartet exklusive Nutzung.
> obwohl ich mein Problem mittlerweile anders gel�st habe
Kannst Du uns sagen, wie?
Denn der Sinn von NG�s ist es, auch andere Teilnehmer an L�sungen zu
Fragestellungen teilhaben zu lassen.
Wolfgang
> - Hat die DB ein Startformular oder -Makro? Dieses muesste vorher
> deaktiviert werden.
Ja, es gibt ein Startformular, das über eine Befehlsschaltfläche den
Kopiervorgang startet.
Das Formular ist unabhängig.
Wenn das nicht erlaubt ist, bleibt mir wohl nur der Weg über ein
Autexex-Makro oder?
Beste Grüße
Herbert
> > obwohl ich mein Problem mittlerweile anders gelöst habe
> Kannst Du uns sagen, wie?
> Denn der Sinn von NG´s ist es, auch andere Teilnehmer an Lösungen zu
> Fragestellungen teilhaben zu lassen.
Deine Reklamation ist grunsätzlich berechtigt, aber von meiner Lösung
hat niemand was. Ich habe die Änderungen manuell an jedem Gerät
vorgenommen.
War fad, hat gedauert, aber funktioniert.
Beste Grüße
Herbert
Herbert Fidesser wrote:
>
>> - Hat die DB ein Startformular oder -Makro? Dieses muesste vorher
>> deaktiviert werden.
>
> Ja, es gibt ein Startformular, das �ber eine Befehlsschaltfl�che den
> Kopiervorgang startet.
> Das Formular ist unabh�ngig.
> Wenn das nicht erlaubt ist, bleibt mir wohl nur der Weg �ber ein
> Autexex-Makro oder?
Nein, du musst es nur deaktivieren und hinterher wieder einstellen. Hier
ein paar Code-Ergaenzungen(!) dazu:
Dim strStartupForm As String
Dim Ws As DAO.Workspace
Dim Db As DAO.Database
Dim Prp As DAO.Property
Set Ws = DBEngine.Workspaces(0)
Set Db = Ws.OpenDatabase(pf & "\Ziel.mdb")
strStartupForm = Db.Properties("StartupForm")
Db.Properties.Delete "StartupForm"
Set Db = Nothing 'damit sie wieder frei fuer CopyObject ist.
' Hier kommt dein copy, und hinterher:
Set Db = DeinAccessObjekt.CurrentDb
Set Prp = Db.CreateProperty("StartupForm", dbText, strStartupForm)
Db.Properties.Append Prp
Db.Close
'usw.
Alles Luftcode ... sieht man, oder? ;-)
spät aber doch habe ichs nochmals versucht.
Jetzt hat es geklappt. …und ich werde es des öfteren brauchen können.
Danke nochmals.
Gruß
Herbert