Newsgroup: it.comp.lang.delphi
Titolo: conoscere il type field

Come si può determinare il tipo di campo (text,number, varchar, date, char
ecc....) con un Ttable?
Ciao e Grazie
Gianni

ecc....) con un Ttable?
Un TTable e' un TDataSet e quest'ultimo possiede la
proprieta' FieldDefs (che e' un TFieldDefs), il quale, a sua
volta, ha la proprieta' Count (ereditata da TCollection) e
la proprieta' Items :
property Items[Index: Integer]: TFieldDef; default;
Ogni TFieldDef possiede la proprieta' DataType :
property DataType: TFieldType;
dove TFieldType e' :
type TFieldType = (ftUnknown, ftString, ftSmallint,
ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD,
ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc,
ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle,
ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar,
ftWideString, ftLargeint, ftADT, ftArray, ftReference,
ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface,
ftIDispatch, ftGuid);
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>

Funge!!! Io usavo questa ma mi dava un errore:
if (Table1.DataSetField.Fields[1].DataType=ftString) then
edit4.Text:='questo campo è una stringa';
Poi l'ho sostituita con:
if (Table1.FieldDefs.Items[1].DataType=ftString) then edit4.Text:='questo
campo è una stringa';
e adesso fila che è una meraviglia
Grazie
Ciao
Gianni

Andrea, un ultima cosa:
Se il mio campo è intero autoincrementale il TFieldType come sara?
(ftInteger e ftAutoInc oppure solo ftAutoInc?)
Secondo te si può usare il comando case per determinare il tipo?
Ciao
E scusa se ti stresso
Ciao
Gianni

Secondo te si può usare il comando case per determinare il tipo?
Si'.
TFieldType e' un'enumerazione, ovvero un tipo ordinale.
function DataTypeToStr( ft : TFieldType ) : String ;
begin
  case ft of
       ftUnknown      : Result := 'Unknown' ;
       ftString       : Result := 'String' ;
       ftSmallint     : Result := 'Smallint' ;
       ftInteger      : Result := 'Integer' ;
       ftWord         : Result := 'Word' ;
       ftBoolean      : Result := 'Boolean' ;
       ftFloat        : Result := 'Float' ;
       ftCurrency     : Result := 'Currency' ;
       ftBCD          : Result := 'BCD' ;
       ftDate         : Result := 'Date' ;
       ftTime         : Result := 'Time' ;
       ftDateTime     : Result := 'DateTime' ;
       ftBytes        : Result := 'Bytes' ;
       ftVarBytes     : Result := 'VarBytes' ;
       ftAutoInc      : Result := 'AutoInc' ;
       ftBlob         : Result := 'Blob' ;
       ftMemo         : Result := 'Memo' ;
       ftGraphic      : Result := 'Graphic' ;
       ftFmtMemo      : Result := 'FmtMemo' ;
       ftParadoxOle   : Result := 'ParadoxOle' ;
       ftDBaseOle     : Result := 'DBaseOle' ;
       ftTypedBinary  : Result := 'TypedBinary' ;
       ftCursor       : Result := 'Cursor' ;
       ftFixedChar    : Result := 'FixedChar' ;
       ftWideString   : Result := 'WideString' ;
       ftLargeint     : Result := 'Largeint' ;
       ftADT          : Result := 'ADT' ;
       ftArray        : Result := 'Array' ;
       ftReference    : Result := 'Reference' ;
       ftDataSet      : Result := 'DataSet' ;
       ftOraBlob      : Result := 'OraBlob' ;
       ftOraClob      : Result := 'OraClob' ;
       ftVariant      : Result := 'Variant' ;
       ftInterface    : Result := 'Interface' ;
       ftIDispatch    : Result := 'IDDispatch' ;
       ftGuid         : Result := 'Guid' ;
   end ;
end ;
procedure TForm1.Button1Click(Sender: TObject);
var I : Integer ;
    FName : String ;
    FType : TFieldType ;
begin
  ListBox1.Items.Clear ;
  for I := 0 to Table1.FieldDefs.Count - 1 do
  begin
    FName := Table1.FieldDefs.Items[I].Name ;
    FType := Table1.FieldDefs.Items[I].DataType ;
    ListBox1.Items.Add( Format( '%20s %20s', [FName,
                        DataTypeToStr( FType ) ] ) ) ;
  end ;
end ;

Grazie 1000, come al solito sei stato gentilissimo :-)
Ciao
Gianni

 ecc....) con un Ttable?
E' semplice puoi leggerlo da: Table1.FieldByName('Campo').DataType.
Dovresti trovare tutta la spiegazione nell'help di TField se non
ricordo male.
--
Giuseppe Fraddosio
fradd...@libero.it
fradd...@supereva.it