[Gelöst] Hilfe bei der Anbindung an SQL

5. Februar 2009 09:30

Hallo,

wie kann ich von NAV(3.6) direkt in eine SQL-Tabelle schreiben?
Das das über Automation geht ist mir schon klar, was mir nur fehlt ist der Einstieg! Vielleicht kennt ja jemand ein Tutorial.
Zuletzt geändert von winkelsbr am 25. Mai 2009 11:17, insgesamt 3-mal geändert.

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 10:51

ich habe das einmal für unser MDE (Diatec) geschrieben
Code:
Name            DataType     Subtype                                                   Length
V_Parameter     Text                                                                   120
V_String        Text                                                                   120
ADO_Connect     Automation   'Microsoft ActiveX Data Objects 2.8 Library'.Connection   
ADO_Recordset   Automation   'Microsoft ActiveX Data Objects 2.8 Library'.Recordset    
ADO_Fields      Automation   'Microsoft ActiveX Data Objects 2.8 Library'.Fields       
Wert_1          Text                                                                   30
Wert_2          Text                                                                   30
Wert_3          Text                                                                   30
Wert_4          Text                                                                   30

CLEAR(ADO_Connect);
IF NOT CREATE(ADO_Connect, FALSE) THEN
   ERROR('Es konnte keine ADO-Instanz erstellen!');


V_Parameter := 'Provider=SQLOLEDB;Data source=computer1;database=database1;User Id=USER;Password=PSWD;';


ADO_Connect.Open(V_Parameter);
CLEAR(ADO_Recordset);
IF NOT CREATE(ADO_Recordset, FALSE) THEN
   ERROR('Es konnte keine Recordset-Instanz erstellen!');

ADO_Recordset.CursorType(0);
V_String  := 'SELECT*from Auftrag';           //"Auftrag" ist die Tabelle im SQL in die geschrieben werden soll
ADO_Recordset.LockType(2);
ADO_Recordset.Open(V_String,ADO_Connect);

ADO_Recordset.AddNew;
ADO_Recordset.Fields.Item(0).Value  := Wert_1;
ADO_Recordset.Fields.Item(1).Value  := Wert_2;
ADO_Recordset.Fields.Item(2).Value  := Wert_3;
ADO_Recordset.Fields.Item(3).Value  := Wert_4;
ADO_Recordset.Update;

ADO_Recordset.Close;
ADO_Connect.Close;


mfg Michael

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 10:57

Hallo mespelage,

danke,werde ich gleich mal testen.

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 11:17

Hallo mespelage,

beim anlegen der ADO-Variablen bring er mit bei ADO_Recordset beim speichern eine Fehlermeldung:
"Die Variable ADO_Recordset::WILLCHANGERECOR ist mehrfach definiert..."

Ich habe extra die CU neu angelegt und bisher nur Globalen variablen definiert.

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 11:26

wie diese Fehlermeldung zustande kommt, kann ich auch nicht sagen, aber wie man sie behebt.
1. das Objekt als Txt auslesen
2. objket (Txt) öffnen mit einem Editor
3. am Ende des Objektes befinden sich "Event" Zeilen, diese alle löschen
4. speichern
5. Txt-Objekt einlesen in NAV
6. Objekt kompillieren.

mfg Michael

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 13:16

Hallo mespelage,

soweit klappt das jetzt. NUR bringt er mir bei "ADO_Recordset.Open(V_String,ADO_Connect);" jetzt die Fehlermeldung:
"Die angeforderten Eigenschaften können nicht unterstützt werden"

Grübel, Grübel....

Kann es sein, dass es Probleme mit den Parameter gibt? Habe SQL 2005 im Einsatz.

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:06

das sieht nach einem Schreibfehler aus,
sind alle Leezeichen brücksichtigt?
ist der Tabellenname richtig?
V_String := 'SELECT*from Auftrag';

Michael

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:28

Hallo Michael,

ja, richtig geschrieben habe ich es.
Habe sogar veruchsweise mit Leerstellen gearbeitet.

Gruß Wolfgang

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:32

Lade doch mal deinen Code hoch, vielleicht erkenne ich einen Fehler

Michael

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:39

Hallo Michael,

hier der Code

Code:
    ADO_Recordset.CursorType(0);
    SQLString := 'select*fromAuftragsdaten';
    ADO_Recordset.LockType(2);
    ADO_Recordset.Open(SQLString,ADO_Connect);

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:45

