情况如下:
1.首先,我将excel表格导入,命名为tab1
2.其次,将betteradodataset控件与tab1相连,select * from tab1
3.但是,当我再次导入另外的excel的时候,betteradodataset中的fields还是上次哪个excel的字段,
  并没有变化,
代码如下:

解决方案 »

  1.   

    这是导入excel的代码:
    FDN := OpenDialog1.FileName;
        FN := Copy(FDN, LastDelimiter('\', FDN) + 1, Length(FDN) - LastDelimiter('\', FDN));//文件名称
        FN := Copy(FN, 1, Length(FN) - 4); //去掉了后缀 .xls
        FDP := Copy(FDN, 1, LastDelimiter('\', FDN) - 1);//文件所在路径
        
        Reg := TRegistry.Create;
        with Reg do
        begin
          RootKey := HKEY_LOCAL_MACHINE;
          if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
            WriteString(dsn, 'Microsoft Excel-Treiber (*.xls)')
          else
          begin
            Application.MessageBox('ODBC 初始化错误', pChar('Information'), mb_ok +
            MB_ICONEXCLAMATION);
            exit;
          end;
          CloseKey;
          //-----------------------------------------------------------------------
          if OpenKey('Software\ODBC\ODBC.INI\' + dsn, True) then
          begin
            WriteString('Driver', 'C:\WINNT\System32\odbcjt32.dll');
            WriteString('DBQ', FDN);
            WriteString('DefaultDir', FDP);
            WriteInteger('DriverId', 790);
            WriteString('FIL', 'excel 8.0');
            WriteInteger('ReadOnly', 1);
            WriteInteger('SafeTransactions', 0);
            WriteString('UID', '');
          end
          else
          begin
            Application.MessageBox('ODBC 初始化错误,无法添加数据原名称', pChar('Error'),
            mb_ok + MB_ICONEXCLAMATION);
            exit;
          end;
          CloseKey;
          //------------------------------------------------------------------------
          if OpenKey('Software\ODBC\ODBC.INI\' + dsn + '\Engines\Excel', True) then
          begin
            WriteString('ImplicitCommitSync', '');
            WriteInteger('MaxBufferSize', 8);
            WriteInteger('Threads', 3);
            WriteString('UserCommitSync', 'Yes');
            WriteInteger('FirstRowHasNames', 1);
            //Application.MessageBox('用户信息注册成功', pChar('SUCCEED'),
            // mb_ok + mb_iconinformation);
          end
          else
          begin
            Application.MessageBox('ODBC 初始化错误:无法设置驱动程序信息', pChar('Error'), mb_ok +
            MB_ICONEXCLAMATION);
            exit;
          end;
          //------------------------------------------------------------------------
          CloseKey;
          Free;
        end;
      

  2.   

    我在betteradodataset中已经写死:select * from tab1然后在导入完以后,开始提取数据
    with betteradodataset do
    begin
      close;
      open;
    end;
    可是数据总是不能刷新,不知为什么?我想可能是导入excel那段代码的问题,不太明白,请高手函授~不胜感激
      

  3.   

    你是不是说第一次导入没问题,第二次导入后还有第一次的数据?如果是这样,试试在导入第二次时用下面代码
    with betteradodataset do
    begin
      close;
      SQL.Clear;
      SQL.Text := 'select top 0 * from tabl';
      open;
    end;如果还是不行,你就要自己写代码控制了。
      

  4.   

    差不多,
    意思就是:
    1.先导入excel1
    2.后导入excel2,但是当我getfieldnames的时候,显示的所有字段都是excel1中的字段,并没有excel中的字段
    我怀疑是不是注册表没有清干净?
    还是什么原因?busheng