如何知道一个(ClientDataSet内存)表的所有字段的数据类型?(200分)

  • 主题发起人 主题发起人 roc
  • 开始时间 开始时间
R

roc

Unregistered / Unconfirmed
GUEST, unregistred user!
例如有一个表:
字段名 字段的类型
a Integer
b Blob
c Memo
d Graphic
e String
f DataTime
g Float
h Bolean
..........

如何在程序中得到各字段的数据类型名称,并转化为字符串类型。
然后存于列表中

a Integer
b Blob
c Memo
d Graphic
e String
f DataTime
g Float
h Bolean
..........
 
获取字段类型?你不会?
你是什么数据库?如果比较高级一点,应该有这样的system procedure或者system tables
或者有SQL语句可以获得类型
要么就通过TTable控件,也可以得到
 
我已经说了,是TClientDataSet(XML内存表)。我要得到字段类型名称的字符串。
thx:
 
手边没有Delphi,但我记得可以获得字段类型的。你可以试一试下面的方法:
第一步:
你首先可以查看一下Delphi VCL单元中关于FieldType的定义,它是个枚举型;
所以,你可以自己定义一个返回字段类型的函数GetFieldType
function GetFieldType(AfieldType:TFiledType):string;
在这个函数里面可以根据传入的枚举值(由ClientDataSet.Fields.FieldType获得)
来返回其对应的字符串类型。自己实现了该函数后,再执行第二步;
第二步:
var
i:integer;
StrFieldType:string;
begin
for i:=0 to ClientDataSet.FieldCount-1 do
begin
StrFieldType:=GetFieldType(ClientDataSet.Fields.FieldType);
end;
end;
 
楼上说的对
 
WolfXP说的只有一个地方错了,就是代码里面应该是DataType而不是FieldType,不过它确
实是属于TFieldType类,Delphi帮助里面有关于TFieldType的非常详尽的说明。要实现roc
所说的功能,可以按类似于如下的方法:
if (DataSet.Fields[B_Zdh].DataType =ftWideString) or (DataSet.Fields[B_zdh].DataType =ftString)
then //添加一条记录,设其值为'String';
if DataSet.Fields[B_Zdh].DataType = ftFloat then //添加一条记录,设其值为float
如果确定知道数据库里只会用到哪几种类型,就没有必要把每一种可能的类型都一一判断过去。
WolfXP的方法得出的字符串如float类型,其字符串会是'ftFloat',因而可能只好用我这种比较笨的办法了。
 
to:WolfXP
function GetFieldType(AfieldType:TFiledType):string;
在这个函数里面可以根据传入的枚举值(由ClientDataSet.Fields.FieldType获得)
来返回其对应的字符串类型。
可不可以详细点,把函数内容也写上,好吗?
我也知道ClientDataSet.Fields.FieldType是个枚举值,但怎样转换成字符串,
不会是一个一个判断吧。
 
首先在uses单元加入typinfo
然后要得到某个字段名的话,
就这样吧!好吗?
var str:string;
str:=getenumname(typeinfo(tfieldtype),ord(clientdataset.Fields [0].DataType));
showmessage(str);//这句就可以看到类型名了。不过,类型名前还有ft,可以用delete函数把它删除!
 
sorry....
得到是字段类型名,而不是字段名,笔误,见谅!
 
后退
顶部