Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Wechsel zu einem anderen Programm mit Parameter-Übergabe

Begonnen von bahasu, Juli 11, 2012, 08:31:31

⏪ vorheriges - nächstes ⏩

bahasu

Hallo,

aus access2003/2007 will ich zu einem Programm wechseln, das bereits geöffnet ist. Mit AppActivate "MeinProgramm" funktioniert dieser Wechsel.

Wie kann ich beim Wechsel zu "MeinProgramm" diesem Programm einen Parameter übergeben?

Ziel ist, aus Outlook zu einer bereits geöffneten access-Anwendung zu wechseln, dabei eine ID zu übergeben und mit dieser den dazu passenden Datensatz anzuzeigen.

Harald
Servus

DF6GL

Hallo,


"Wechsel" heißt ja nur , den Fokus auf die Applikation zu setzen. Was die Applikation gerade macht und tut und ob  zu diesem Zeitpunkt auch gerade eine Eingabe wo auch immer möglich ist, ist so nicht herauszufinden.


Ich befürchte, dass ein Vorgang genau entspr. Deines Zieles gar nicht (stabil) möglich ist.


Eine mögliche Alternative wäre evtl. die Fernsteuerung von Access aus Outlook heraus. 

bahasu

Hallo Franz,

danke für Deinen Kommentar.


Zitat von: DF6GL am Juli 11, 2012, 09:19:24
"Wechsel" heißt ja nur , den Fokus auf die Applikation zu setzen. Was die Applikation gerade macht und tut und ob  zu diesem Zeitpunkt auch gerade eine Eingabe wo auch immer möglich ist, ist so nicht herauszufinden.

Ich befürchte, dass ein Vorgang genau entspr. Deines Zieles gar nicht (stabil) möglich ist.

Ja, dieses "Sicherstellen" ist noch zu klären.



Zitat von: DF6GL am Juli 11, 2012, 09:19:24
Eine mögliche Alternative wäre evtl. die Fernsteuerung von Access aus Outlook heraus. 

Das werde ich nicht machen können, da ich aufgrund der Berechtigungssituation keinen Zugriff auf Outlook-VBA habe. Meine Idee war, dass ich aus Outlook eine Datei (.bat oder .exe oder .mdb) aufrufe, in der dann die weiteren Schritte definiert sind.


Daher wandle ich die Frage ab:
Wie kann ich aus access ein Formular einer bereits geöffneten anderen access-Datenbank aufrufen?

Harald
Servus

DF6GL

Hallo,


M. E. geht das nur über API-Geschichten  (Findwindow, Sendmessage, etc....) und dürfte leicht in Konflikt mit der akt. Bedienung der "anderen DB" führen.



Wenn Du den eigentlichen Hintergrund erläutern würdest, könnte sich vielleicht eine gangbarer Lösungsweg auftun...

daolix

Hallo

mein erster gedanke war das du dein offenes outlook aus Access herraus fernsteuern tust. Aber wenns nicht gestattet ist die Outlook-objekte zu verwenden ist diese idee hinfällig

Laufende Objekte(access, excel outlook) holst du dir mit Getobject herran


daolix

#6
Hallo Franz

das geht dur die Angabe des Pfades und Dateinamen.


in die erste Db schreibst du irgendwos sowas wie
dim a as Access.application
set a = GetObject("LW:\Path\DieAndere.MDB")

Hierbei ist aber zu erwähnen das DieAndere.MDB laufen muss, sonst gibt es einen Fehler.

DF6GL

Hallo,

damit wird aber eine weitere Instanz der DB erzeugt....Eine vorhandene Instanz muss dafür nicht existieren...d. h. es wird immer eine eigene Instanz durch diesen Code erzeugt.





Test-Code:

Private Sub Befehl6_Click()
Dim db2 As Object

Set db2 = GetObject("c:\db111.mdb")

