AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit .DataType in MSSQL
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit .DataType in MSSQL

Ein Thema von Skorpion81 · begonnen am 12. Mai 2010 · letzter Beitrag vom 12. Mai 2010
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz