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]='U' and sysobjects.name = 'tablename'
ORDER BY
sysobjects.[name],
syscolumns.colid
Freue mich sehr über eure Hilfe.
Gruß,
Skorpion81