如何判断DBGRID中各字段的类型?

clsfox 2002-08-14 02:46:25
用table1.Fields[0].DataType 其中类型有

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, ftTimeStamp, ftFMTBcd);
如果是DB2的VARCHAR字段和CHAR字段如何判断。请高手帮忙!

...全文
392 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
JamesDF 2002-08-28
  • 打赏
  • 举报
回复
Char对应的DataType 是ftFixChar
tomjoule 2002-08-28
  • 打赏
  • 举报
回复
function Tfrmquery.FGetFieldType(FieldName: string): Integer;
begin
case frmmain.Querymain.FieldByName(fieldname).DataType of
ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString:
begin
Result := 1; //字符型 1
end;
ftSmallint, ftInteger, ftWord,
ftAutoInc, ftLargeInt, ftArray:
begin
Result := 2; //整型2
end;
ftFloat, ftCurrency, ftBCD:
begin
Result := 3; //浮点型(含货币型)3
end;
ftDate, ftDateTime:
begin
Result := 4; //日期时间型4
end;
else
begin
Result := 0; //其他未知
end;

end;
end;
wenhong 2002-08-28
  • 打赏
  • 举报
回复
up
ahuige 2002-08-27
  • 打赏
  • 举报
回复
: wangier(冷眉) 兄,你说“上面灰不遛秋提到的,有些疑问:TFileType里根本就没有Varchar和Char,所以也根本判断不出来。”
这句话我不敢苟同,这里的tfiletype只是delphi自己使用的类型,而不是只能识别名字为这些的类型,因为如果tfiletype都已经列出了varchar和char的话,我们还用得着讨论这个问题吗?任何类型,只要delphi能识别,它就会读入,然后用以上的tfiletype中的一个来代表。比如以下就是帮助中带的一个转化的例子
SQL Syntax BDE Logical Paradox dBASE
SMALLINT fldINT16 Short Numeric(6,0)
INTEGER fldINT32 Long Long
DECIMAL fldBCD BCD(32,0) Numeric(20,0)
DECIMAL(7) fldBCD BCD(32,0) Numeric(7,0)
DECIMAL(7,2) fldBCD BCD(32,2) Numeric(7,2)
NUMERIC fldFLOAT Number Double
NUMERIC(7) fldFLOAT Number Double
NUMERIC(7,2) fldFLOAT Number Double
FLOAT fldFLOAT Number Double
FLOAT(7) fldFLOAT Number Double
FLOAT(7,2) fldFLOAT Number Double
CHARACTER(10) fldZSTRING Alpha(10) Character(10)
VARCHAR(10) fldZSTRING Alpha(10) Character(10)
DATE fldDATE Date Date
BOOLEAN fldBOOL Logical Logical
BLOB(1,1) fldstMEMO Memo Memo
BLOB(1,2) fldstBINARY Binary Binary
BLOB(1,3) fldstFMTMEMO Formatted memo Memo
BLOB(1,4) fldstOLEOBJ OLE OLE
BLOB(1,5) fldstGRAPHIC Graphic Binary
TIME fldTIME Time Character(11)
TIMESTAMP fldTIMESTAMP Timestamp Datetime
MONEY fldFLOAT, fldstMONEY Money Double
AUTOINC fldINT32, fldstAUTOINC Autoincrement Autoinc
BYTES fldBYTES Bytes(1) N/A
BYTES(10) fldBYTES Bytes(10) N/A
这里粘得有点错位,你可以在delphi的local sql帮助中找到“查找data type”
jinzhian 2002-08-27
  • 打赏
  • 举报
回复
1.取出字段的長度
2.寫入一個小于此長度的一個數據
3.取出該數據﹐看最后面有沒有空格即可。(有空格表示VARCHAR類型﹐否則表示CHAR類型。)
Ask100 2002-08-25
  • 打赏
  • 举报
回复
收藏
Birch 2002-08-20
  • 打赏
  • 举报
