首先感谢大家对我的支持,上次的提的一个问题如下:我想调用两张EXCEL表,把它们放在同一个工作簿中,然后在ODBC中设置了指向它的EXCEL工作源,但在DELPHI中的table中却看不到这两张表,请问
怎样调用它们。如果要把它们导入ACCESS中才能调用的话,那应该如何调用呢?我用的是officeXP.回复人: lzf1010(深宇) ( ) : 
  使用ADOConnection,选择jet驱动,在Extended Properties里填上Excel 8.0
然后选择文件。把ADOConnection的connected设为true。最后把adotable的tabledirect设为true就OK了。这个方法确实可以,但当我按F9运行的时候却出现错误:Microsoft Jet数据库引擎打不开文件,它已被别的用户以独占方式打开,或没有查看数据的权限。
于是我在EXCEL下把这个表格设置成共享,但还是出错,但用EXCEL打开此表格后再运行,结果却可以了,不知何故?该如何处理?谢谢!!还有一个问题:为什么我用ADOConnection和ADOTable,DataSOurce连接一个数据库,如Animals,F9运行出现错误:Could not convert variant of type(Null) into 
type(String),但在adotable中把字段全设为永久字段后又可以了呢?有劳各位了!!!

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1163/1163274.xml?temp=.209408原来一直用那样的方式先将Excel表中需要的数据倒入到Sql Server 2000中,在读写 ; 后来lzf1010(深宇) 先生给出了更简单的方法,用Table试了一下是可以的 。Could not convert variant of type(Null) into type(String),应该是字段默认为Null产生的,用  IsNull(FieldNull,'ReplaceValue') 转换一下谢谢你对我的信任
      

  2.   

    抱歉,第二个问题也许不是由Null产生,当将Null转换为Integer会出错,但转换为String 没有错的 ,抱歉。 用Table不是很多,没有见过这样的错误,刚才望文生义,抱歉
      

  3.   

    是呀,用vba很麻烦,速度也慢
    我是这样做的,用vba将excel文件令存为txt,或者dbf文件再操作
    这样就简单多了!
      

  4.   

    真的没有办法很好地直接用EXCEL文件吗?
      

  5.   

    不知道是不是欢迎我呢?嘻,来看看的~一般直接用EXCEL文件的方法还是用OLE DB的方法比较多了!我比较喜欢用这种方法!根据你的问题:这个方法确实可以,但当我按F9运行的时候却出现错误:Microsoft Jet数据库引擎打不开文件,它已被别的用户以独占方式打开,或没有查看数据的权限。
    于是我在EXCEL下把这个表格设置成共享,但还是出错,但用EXCEL打开此表格后再运行,结果却可以了,不知何故?该如何处理?谢谢!!------------------
    我想,出现这个问题的原因是因为你直接在DELPHI的环境下按F9编译运行程序,才会出这样的问题的,如果你先BUILD这个项目,接着关闭DELPHI中打开的所有项目;然后,在资源管理器中运行你刚才编译的程序,应该就不会出现这样的问题了。
      原因:DELPHI打开一个工程的时候,你的EXCEL文件也就被打开了一次了!
    还有一个问题:为什么我用ADOConnection和ADOTable,DataSOurce连接一个数据库,如Animals,F9运行出现错误:Could not convert variant of type(Null) into 
    type(String),但在adotable中把字段全设为永久字段后又可以了呢?---------------------这个问题是因为,有些EXCEL单元中的内语句容是空的,如果碰上这样的问题的话,在beforescroll事件中写:
    if fields.fields[0].value = null then
      fields.fields[0].value := '';
    {以上代码没有经过验证,不敢负责是一定对的}
      

  6.   

    Drate(鸟窝里的虫)讲的没错,应该在编译后再运行,不要直接F9来运行。第二个问题你是不是使用了计算字段呢?如果是的话应该在计算前先做判断,类似于Drate(鸟窝里的虫)所写的
      

  7.   

    抱歉,現在才看到,不過我發現問題應該已經解決了.
    對于此類問題應有三種方法.
    1.lzf1010(深宇) 說的那種,(這種很方便)
    2.我上次回答你問題的那種.(也可行.不過要寫一些代碼)
    3.直接用sql2000的導入導出數據功能也是可以的.
    希望你明白了這些做法.
      

  8.   

    验证是否为空最好是这样
    if fields.fields[0].isnull then
      ...
      

  9.   

    接著: lzf1010(深宇) 
    如:
     if (dbgrid1.Fields [7].IsNull) then
      begin
        dbgrid1.Fields[7].Value:=0;
      end;
      

  10.   

    关注:::每次上CSDN都能有新收获,真是开心,上面的解答我试了一下,EXCEL的问题解决了,真的是
    不能按F9运行,但Drate(鸟窝里的虫)回答的第二个问题,有点误会了,那个ANIMALS数据表不是
    EXCEL文件,是DELPHI附带的例表,dBase类型的,我重新试了一下,还是不行--按F9,于是
    便试着保存并运行,--没有关闭DELPHI的工程,结果竟--然--可以了,不知怎么回事?