Einzelnen Beitrag anzeigen

Skorpion81

Registriert seit: 8. Dez 2005
Ort: Hünfelden
2 Beiträge
 
#1

Problem mit .DataType in MSSQL

  Alt 12. Mai 2010, 10:17
Datenbank: MSSQL • Version: 2008 • Zugriff über: SDAC / TMSConnection
Hallo zusammen,

ich habe ein Projekt übernommen, welches normalerweise auf Informix DBs zugreift. Ich möchte dies nun um den Zugriff auf MSSQL DBs erweitern. Im Prinzip möchte ich am Grundgerüst nicht so viel ändern. Also habe ich den "Informix Code" genommen und die Connections und Querys ausgetauscht.
Klappt auch ganz gut, aber hier stosse ich auf ein Problem (direkt erste Zeile):
Delphi-Quellcode:
case FDMSingle.MSDialerQueryAny.FieldByName(FieldList[i]).DataType of

                 ftInteger,
                 ftSmallint,
                 ftWord,
                 ftAutoInc : begin
                                SourceInsert := SourceInsert + IntToStr
                                (FDMSingle.MSDialerQueryAny.FieldByName(FieldList[i]).AsInteger);
                              end;
                 ftLargeint: begin
                                 SourceInsert := SourceInsert + VarToStr4
                                 (FDMSingle.MSDialerQueryAny.FieldByName(FieldList[i]).AsVariant);
                              end;
                  ftString,
                  ftMemo,
                  ftWidestring,
                  ftFixedChar : begin
                                if Fparam.DestDB <> CCSV then
                                  begin
                                     SourceInsert := SourceInsert + '''' + trim(wandlesonderzeichen
                                     (FDMSingle.MSDialerQueryAny.fieldbyname(FieldList[i]).AsString)) + ''''
                                  end
                                  else
                                  begin
                                    SourceInsert := SourceInsert + trim
                                    (FDMSingle.MSDialerQueryAny.fieldbyname(FieldList[i]).AsString);
                                  end;
                              end;
                 ftDate,
                 ftTime,
                 ftDateTime,
                 ftTimeStamp: begin
                                SourceInsert := SourceInsert + makedtstring
                                (FDMSingle.MSDialerQueryAny.FieldByName(FieldList
                                [i]).AsDateTime,Fparam.DestDB);
                              end;
                 ftFloat : begin
                                SourceInsert := SourceInsert + floattostr
                                (FDMSingle.MSDialerQueryAny.fieldbyname(FieldList[i]).AsFloat);
                              end;
                 ftBoolean : begin
                                iF FDMSingle.MSDialerQueryAny.fieldbyname(FieldList[i]).Asboolean = True
                                  then Sourceinsert := sourceinsert + inttostr(1)
                                 else
                                   Sourceinsert := sourceinsert + inttostr(0) ;
                              end;
                 else
                   begin
                     if rglobpara.CompressErrMsg
                       then inc(fieldtypeerror);
                     if fieldtypeerror = 0
                       then wlog(PROCNAME,'ERROR','Unbekannter Feldtyp ' + inttostr(ord
                       (FDMSingle.MSDialerQueryAny.FieldByName(FieldList[i]).DataType)));
                   end;

               end; //case
Und zwar stosse ich bei einer bestimmten Spalte, die das heißt 24HShift, bei der Case Abfrage xxx.DataType auf einen Fehler:
Folgende Fehlermeldung erhalte ich:
Das Feld '[24HShift]' wurde nicht gefunden
Gibt es da ein bekanntes Problem, wenn die Spaltennamen mit Ziffern beginnen? Wie kann ich das umgehen. Ich kann die Datenbankfelder nicht wirklich ändern, da ich die Datenbank vorgegeben bekommen habe.
Es gibt ja noch die Möglichkeit die Datentypen über eine SQL Abfrage herauszubekommen. Aber kennt von euch nicht jemand die Lösung, wie ich es mit der Delphi Funktion xxx. DataType hinbekommen kann.
Über SQL würde ich es dann mit folgendem Query probieren:
SQL-Code:
SELECT
        table_name=sysobjects.name,
        column_name=syscolumns.name,
        datatype=systypes.name,
        length=syscolumns.length
FROM
        sysobjects
            JOIN syscolumns ON sysobjects.[id] = syscolumns.[id]
            JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE
        sysobjects.[xtype]='Uand sysobjects.name = 'tablename'
ORDER BY
        sysobjects.[name],
        syscolumns.colid

Freue mich sehr über eure Hilfe.
Gruß,
Skorpion81
  Mit Zitat antworten Zitat