Code:
SQLString := 'select*fromAuftragsaten';

SQLString := 'select*from Auftragsaten';     //Leerzeichen!!
SQLString := 'select*from Auftragsdaten';  //Fehlt ein "d" im Tabellennamen?
                                                             //Der Tabelenname muss exakt dem aus dem SQL entsprechen


mfg Michael

Re: Hilfe bei der Anbindung an SQL

5. Februar 2009 14:55

Hallo Michael,

hatte ich schon korrgiert, bringt mir aber immer noch die Fehlermelung!

Fehler gefunden! War was ganz simples, fehlende Berechtigung in SQL. :oops:

Nochmals Hilfe bei der Anbindung an SQL

15. Mai 2009 12:03

Nochmal Hallo,

ich habe leider diesen Thread wieder öffnen müssen, da ich hierzu doch nochmal Hilfe brauche!

Leider hab ich nichts zu den nachfolgenden Punkten finden können.
Vielleicht hat ja einer von Euch ein paar nützliche Hinweise:

1. Wie kann ich mit Navision eine Abfrage erstellen, dass er mit auch alle SQL-Zeilen übernimmt.
2. Gleichzeitig auch einen Filter auf die Felder setzen kann

Gruß

Wolfgang

Re: Hilfe bei der Anbindung an SQL

15. Mai 2009 14:52

Den Punkt eins habe ich schon gelöst!

Leider habe ich noch das Problem mit LIKE und %.

Vielleicht weiß dazu jemand eine Lösung.

Re: Hilfe bei der Anbindung an SQL

15. Mai 2009 15:42

winkelsbr hat geschrieben:Leider habe ich noch das Problem mit LIKE und %.

Welches Problem genau?

Re: Hilfe bei der Anbindung an SQL

15. Mai 2009 15:52

Hallo Natalie,

mein Problem ist das Hochkomma.
Unter SQL übergebe ich den Teilsuchstring mit LIKE '%123'

nur wie geht das in Navision???

Re: Hilfe bei der Anbindung an SQL

15. Mai 2009 16:09

winkelsbr hat geschrieben:Hallo Natalie,

mein Problem ist das Hochkomma.
Unter SQL übergebe ich den Teilsuchstring mit LIKE '%123'

nur wie geht das in Navision???


Es geht um den Aufbau eines Strings innerhalb von NAV, der als SQL-Befehl abgegeben wird?
Probier das hier mal aus:
Code:
'LIKE ' + '''' + '%123' + ''''

Re: Hilfe bei der Anbindung an SQL

25. Mai 2009 08:05

Hallo Natalie,

bitte entschuldige die verspätete Antwort, aber ich habe mir mal eine Woche Urlaub gegönnt und erst jetzt Deine Antwort gesehen.

Mit Deinem Vorschlag, setzt er den SQL-String richtig zusammen. Nur irgendwie nimmt er diesen so aber so nicht.

Hier mal mein Code:
Code:
abnr := STRSUBSTNO('SELECT*from "SQL_DB"."BDE" where Mandant = 1 and Auftragsnummer = ' +
                    'LIKE ' + '''' + '%9500%' + '''');


Leider bricht Navision beim Connect mit dem Sting ab:
Code:
ADO_Recordset.LockType(2);
ADO_Recordset.Open(abnr,ADO_Connect); // hier der Break Error gem. Debugger


Er scheint Probleme mit dem String für die Auftragsnummer zu haben!
Mein Problem ist Hauptsächlich, das die Auftragsnummer mit "führenden" Leerstellen vor der eigentlichen Nummer auf genau 30 Stellen in die Tabelle geschrieben wird.

Re: Hilfe bei der Anbindung an SQL

25. Mai 2009 11:15

Ich konnte dieses Problem jetz auf eine etwas umständliche Art lösen!

1. Ich habe einfach eine Blank-String mit 30 Leerstellen erstellt.
2. Abfrage der Stellen der Auftragsnr. (können unterschiedlich lang sein)
3. zusammensetzen der Leerstellen und Auftragsnr.
4. den SQL-String ebenfalls entsprechend zusammengesetzt (gem. Beispiel Natalie mit den Hochkommas)

Damit wäre dieses Problem gelöst.

Wenn jemand jedoch noch ein Tip bezüglich LIKE hat, wäre ich sehr dankbar, da man das immer gebrauchen kann.

Danke nochmal für die Hilfe