PDA

Ver la Versión Completa : Detectar Tipo De Campo


MaMu
07-02-2009, 20:36:05
Quiero detectar el tipo de campo de una tabla de mySQL, pero esta funcion que hice no me funciona:


function GetTipoCampoSQL(oQry : TZQuery; Index: Integer) : String;
var TipoField: TFieldDef;
begin
TipoField := oQry.FieldDefs.Items[Index];
case TipoField.DataType of
ftUnknown: result := 'ftUnknown';
ftString: result := 'ftString';
ftSmallint: result := 'ftSmallint';
ftInteger: result := 'ftInteger';
ftWord: result := 'ftWord';
ftBoolean: result := 'ftBoolean';
ftFloat: result := 'ftFloat';
ftCurrency: result := 'ftCurrency';
ftBCD: result := 'ftBCD';
ftDate: result := 'ftDate';
ftTime: result := 'ftTime';
ftDateTime: result := 'ftDateTime';
ftBytes: result := 'ftBytes';
ftVarBytes: result := 'ftVarBytes';
ftBlob: result := 'ftBlob';
ftMemo: result := 'ftMemo';
ftGraphic: result := 'ftGraphic';
end;
end;


Cuales son los FieldDef de mySQL ???

Al González
08-02-2009, 02:09:37
¡Hola!

Quiero detectar el tipo de campo de una tabla de mySQL, pero esta funcion que hice no me funciona:...Cuales son los FieldDef de mySQL ???
No dices por qué no te funciona. Tampoco está claro por qué quieres que la función devuelva un String. Pero me he tomado la libertad de modificarla, para usar la propiedad Fields en lugar de FieldDefs, además de que sirva con cualquier conjunto de datos (no sólo TZQuery ;)):

Uses
TypInfo;

Function GetTipoCampo (DataSet :TDataSet; Index :Integer) :String;
Begin
Result := GetEnumName (TypeInfo (TFieldType),
Integer (DataSet.Fields [Index].DataType));
End;

Claro, funcionará siempre y cuando el conjunto de datos ya tenga objetos campo (TField) en su interior.

La propiedad FieldDefs viene heredada desde la clase TDataSet para todos los componentes derivados (conjuntos de datos como TZQuery, TADOTable, TIBDataSet, etc.). Depende de cómo se use el conjunto de datos, la propiedad FieldDefs podría no estar inicializada.

Espero te sirva.

Al González. :)