If db2.CurrentDb.Name = "c:\db111.mdb" Then
  db2.Visible = True
  db2.DoCmd.OpenForm ("frmTabelle1")
  db2.Forms!frmTabelle1!Feld1 = 1111
End If

'Set db2 = Nothing

End Sub



Mit

Set db2 = GetObject(,"Access.Application")

Msgbox db2.Currentdb.Name


wird db2 nur auf die DB referenziert , in der der Code abläuft.


daolix

#8
Hallo Franz,

Mein letzter Satz ist blödsinn.
Einen Fehler gibt es wenn auf eine nicht laufende Class verwiesen wird.

Wenn die Andere.MDB nicht läuft wird sie mit GetObject gestartet(eine neue Instanz von MSAccess wird gestartet), wenn die Andere.MDB aber läuft wird diese Instanz herangegeholt.

DF6GL

#9
Hallo,


habe nochmal getestet...


Bei den ersten Tests wurde nicht die geöffnete DB referenziert und jeweils eine neue weitere Instanz erzeugt...

Beim letzten erneuten Test wird die geöffnete DB referenziert und keine neue Instanz erzeugt... Dafür geht
db2.Visible=true
auf Fehler (unzulässiger Verweis auf Eigenschaft Visible) 


Finde keinen Unterschied in der Testsituation (auch nicht bei der Überprüfung der laufenden Instanzen im Taskmanger).


Wie auch immer, wenn der Zugriff auf eine laufende Instanz so reibungslos und stabil funktioniert, dann kann Harald dieses Prinzip ja verwenden.

daolix

#10
Zitat von: DF6GL am Juli 11, 2012, 16:13:58
Hallo,



"wenn die Andere.MDB aber läuft wird diese Instanz herangegeholt."


das kann ich nicht bestätigen....
Was heist das jetzt? bei dir wird trotz laufender c:\db111.mdb immer wieder eine neue instanz gestartet?

[edit]
So jetz verstehe ich es, oder auch nicht. Ich hab wohl anders referenziert.
as Object oder as Access.Aplication führt zu unterscheidlichen Ergebnissen.
[/edit]

DF6GL

#11
Herrjeh, die Beiträge  waren  wohl jetzt etwas unsynchronisiert.      :D


PS: noch mal getestet:


Dim db2 As Object

Set db2 = GetObject("c:\db111.mdb")   ' referenziert auf die geöffnete Instanz


Set db2 = GetObject("c:\db111.mdb","Access.Application")   'erzeugt erneute Instanz und referenziert darauf.

daolix

#12
Hallo Franz

ZitatHerrjeh, die Beiträge  waren  wohl jetzt etwas unsynchronisiert.      Lächelnd
lol das stimmt

Zitat
Beim letzten erneuten Test wird die geöffnete DB referenziert und keine neue Instanz erzeugt... Dafür geht
db2.Visible=true
auf Fehler (unzulässiger Verweis auf Eigenschaft Visible)  
Das konnte ich replizieren.

ZitatFinde keinen Unterschied in der Testsituation (auch nicht bei der Überprüfung der laufenden Instanzen im Taskmanger).
Doch es gibt einen wie ich gerade sehe
Wenn eine nicht vorhandene Instanz mit Getobject aufgerufen wird, wird die neuentstehende AccessInstanz (MsAccess.exe) mit dem Commandlineparameter "-Embeding" aufgerufen.
ist lt dbwiki ein undokumentierter Parameter.

Zitat
PS: noch mal getestet:


Dim db2 As Object

Set db2 = GetObject("c:\db111.mdb")   ' referenziert auf die geöffnete Instanz


Set db2 = GetObject("c:\db111.mdb","Access.Application")   'erzeugt erneute Instanz und referenziert darauf.
Jup so läuft das bei mir auch.

Gruss Daniel

bahasu

Dank an Euch beide,

werde Eure Hinweise gerne anwenden.

Harald
Servus