[Gelöst] SQL Daten aus Navison in andere Datenbank

28. November 2007 22:04

Hallo zusammen,

ich habe folgende Schwierigkeiten:
Aus der Tabelle 5409, Prod. Order Routing Line muss ich Daten in eine andere Datenbank, diese ist auch auf SQL am gleichen Server, übertragen. Den Connectionstring etc das hab ich alles.
Nur wenn ich die Daten übergeben will, dann geht das irgendwie nicht.
Anbei mal der Code mit welchem ich nicht zum gewünschtem Ergebnis komme:

Klar ist dass ich nicht erst 2 Zwischenvariablen füllen muss, aber ich hab schon so viel Probiert...

Name DataType Subtype Length
SQL Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Connection
SQLRecordSet Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Recordset
SQLFldCollection Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Fields
SQLFldObject Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Field



Code:

SQLConnString := 'Provider=SQLOLEDB;' +
                 'Data Source=' + MfgSetup."SQL Server IP" + ';' +
                 'Initial Catalog=' + MfgSetup."SQL Database Name" + ';' +
                 'User ID=' + MfgSetup."SQL User Name" + ';' +
                 'Password=' + MfgSetup."SQL User Password" + ';';


SQL.ConnectionString := SQLConnString;
SQL.ConnectionTimeout := 2;
SQL.CommandTimeout := 2;
SQL.Open;

   
    SQLFields := STRSUBSTNO('insert into [' + MfgSetup."SQL Import Table" + ']' +
                 '(Status,'+
                 'Auftragsnummer,'+
                 'Planstueckzahl,'+
                 'Prozesskennzeichen,'+
                 'Plansteuckzahl,' +
                 'Abrufindex,'+
                 'Liefertermin,'+
                 'Produktionszeit,'+
                 'Ruestzeit,'+
                 'ArbeitsPlanRefNr,' +
                 'ArbeitsplanPlanNr,'+
                 'Arbeitsgangnummer,'+
                 'ID)');


    SQLFieldValues := STRSUBSTNO(' Values(%1','%2','%3','%4','%5','%6','%7','%8','%9',
                      '%10','%11','%12','%13)',
                      '2,' + 
                      FORMAT(ProdOrderRtngLine."Prod. Order No.") + ',' +
                      FORMAT(ProdOrderRtngLine."Input Quantity") +  ',' +
                      FORMAT(CanDoRouting) + ',' +
                      FORMAT(ProdOrderRtngLine."Input Quantity") + ',' +
                      '0,' + 
                      FORMAT(ProdOrderRtngLine."Ending Date") + ',' +
                      FORMAT(ProdOrderRtngLine."Run Time") + ',' +
                      FORMAT(ProdOrderRtngLine."Setup Time") + ',' +
                      FORMAT(ProdOrderRtngLine."Routing Reference No.") + ',' +
                      '2,' + //ProdOrderRtngLine."Routing No." + ',' +
                      ProdOrderRtngLine."Operation No." + ',' +
                      NextNo);

    SQLExportString := SQLFields + SQLFieldValues;

    SQL.Execute(SQLExportString);



Wer kann mit da weiterhelfen?

Anbei die Werte:
2,
07.000123, (Bei mir wird die führende 0 abgeschnitten, im SQL kann ich es aber eigeben
400.000,
21,
400.000,
0,
Beschreibungstext
14.12.2007,
1,
1,
10000,
B034-12345,
10,
Null,
123
(Es werden nicht alle Werte welche hier stehen übertragen)
Zuletzt geändert von Gerhard Grasser am 29. November 2007 14:53, insgesamt 2-mal geändert.

28. November 2007 22:28

Hi Gerhard,
fasse bitte den Quelltext in code-Tags (also bei Beginn [code] und dahinter [ /code] (ohne das Lerrzeichen vor dem /), sodass er als solcher erkennbar und vor allem besser lesbar wird.

Danke!

29. November 2007 09:05

Wenn Du den "SQLExportString" z.B. im Debugger kopierst und als Abfrage im Management Studio/Query Analyzer direkt ausführst, klappt's dann? Andernfalls sollte SQL Server mit einer genaueren Fehlermeldung aufwarten ...

29. November 2007 09:54

Warum hast du den STRSUBSTNO in der Zuweisung des Textes SQLFields verwendet? Den Text kannst du doch direkt zuweisen.
Wenn das Ziel immer die gleiche Tabelle ist, was anzunehmen ist, da du die Feldnamen ja fest im String stehen hast, würde ich auch den Tabellennamen dort fest eintragen also
insert into [meine Zieltabelle] (status.... usw.

29. November 2007 10:28

Hallo zusammen,

das mit dem strsubstno ist so nicht nötig, das ist mir klar. Ich hatte ja eingangs erwähnt: "... ich habe ja schon so viel Probiert..."

Richtig ist auch dass ich die Tabelle fest in den Code integrieren könnte, nur nachdem der "externe Dienstleister" sienen Tabellennamen noch nicht genau kennt hab ich das über die Einrichtung flexibel gehalten.

Im Debuger sieht der Übergabestring mit den Daten so aus:
" Values(2,07.002195,100.000,21,100.000,0,07.12.07,0,0,10000,2,0010,144)"
Das ist auf jeden Fall mal so ok.

Mit den vorgenannten Übergaben im String kommt folgende Fehlermeldung:

Diese Meldung ist für C/AL Programmierer:

Der Aufruf zum Member Execute ist fehlgeschlagen. Microsoft OLE DB Provider für SQL Server gab folgende Meldung zurück:
Falsche Syntax in der Nähe von '.07'.

Im Queryanalyzer habe ich folgende Fehlermeldung:

Meldung 102, Ebene 15, Status 1, Zeile 2
Falsche Syntax in der Nähe von '.07'.



Ich vermute das Teil hat ein Problem mit , (Komma) und . (Punkt).

Gruß

Gerhard

29. November 2007 10:40

neee, der Übergabestring ist nicht ok, du musst Strings in ' ' setzen, nur echte Zahlen dürfen ohne Field-delimiter zwischen den Kommas stehen.
Du hast aber auch recht, die Fehlermeldung deutet auf eine Konvertierung von . und , hin. Wenn dem so ist, musst du die beiden halt vorher in deinem Executestring (bzw in dem Fieldvaluestring) schon mal austauschen, damit es anschließend richtig ist.

29. November 2007 14:52

Hallo,

so das problem ist gelöst.
Ich habe nach dem Tip vom "Schumi" das ganze noch über eine Funktion in ' am Anfrang und ' am gepackt. Nun Funktioniert es.

Danke!