[gelöst]Feldtyp Numeric

2. Juli 2009 12:48

Ich versuche aus einer externen SQL-Datenbank (nicht NAV) Werte per ADO auszulesen.
Beim feldtyp "numeric(18,4)" erhalte ich jedoch eine Fehlermeldung, dass der Feldtyp in NAV nicht bekannt ist.
Wie kann ich diesen Wert dennoch auslesen?
Ich habe bereits mit "cast" und "convert" rumprobiert, finde aber die richtige Syntax nicht.
kann mir jemnad helfen?

mfg Michael
Zuletzt geändert von mespelage am 27. Juli 2009 15:00, insgesamt 1-mal geändert.

Re: feldtyp Numeric

2. Juli 2009 15:59

Versuch mal
Code:
CONVERT(decimal(38,20), [DeinQuellFeld])
oder
Code:
CAST ([DeinQuellFeld] AS decimal(38,20))


Beste Grüße
Falk

Re: feldtyp Numeric

3. Juli 2009 10:49

[quote="FAFL"]Versuch mal
Code:
CONVERT(decimal(38,20), [DeinQuellFeld])


Code:

Name        ConstValue
Text005    where CONVERT(decimal(38,20), %1)
 

V_Tabelle := 'merkmalmass';
V_Filter_2  := STRSUBSTNO(Text005,'otg');   //otg ist der Feldname in der SQL Tabelle
V_String  := 'SELECT*from '+V_Tabelle+V_Filter_2;


Ich erhalte immer diese Fehlermeldung: Incorrect syntax near ')'
wo ist der Fehler?
mfg Michael

Re: feldtyp Numeric

3. Juli 2009 11:13

Wie sieht denn am Ende dein V_String aus?

Re: feldtyp Numeric

3. Juli 2009 11:51

SELECT* from merklammass where CONVERT(decimal(38,20), otg)

otg ist ein Feld vom Typ Numeric(18,4)

mfg Michael

Re: feldtyp Numeric

3. Juli 2009 11:54

WHERE impliziert, dass du einen Feldwert vergleichst.
Du sprichst zwar dein Feld an, aber der Vergleichswert fehlt. So in etwa hätte ich mir das vorgestellt:

Code:
SELECT * from merklammass where CONVERT(decimal(38,20), otg) = DeineZahl

Re: feldtyp Numeric

14. Juli 2009 13:35

Selbiges Problem hatte ich auch.

Mangels Zeit hab' ich das "Problem" mit numerischen Feldern wie folgt gelöst:

Code:
      // -------------------------------------------------
      // Field value from ADORecSet read into "FieldValue"
      // -------------------------------------------------
      FieldName := _Fields.FieldName;
      IF FORMAT(ADORecSet.Fields.Item(FieldName).ActualSize) <> FORMAT(0) THEN BEGIN
        // ------------------
        // Type 131 = NUMERIC
        // ------------------
        IF ADORecSet.Fields.Item(FieldName).Type = 131 THEN BEGIN
          IF ISCLEAR(ADOStream) THEN
            CREATE(ADOStream)
          ELSE BEGIN
            CLEAR(ADOStream);
            CREATE(ADOStream);
          END;
          ADOStream.Open;
          ADOStream.WriteText(ADORecSet.Fields.Item(FieldName).Value);
          ADOStream.Position := 0;
          FieldValue := FORMAT(ADOStream.ReadText);
          ADOStream.Close;

          // -------------------
          // Convert date fields
          // -------------------
          IF FieldName IN ['NFT_DAT','NFT_MDAT']
          THEN BEGIN
            DatumText := COPYSTR(FieldValue,7,2) + '.' +
                         COPYSTR(FieldValue,5,2) + '.' +
                         COPYSTR(FieldValue,1,4);
            IF NOT EVALUATE(InputDate,DatumText) THEN
              FRefImport.VALUE := 0D;
            FRefImport.VALUE := InputDate;

          END;
            // ---------------------
            // "Decimale" or INTEGER
            // ---------------------
            //FRefImport.VALUE := COPYSTR(FieldValue,1,FRefImport.LENGTH);
          IF FieldName IN ['NFT_FLO4','NFT_FLO5','NFT_FLO6']
          THEN BEGIN
            EVALUATE(InputDec,FieldValue);
            FRefImport.VALUE := InputDec;
          END;


Allerdings bremst diese Methode das Auslesen doch arg aus.
Vielleicht hat doch noch jemand eine bessere Lösung.

Grüße
Gerhard

Re: feldtyp Numeric

27. Juli 2009 14:59

Hallo Striker,
danke dür deine Lösung, hat bei mir auch funktioniert

mfg Michael