Bonjour,
Je cherche une fonction qui me permettrait de convertir n'importe qu'elle variable en string
Existe-t-il une fonction qui permet de connaitre le type de variable ?
un truc du style :
Code:
1
2 if VarIsInt then ... If VarIsFloat then ...
Version imprimable
Bonjour,
Je cherche une fonction qui me permettrait de convertir n'importe qu'elle variable en string
Existe-t-il une fonction qui permet de connaitre le type de variable ?
un truc du style :
Code:
1
2 if VarIsInt then ... If VarIsFloat then ...
j'ai peur de dire des bêtises, mais le compilo a besoin de connaître le type des variables => pas possible, sauf si tu utilises les variants, de type inconnu à la compilation, et qui contiennent donc une info de type, mais auxquels je ne connais rien !
as-tu réellement besoin de traiter des variables de type inconnu pour les convertir en chaîne ? ou bien serait-ce une simple facilité de codage d'avoir une procédure générique ?
Merci pour ta réponse
En fait je vais chercher des données dans une DB grace à une fonction
qui ressemblerait à ceci :
Et je l'appelle comme ceciCode:
1
2
3
4
5
6
7
8
9 function ShowField(dsField: TDataSource; Field: String): string; begin if IsInt then result := IntToStr(dsField.DataSet.FieldByName(Field).AsInteger); if IsFloat then result := FloatToStr(dsField.DataSet.FieldByName(Field).AsFloat); if IsDate then ... end;
ShowField(monDataSource; monChamps)
Je voulais tout simplement simplifier la fonction
monDataSource.DataSet.FieldByName('monChamps').AsString
Le problème c'est que je ne connais pas à l'avance le format des données stockées dans ma DB...
:salut:
pourquoi n'utilises-tu pas simplement
:koi:Code:dsField.DataSet.FieldByName(Field).AsString;
[EDIT]
sinon pour ce que tu cherches c'est la propriété DataType du TField
Code:dsField.DataSet.FieldByName(Field).DataType;
Le but c'est juste de me simplifier la vie... 8-)
J'ai essayé ceci mais il n'en veut pas...Code:
1
2
3
4
5
6 case dsSuppliers.DataSet.FieldByName('supplier_id').DataType of ftInteger: showmessage(IntToStr(dsSuppliers.DataSet.FieldByName('supplier_id').AsInteger)); ftDate: showmessage(DateToStr(dsSuppliers.DataSet.FieldByName('supplier_id').AsDateTime)); end;
J'ai trouvé en faisant comme ceci :
Merci pour votre aide...Code:
1
2
3
4
5
6
7
8 case AnsiIndexStr(GetEnumName(TypeInfo(TFieldType), Ord(dsField.DataSet.FieldByName(Field).DataType)), ['ftString', 'ftAutoInc', 'ftInteger', 'ftDate']) of 0: result := dsField.DataSet.FieldByName(Field).AsString; 1: result := IntToStr(dsField.DataSet.FieldByName(Field).AsInteger); 2: result := IntToStr(dsField.DataSet.FieldByName(Field).AsInteger); 3: result := DateToStr(dsField.DataSet.FieldByName(Field).AsDateTime); end;
si ton but est de convertir la valeur du champ sous forme de chaine de caractères, je ne comprends pas pourquoi tu n'utilises pas simplement la propriété AsString du TField:
Code:
1
2
3
4 function ShowField(dsField: TDataSource; Field: String): string; begin result := dsField.DataSet.FieldByName(Field).AsString; end;