[Gelöst] Aus Navision ein Access-Modul starten

17. Juli 2007 12:55

Hallo zusammen,

ich habe ein kleines vba-Programm geschrieben, welches in Access-Tabellen von Navision aus etwas ändern soll.
Kann mir jemand einen Tip geben, wie ich dieses Modul von Nav aus aufrufen kann?

Vielen Dank!
Zuletzt geändert von Silvia am 20. Juli 2007 07:47, insgesamt 1-mal geändert.

17. Juli 2007 22:23

Meinst du das VBA Programm oder ein Modul in Access?
Gruß Mikka

18. Juli 2007 07:30

Ja das VBA-Programm ist in einem Modul in Access!

Je nachdem was von Navision aus leichter zu starten ist, ich hab ja beides. :-)

ich habe in der Automation: 'Microsoft Access 11.0 Object Library'.Module
Module, Modul usw. gefunden, allerdings weiss ich nicht wie man sich dessen bedient!?

18. Juli 2007 08:39

Hallo Silvia,

ich könnte mir ungefähr sowas vorstellen:

Code:
IF ISCLEAR(AccessApp) THEN
  CREATE(AccessApp);

AccessApp.Visible:=FALSE;
AccessApp.OpenCurrentDatabase('C:\Test.mdb', FALSE, '');

AccessModules:=AccessApp.Modules;

IF AccessModules.Count>0 THEN BEGIN
  AccessModule:=AccessModules.Item(0);
  // Hier das Modul ausführen.
END;

AccessApp.Quit;

IF NOT ISCLEAR(AccessApp) THEN
  CLEAR(AccessApp);


Folgenden drei Variablen müssten angelegt werden:

Code:
Name   DataType   Subtype   Length
AccessApp   Automation   'Microsoft Access 11.0 Object Library'.Application   
AccessModules   Automation   'Microsoft Access 11.0 Object Library'.Modules   
AccessModule   Automation   'Microsoft Access 11.0 Object Library'.Module


Gruß, Marc

18. Juli 2007 11:28

Hi Marc,

ja das ist ein super Ansatz, ich komme schon bis zu meinem Modul!
Allerdings habe ich schon sämtliches probiert um die Funktion in dem Modul laufen zu lassen, aber ich bekomme irgendwie keinen Zugang!?

In Deiner If-Schleife habe ich an der Stelle wo das Modul ausgeführt werden soll folgenden Code gesetzt:
Code:
 ...
IF AccessModules.Count>0 THEN BEGIN
  AccessModule:=AccessModules.Item(0);
  AccessApp.Run(AccessModule.Name);
END;
...


und dann kommt die Fehlermeldung:
"..kann Procedure "IDEinfuegen" nicht finden.."
Das Modul heisst "IDEinfuegen" ich hab schon alles mögliche ausprobiert irgendwie komm ich nicht "ins Modul rein"?

hast Du eine Idee?

Danke schon mal!

18. Juli 2007 11:55

Mit AccessApp.RUN kann man - glaub ich - kein Modul ausführen. Mmmmm, stehe ich Moment auch auf dem Schlauch und weiß nicht, wie es weitergehen könnte...

18. Juli 2007 12:04

hmmm... ich habe komischerweise nur auf der Ebene AccessApp ein run oder ähnliches gefunden.
Als Parameter soll eine Procedure angeben werden...aber ich habe keine Automation gefunden in der ich die Procedure ablegen kann...

Ich hab ein Attachement angefügt, dass das SymbolMenü zeigt!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

18. Juli 2007 15:55

also irgendwie komm ich nicht dahinter: Mir fehlt immer was, habe ich einen Denkfehler nicht bemerkt?

Wenn ich eine Funktion in einem Accessmodul laufen lassen will gehe ich folgendermaßen vor:

1.AccessDB öffnen:
AccessApp='Microsoft Access 11.0 Object Library'.Application

AccessApp.OpenCurrentDatabase('D:\Test.mdb',FALSE,'');

2. Auf das entsprechende Modul zugreifen:
AccessModules='Microsoft Access 11.0 Object Library'.Modules
AccessModule='Microsoft Access 11.0 Object Library'.Module

AccessModules:=AccessApp.Modules;
AccessModule:=AccessModules.Item(0);
-->hier habe ich das Modul

3. Auf Funktion im Modul zugreifen
-->leider gibt es keine Automation für AccessFunktions/AccessFunktion
und auch kein AccessModule.Run

-->gut scheinbar geht es so nicht

dann habe ich die folgende Automations gefunden:
1. AccessCodeProjekt='Microsoft Access 11.0 Object Library'.CodeProject
Methoden: OpenConnection
Properties:AllModuls

2. AccessAllModuls='Microsoft Access 11.0 Object Library'.AllModules
Methoden:0
Properties:Item

3. AccessCodeData='Microsoft Access 11.0 Object Library'.CodeData
Methoden:0
Properties: AllFunktions

4. AccessAllFunktions='Microsoft Access 11.0 Object Library'.AllFunctions
Methoden: 0
Properites: Item

Bei diesem Ansatz kann ich:
1.AccessDB öffnen:
AccessCodeProjekt.OpenConnection(...);
AccessAllModuls=AccessCodeProjekt.AllModules;

2. Auf das entsprechende Modul zugreifen:
AllModuls=AccessAllModuls.Item(0);

3. Auf Funktion im Modul zugreifen:
AccessCodeData = AccessAllFunktions.Item(0);

-->Hier fehlt mir der Übergang von Modul zu Funktion...

was beachte ich nicht?

20. Juli 2007 07:46

Hallo Zusammen,

gestern abend kam mir die zündende Idee: :idea:
Es lag an der FUNKTION in meinem Modul!
Funtionen haben immer einen Rückgabewert Prozeduren nicht.
Da ich NUR einen RUN mache und keinen Rückgabewert übergebe wird eine Prozedur erwartet, und da ich keine Rückgabewerte habe musst ich
aus meiner Function eine Sub machen und es lief!

aaaaaaaaaaaaaaaaaaaaaahhhhhh! :lol:

hier nun der funktionierende Code:

Code:
IF ISCLEAR(AccessApp) THEN
  CREATE(AccessApp);

AccessApp.OpenCurrentDatabase('D:\Test.mdb',FALSE,'');
AccessApp.Visible(FALSE);
//für Proceduren
AccessApp.Run('DeineProcedur');
//für Funktionen
//Wert := AccessApp.Run('DeineFunktion');

AccessApp.Quit;

IF NOT ISCLEAR(AccessApp) THEN
  CLEAR(AccessApp);


Vielen Dank noch mal an alle die mitgesucht haben! :wink:

20. Juli 2007 11:38

Schön, dann weiß ich jetzt auch wie es geht. :-)

Gruß, Marc

11. Oktober 2007 08:38

Hallo zusammen,

könnt Ihr mir auch sagen, wie ich einen Bericht in Access aufrufen kann?
Habe es schon mit 'Microsoft Access 11.0 Object Library'.Report versucht.
Dort gibt es eine Funktion Print, allerdings weiß ich nicht welche Parameter ich dort mitgeben muss.
Oder kann ich dies auch über AccessApp.Run machen?

Viele Grüße
Joker

11. Oktober 2007 10:19

Ich habs jetzt auch über eine Access Procedure gemacht, die den Bericht aufruft...