我用delphi访问excel表,其中有一个表名是sheet1,第一次执行下面语句系列时正常,当执行了一个将数据库表保存为excel的函数后(函数名:Save2File,见后面附件),再执行到frmmain.ADODataSet1.Active:=true;时,都是提示数据库引擎找不到对象sheet1$,很郁闷,不知道为什么 
  ...... 
  frmmain.ADODataSet1.Close; 
  frmmain.ADODataSet1.CommandText := 'sheet1$'; 
  frmmain.ADODataSet1.Active:=true; 
  frmmain.ADOCon.Connected:=true; 
  frmmain.DBGrid1.ReadOnly:=true; 
  ...... 附件:将数据库表保存为excel文件的函数(见“TADODataSet组件的郁闷”)
----------------------------------------------------------------------------------------------------------
我找到原因了:
是下面连接串Data Source的路径出了问题,请问,怎样将“Data Source=D:\my_dir\用户清单.XLS”写成相对路径?在连接串里能不能用类似ExtractFilePath(Application.ExeName)的函数?Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\my_dir\用户清单.XLS;Mode=Share Deny None;Extended Properties=Excel 8.0;Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False

解决方案 »

  1.   

    ExtractFilePath(application.exeName)+'用户清单.XLS';你看看这个路径是什么
      

  2.   

    Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(application.exeName)+'用户清单.XLS;Mode=Share Deny...
      

  3.   

    adocon.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\my_dir\用户清单.XLS;'+
    'Mode=Share Deny None;Extended Properties=Excel 8.0;Persist Security Info=False;'+
    'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";'+
    'Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;'+
    'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;'+
    'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;'+
    'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'倒数第二行,即:'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;'+
    这一行怎么会错误?我是从delphi的属性框里拷贝出来的呀
    提示:Missing operator or semicolon
      

  4.   

    var
    connStr: string;
    begin
      connStr:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(application.exeName)+'\用户清单.XLS;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"';
    end;
    这样就可以了