回复
用ADO似乎可以 DataTypeEnum (李维书中有详例)
以下为李维书中代码,仅供参考:
function TfrmMain.GetADOXFieldType(aType : DataTypeEnum): String;
begin
case aType of //
adEmpty : Result := 'adEmpty';
adTinyInt : Result := 'adTinyInt';
adSmallInt : Result := 'adSmallInt';
adInteger : Result := 'adInteger';
adBigInt : Result := 'adBigInt';
adUnsignedTinyInt : Result := 'adUnsignedTinyInt';
adUnsignedSmallInt : Result := 'adUnsignedSmallInt';
adUnsignedInt : Result := 'adUnsignedInt';
adUnsignedBigInt : Result := 'adUnsignedBigInt';
adSingle : Result := 'adSingle';
adDouble : Result := 'adDouble';
adCurrency : Result := 'adCurrency';
adDecimal : Result := 'adDecimal';
adNumeric : Result := 'adNumeric';
adBoolean : Result := 'adBoolean';
adError : Result := 'adError';
adUserDefined : Result := 'adUserDefined';
adVariant : Result := 'adVariant';
adIDispatch : Result := 'adIDispatch';
adIUnknown : Result := 'adIUnknown';
adGUID : Result := 'adGUID';
adDate : Result := 'adDate';
adDBDate : Result := 'adDBDate';
adDBTime : Result := 'adDBTime';
adDBTimeStamp : Result := 'adDBTimeStamp';
adBSTR : Result := 'adBSTR';
//************************************************
adChar : Result := 'adChar';
adVarChar : Result := 'adVarChar';
adLongVarChar : Result := 'adLongVarChar';
adWChar : Result := 'adWChar';
adVarWChar : Result := 'adVarWChar';
adLongVarWChar : Result := 'adLongVarWChar';
//************************************************
adBinary : Result := 'adBinary';
adVarBinary : Result := 'adVarBinary';
adLongVarBinary : Result := 'adLongVarBinary';
adChapter : Result := 'adChapter';
adFileTime : Result := 'adFileTime';
adPropVariant : Result := 'adPropVariant';
adVarNumeric : Result := 'adVarNumeric';
end; // case
end;
巍巍清风 2002-08-19
  • 打赏
  • 举报
回复
上面灰不遛秋提到的,有些疑问:TFileType里根本就没有Varchar和Char,所以也根本判断不出来。
c97164 2002-08-19
  • 打赏
  • 举报
回复
up
zsxuan2000 2002-08-19
  • 打赏
  • 举报
回复
你只要用DBGrid的Columns[i].field.DataType 即可得到每个列的数据类型了
ltmb118 2002-08-19
  • 打赏
  • 举报
回复
我 觉得 windindance(风舞轻扬) ( ) 思路最好,
由数据库服务器判断是最准确的
ahuige 2002-08-17
  • 打赏
  • 举报
回复
如果你只是想区分varchar和char的话,可能除了判断这个以外,还要判断
datasize,因为有可能它们的datatype在dbgrid里是一样的。我这里没有DB2的表,所以无法试。不过我想这两个参数可能已经够了
ahuige 2002-08-17
  • 打赏
  • 举报
回复
难道这个办法不好吗?本来这个东西就是系统之间的约定,你只要一次性的找出来
以后就可以直接用了嘛,比如char字段显示为1,表示ftstring。以后,只要判断出某DB2表的某字段的datatype=ftstring,就表示是char类型的字段了。又不是要你在编程时,到处都去用这个方法来判断。
tangwen829 2002-08-17
  • 打赏
  • 举报
回复
有个最简单的方法:查找系统表 (对ORacle而言DB2我没用过)
select * from col;
crooner 2002-08-16
  • 打赏
  • 举报
回复
没有别的办法了吗
North_beggar 2002-08-15
  • 打赏
  • 举报
回复
up.
ahuige 2002-08-15
  • 打赏
  • 举报
回复
自己写一个函数来判断。如下
function tytostr(ty:tfieldtype):string;
var dt:string;
vdt:variant;
begin
vdt:=ty;
dt:=string(vdt);
result:=dt;
end;
然后找一个含有VARCHAR字段和CHAR字段的DB2表。
用以下语句。
showmessage(tytostr(table1.fieldbyname('varchar字段名').datatype));
showmessage(tytostr(table1.fieldbyname('char字段名').datatype));
从显示的数字就可以看出类型了,不过要注意,数字是以0开头的,所以显示0表示的是第一个ftunknow.显示6表示的是第七个ftfloat,就是你打出的表上的顺序。
ahuige 2002-08-15
  • 打赏
  • 举报
回复
自己写一个函数来判断。如下
function tytostr(ty:tfieldtype):string;
var dt:string;
vdt:variant;
begin
vdt:=ty;
dt:=string(vdt);
result:=dt;
end;
然后找一个含有VARCHAR字段和CHAR字段的DB2表。
用以下语句。
showmessage(tytostr(table1.fieldbyname('varchar字段名').datatype));
showmessage(tytostr(table1.fieldbyname('char字段名').datatype));
从显示的数字就可以看出类型了,不过要注意,数字是以0开头的,所以显示0表示的是第一个ftunknow.显示6表示的是第七个ftfloat,就是你打出的表上的顺序。
Birch 2002-08-15
  • 打赏
  • 举报
回复
up
ddvboy 2002-08-14
  • 打赏
  • 举报
回复
up
加载更多回复(1)

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