Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 12:00

Hallo zusammen,

ich würde gerne über einen Job zB jede Nacht Daten aus NAV direkt in eine Tabelle eines anderen SQL-Server schreiben. Das Konstrukt "Export in eine CSV und dann wieder Import" möchte ich NICHT umsetzen.
CA/L möchte ich verwenden, um die Daten im NAV vor dem Schreiben in die "fremde" SQL-Datenbank aufzubereiten.

Mit welcher Technik ist das unter NAV 2017 am besten möglich?

Vielen Dank für Eure Hinweise.

Grüße
Ralph

EDIT: ich erwarte hier keinen fertigen Code :-)

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 12:20

Eine Möglichkeit wären die Microsoft ActiveX Data Objects (ADO). In NAV als DotNet oder Automation ansprechbar. Bei einem meiner Projekte seit vielen Jahren zuverlässig im Einsatz.
Praktisch sind dabei meist diese vier davon immer notwendig.
ADO.png

Die SQL-Statements werden dabei nach Aufbau der Verbindung im Recordset.Open(…) mitgegeben und danach die Felder in C/AL angesprochen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 13:48

Diese Möglichkeit habe ich natürlich gefunden ;-). Fast alle Einträge dazu sind aber mind. 10 Jahre alt. Deshalb bin ich davon ausgegangen, es gäbe neuere Methoden.
Das ADO-Objekt ist ja weit verbreitet (zB Access).
Da in Deiner Antwort jedoch das Wort "zuverlässig" + "Automation" steht, gehe ich das Sache mal nach. Oder hat noch jemand eine Alternative?

Grüße

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 13:57

Hallo,

du kannst eigentlich fast alles nehmen, für das es .Net- Komponenten für deinen SQL-Server gibt. u.a auch ADO.NET

Gruß Fiddi

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 14:09

Ok, verstanden. Danke euch!

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 14:10

Ich empfehle die Variante "External SQL" (Microsoft Hilfe).

Das funktioniert, mit einigen Einschränkungen, ziemlich zuverlässig.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 14:12

Ralph71 hat geschrieben:Da in Deiner Antwort jedoch das Wort "zuverlässig" + "Automation" steht, gehe ich das Sache mal nach.

Für eine Neuentwicklung würde ich da eher mit .NET statt COM anfangen, das ist zukunftsicherer (solange man nicht irgendwann in die Cloud geht :mrgreen: ) Damit habe ich aber keine Langzeiterfahrungen bis 2011 :wink: . Von der Performance her merkt man aber auch mit COM jedenfalls nicht, dass eine andere Datenbank beteiligt ist.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

28. Mai 2020 14:41

Kowa hat geschrieben:...
Für eine Neuentwicklung würde ich da eher mit .NET statt COM anfangen, das ist zukunftsicherer (solange man nicht irgendwann in die Cloud geht :mrgreen: ) ...


Und da sind wir wieder. Würde ich heute auch nicht mehr machen.

External Tables funktionieren tatsächlich gut und sollten hoffentlich auch noch ein paar Tage unterstützt werden.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

29. Mai 2020 10:39

@m_schneider --> das ermöglicht aber keine temp Aufbereitung der Daten im NAV (über C/AL). Die andere Anwendung erwartet "andere" Daten (andere Datenstruktur). Zudem will ich das ganze per Cron erledigen. Richtig?

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

29. Mai 2020 11:38

Doch, das geht.

Du legst eine Tabelle an, welche zumindest die zu übergebenden Felder enthält. Datentypen und Längen identisch. (Bei bestimmten Datentypen gibt es Probleme; z.B. bit).
Spaltennamen können abweichen und werden über den Punkt "External Name" definiert.

Dann erstellst du eine Codeunit, welche die Daten holt, aufbereitet und in die Tabelle schreibt. Diese Codeunit kannst du mit dem Task-Scheduler aufrufen.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

2. Juni 2020 10:21

an einen MySQL kann ich das aber nicht anbinden? MS schreibt immer nur von SQL-Server....
Meine Suchen dazu blieben ohne Erfolg. :-(

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

2. Juni 2020 10:26

Hallo,

du solltest jeden SQL-Server ansprechen können, der über eine ADO-Schnittstelle verfügt, das sollte auch bei MySQL der Fall sein.

Ansonsten kannst du aber auch .NET- Komponenten verwenden, die MySQL- zur Verfügung stellt. https://dev.mysql.com/downloads/connector/net/

Gruß Fiddi

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

4. Juni 2020 13:36

Sorry, falsch ausgedrückt. :-(
Ich meinte eine zusätzliche Anbindung an einen MySQL-Server über External Tables.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

4. Juni 2020 14:46

Ralph71 hat geschrieben:Sorry, falsch ausgedrückt. :-(
Ich meinte eine zusätzliche Anbindung an einen MySQL-Server über External Tables.

Ich glaube nicht, dass das mit MySql funktioniert.

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

4. Juni 2020 15:16

Ich glaube nicht, dass das mit MySql funktioniert.


warum soll das nicht funktionieren? Solange die .Net- Komponenten für MySQL da sind, bzw. ADO dafür eingerichtet ist, sehe ich da kein Problem.

Wenn du es schaffst mit Excel via ADO auf deine MySQL- DB zuzugreifen, funktioniert das mit dem gleichen Kontak-String auch in NAV.

Gruß Fiddi

Re: Aus NAV über CA/L in einen anderen SQL-Server schreiben

4. Juni 2020 16:44

Ralph71 hat geschrieben:...Ich meinte eine zusätzliche Anbindung an einen MySQL-Server über External Tables.

Per ADO sicherlich. Über die External Tables denke ich nicht. Einen Versuch ist es jedoch wert.