代码如下://ado_excel是一个TADODATASET对象,通过它直接访问excel表。
//ado_userdata也是一个TADODATASET对象,通过它访问access数据库,字段'num'是字符型
if dm.ado_excel['主机编号']<>null then
  dm.ado_userdata['num']:=dm.ado_excel['主机编号'];现在问题是:当excel表的'主机编号'列的单元格的数据全是数字时,它会当成是数字型。结果
dm.ado_userdata['num']得不到值。所以我想能不能得到 dm.ado_excel['主机编号']的数据类型?如下:if dm.ado_excel['主机编号'] is 数字型 then
 dm.ado_userdata['num']:=inttostr(dm.ado_excel['主机编号'])
else
 dm.ado_userdata['num']:=dm.ado_excel['主机编号'];这样就不会有数据丢失。请问,如何得到变量的类型?或者有更好的方法?

解决方案 »

  1.   

    if dm.ado_excel.FieldByName('主机编号') is TNumericField then

    if dm.ado_excel.FieldByName('主机编号').FieldType in [ftBCD, ftNumber, ftInteger, ftFloat, ftLongInt, ftSmallInt] then ...
      

  2.   

    TO: ssq237712(流亡帅哥)大哥马上就要带星了吧,到时候记着给兄弟们散分哪!!
      

  3.   

    to  ssq237712(流亡帅哥) :你说的两种方法我试了都不行。
    第一种:
    if dm.ado_excel['主机编号'] is TNumericField then出现的错误是:
    [Error] : Operator not applicable to this operand type第二种:
    if (dm.ado_excel['主机编号'].fieldtype) in [ftInteger,ftSmallInt] then出现的错误是:
    [Error] : Incompatible types: 'Variant' and 'TFieldType'
      

  4.   

    用下面的判断语句吧!
    if (dm.ado_excel['主机编号'].fieldtype = ftInteger) or 
       (dm.ado_excel['主机编号'].fieldtype = ftSmallInt) then
      

  5.   

    哦写错了,是DataType
    if dm.ado_excel.FieldByName('主机编号').Datatype in [ftInteger,ftSmallInt] then
      

  6.   

    to  ssq237712(流亡帅哥) :我试过了。你给的代码可以执行,但还是不能实现我要的功能。奇怪的是,因为excel表中的'主机编号'列的单元格数据有的是字符型,有的是数字型,结果是,有时
    dm.ado_excel['主机编号']会把该列的全部值当成是字符型,这时数字型的数据就会全部丢失,没有赋给
    dm.ado_userdata['num'];当dm.ado_excel['主机编号']把列当成数字型时,字符型的数据又会全部丢失。
    而至于什么时候当成字符型,什么时候当成数字型,我还没弄清楚。
      

  7.   

    这样写试试:
    dm.ado_userdata.FieldByName('num').AsString:=dm.ado_excel.FieldByName('主机编号').AsString;
    最好用ADOQuery控件取代ADODataSet。ADODataSet经常会出现一些莫名其妙的问题,或许是我不太会用。
    :)
      

  8.   

    感谢各位的支持,特别是ssq237712(流亡帅哥)。问题解决了。