大家好,我使用ADO连接EXCEL表,Extended Properties=excel 8.0,单位计算机用的是WIN2000 FAMILY SERVER,连接已打开,就跳入内存,可在家里用的是WIN98,就没有这种现象,我测试了一下EXCEL的版本就是8.0,虽然我用的是OFFICE97的迷你版,家里用的是OFFICE97,不过我想好像于你用的EXCEL没有什么关系,驱动DELPHI应该自带。不知道什么原因,请高手解答
另外我也这样试过,用来的EXCEL文件使用EXCEL2000做的,但是不是在家里,也不是在单位的计算机上作的,别人给的,不过我把它的内容复制过来,连接复制后的文件,就不会跳到内存。谢谢回答

解决方案 »

  1.   

    procedure TFrmMain.ODBCReg(ODBCName:String);
    var
      RegODBC:TRegistry;
      RegDriver:TRegistry;
      bData:array [0..0] of byte;
      DataPath,DataDriver:String;
    begin
      //1、读取ODBC信息
      DataPath:=ExtractFilePath(ParamStr(0));
      RegDriver:=TRegistry.Create;
      try
         RegDriver.RootKey:=HKEY_LOCAL_MACHINE;
         if RegDriver.KeyExists('Software\ODBC\ODBCINST.INI\Microsoft Excel Driver (*.xls)') then
         begin
           RegDriver.OpenKey('Software\ODBC\ODBCINST.INI\Driver do Microsoft Excel(*.xls)',True);
           DataDriver:=RegDriver.ReadString('Driver');
         end;
         RegDriver.CloseKey;
         RegDriver.Free;
         Inherited;
      except
         ShowMessage(rsNotExcelProgram);
      end;
      //2、写ODBC
      RegODBC:=TRegistry.Create;
      With RegODBC do
      begin
        try
          RootKey:=HKEY_LOCAL_MACHINE;
          if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
             WriteString(ODBCName,'Microsoft Excel Driver (*.xls)')
          else
          begin
            ShowMessage('增加ODBC数据源失败');
            Exit;
          end;
          CloseKey;      //配置ODBC 写入DSN配置信息
          if OpenKey('SoftWare\ODBC\ODBC.INI\'+ODBCName,True) then
          begin
              WriteString( 'DBQ', Edit1.Text);//数据库目录定为程序运行目录下的DATABASE目录
              WriteString( 'Description',rsODBCDesc );//数据源描述
              WriteString( 'Driver', DataDriver );//驱动程序DLL文件由注册表取得已经安装的access数据库驱动路径
              WriteInteger( 'DriverId', 790);//驱动程序标识
              WriteString( 'FIL', 'excel 8.0;' );//Filter依据
              WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
              WriteString( 'UID', '' );//用户名称
              bData[0] := 0;
              WriteBinaryData( 'Exclusive', bData, 1 );//非独占方式
              WriteBinaryData( 'ReadOnly', bData, 1 );
          end                              
          else
          begin
            ShowMessage('增加ODBC数据源失败');
            Exit;
          end;
          CloseKey;
          //写入DSN数据库引擎配置信息
          if OpenKey('SoftWare\ODBC\ODBC.INI\'+ODBCName+'\Engines\Excel',True) then
          begin
            WriteString( 'FirstRowHasNames', '01' );
            WriteString( 'ImplicitCommitSync', '' );
            WriteInteger( 'MaxScanRows',08);//缓冲区大小
            WriteInteger( 'Threads', 3 );//支持的线程数目
            WriteString( 'UserCommitSync', 'Yes' );
          end
          else
          begin
            ShowMessage('增加ODBC数据源失败');
            Exit;
          end;
        finally
          CloseKey;
          ShowMessage('ODBC 添加成功');
          Free;
        end;
      end;
    end;
      

  2.   

    我的这个帖子里有一点内容希望对你有帮助
    http://expert.csdn.net/Expert/topic/2870/2870197.xml?temp=.3623621
    也诚心的希望你能帮我解答这个问题 
    谢谢
      

  3.   

    adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\a.xls;Extended Properties=excel 8.0;Persist Security Info=False';