20. März 2015 13:12
Hallo,
z. Z. haben wir noch NAV 2009 SP1 (CC). Damit können wir eine Access-Tabelle mit Daten füllen und danach ein Modul aufrufen, das einen Bericht ausdruckt.
Nun bereiten wir ein Update auf NAV 2013 R2 vor. Die Access-Tabelle kann weiterhin per ADO befüllt werden. Vor dem Aufruf des Moduls bekommen wir schon beim Öffnen der Datenbank die Fehlermeldung
"Die Datenbank kann von Microsoft Access nicht geöffnet werden, da sie nicht existiert, ein anderer Benutzer sie bereits im Exclusivmodus geöffnet hat, oder da es sich nicht um eine ADP-Datei handelt."
Die ersten 2 Fälle kann ich ausschliessen. Daraus schliesse ich, dass NAV 2013 R2 Datenbanken im mdb-Format nicht mehr öffnen kann.
- Code:
// AccessApp ist Automation 'Microsoft Access 14.0 Object Library'.Application
IF ISCLEAR(AccessApp) THEN
CREATE(AccessApp,FALSE,TRUE);
AccessApp.OpenCurrentDatabase(BDESetup."BDE FA-Exportpfad", FALSE, '');
AccessApp.Run('RunReport',BDESetup."Access Report Name", ProdOrderNo);
//Check := AccessApp.Run('RunReport',BDESetup."Access Report Name", ProdOrderNo);
//message(format(check));
AccessApp.CloseCurrentDatabase;
AccessApp.Quit;
Ok, wenn NAV 2013 R2 keine mdb mehr mag, dann konvertiere ich die Datenbank halt in .accdb, dachte ich mir.
Dann wird der Access-Bericht sogar gestartet und ausgedruckt. Dummerweise stirbt der NAV-Client mit folgender Meldung.
"Der Server XXX was unable to process the request. Close the application and start it again."
Der Access-Prozess muss per Task-Manager gekillt werden. Ob ich den Rückgabewert (Check) abfange oder nicht, macht keinen Unterschied. Vor dem "message" ist der Client bereits tot.
Als ich mich vor paar Wochen mit dem Thema beschäftigt habe, ist der Client glaub' nicht gestorben. Mit der .accdb Datenbank hab ich aber dennoch ein weiteres Problem. Per ADO kann ich nicht in die Access-Tabelle schreiben. Da erhalte ich die Fehlermeldung
"Nicht erkennbares Datenbankformat \\<Pfad>\AccessDB.accdb"
So schreibe ich in die Tabelle:
- Code:
// ODBCdbConnection ist Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Connection
// AccessTable ist Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Recordset
CREATE(ODBCdbConnection,FALSE,TRUE);
ODBCdbConnection.ConnectionString('PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=' + BDESetup."BDE FA-Exportpfad");
ODBCdbConnection.Open();
CREATE(AccessTable,FALSE,TRUE);
AccessTable.Open(BDESetup."Access Exp. Table Name",ODBCdbConnection,1,2);
IF BDEExpBuffer.FIND('-') THEN
REPEAT
AccessTable.AddNew;
AccessTable.Update('BDE-ID',BDEExpBuffer."BDE-ID");
AccessTable.Update('Production Order No',BDEExpBuffer."Prod. Order No.");
AccessTable.Update('Operation No',BDEExpBuffer."Operation No.");
AccessTable.Update('BarCode',BDEExpBuffer."BDE Barcode Nr.");
//usw
UNTIL BDEExpBuffer.NEXT = 0;
AccessTable.Close;
ODBCdbConnection.Close;
CLEAR(ODBCdbConnection);
CLEAR(AccessTable);
Die große Frage ist jetzt, welchen Weg ich gehen soll, um das Problem zu lösen.
1. Ich bleibe bei mdb und suche eine Lösung um das Modul, bzw. Report öffnen zu können.
2. Ich benutze accdb und suche eine Lösung, um in die Tabelle zu schreiben. Das Sterbe-Problem muss auch noch gelöst werden.
3. Ich generiere einen NAV-Report. Der muss aber einen "Industrial 2of5" Barcode vertikal drucken können. Das ist wahrscheinlich das größte Problem.
Kann mir jemand einen Tip geben, wie ich das Problem mit einem dieser 3 Möglichkeiten lösen kann?
Vielleicht kann jemand auch eine der Möglichkeiten auch generell für nicht lösbar deklarieren? So nach dem Motto "Weg 1 kann nicht gehen .. Weg 2 muss gegangen werden".
Oder muss das mit Dot.Net gemacht werden? Davon hab ich Null Ahnung.
Die anderen Beiträge zum Thema Access hab ich gelesen. Vielleicht kam bisher noch keiner auf die Idee, Access mit NAV 2013 R2 öffnen zu wollen.
Schönen Gruß
Andi