Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Access liefert falschen Datentyp

  Alt 5. Mär 2011, 15:21
Ich habe mal zwei Stellen in deinem Code kommentiert.
Eigentlich ist es ganz einfach: du musst nur ftWord genauso behandeln wie ftSmallint und ftInteger.
Delphi-Quellcode:
 for i:= 0 to ADOQueryMain.FieldDefList.Count - 1 do begin
    // Problem ist Field "RefrainNr"
    ShowMessage( 'Field: ' + ADOQueryMain.FieldDefList.FieldDefs[ i ].Name + ', Type: ' + VarToStr( ADOQueryMain.FieldDefList.FieldDefs[ i ].DataType ));
    case ADOQueryMain.FieldDefList.FieldDefs[ i ].DataType of
      ftAutoInc: t:= 'INTEGER PRIMARY KEY';
      ftString: t:= 'VARCHAR( 255 )';
      ftWideString, ftWideMemo: t:= 'TEXT';
      ftSmallint, ftInteger: t:= 'INTEGER';
      // FALSCH - ein Word ist doch auch nur eine Teilmenge von INTEGER
      ftWord: t:= 'VARCHAR( 255 )';
      ftDateTime: t:= 'DATETIME';
      else begin
        t:= '!!unbekannt!!';
        ShowMessage( t );
      end;
....
    for i:= 0 to ADOQueryMain.FieldDefList.Count - 1 do begin
      if i > 0 then begin
        fields:= fields + ', ';
        t:= t + ', ';
      end;
      del:= '';
      // FALSCH - ftWord gehört nicht in die folgende Liste
      if ADOQueryMain.FieldDefList.FieldDefs[ i ].DataType in [ ftString, ftWord, ftWideString, ftWideMemo, ftDateTime ] then begin
        del:= '''';
      end;
      fields:= fields + ADOQueryMain.FieldDefList.FieldDefs[ i ].Name;
      t:= t + del + ADOQueryMain.FieldByName( ADOQueryMain.FieldDefList.FieldDefs[ i ].Name ).AsString + del;
    end;
  Mit Zitat antworten Zitat