我的窗体中放置有:
  ADOQuery1、Button1、DataSource1、DBGrid1
并这样建立联接关系:
  DataSource.DateSet:=ADOQuery1;
  DBGrid1.DataSource:=DataSource1;代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
    str,sqlstr,connstr,sheetName,filename:string;
begin
  filename :='C:\Documents and Settings\Sampson\桌面\Book2.xls' ;  //文件名
  sheetName:='sheet1';  //表名  ADOQuery1.Close ;
  ADOQuery1.SQL.Clear ;
  ConnStr :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + FileName + ';Extended Properties=Excel 8.0;Persist Security Info=False';
  ADOQuery1.ConnectionString :=ConnStr ;
  SqlStr :='Select * from ' +'[' +SheetName + '$'+']';
  ADOQuery1.SQL.Add(SqlStr) ;
  ADOQuery1.Prepared:=false ;
  ADOQuery1.Open ;end;当运行程序后,按下Button1
DBGrid1里显没有Excel表中的第一行记录,查看ADOQuery1.Recordset.RecordCount的总行数也比Excel表中的总行数少一行.同时在DBGrid1的字段位置的第一个字段的名称是Excel表中的A1数据,但第二个字段的名称不是Excel表是的A2数据而是显示"F2",究竟这个"F2"是表示什么呢,我也搞不清楚.
并且有时会出现 A1和B1并不是为同一条记录.就这个情况,我想解决的问题是:
  怎样用ADOQuery1完整地读取Excel表中所有数据,当然要包括Excel中表的第一行,并且总行数相等,数据要一行一行地对应,即
A1 B1
A2 B2
A3 B3

解决方案 »

  1.   

    确实不可以,你的第一行,默认的是字段,从第二行开始,才是通过Ado连接你要获取的数据。
    解决方法
    方法1、在Excel的首行再插入一行(该行为对应数据表得字段名)
    方法2、直接连接后表得字段名(通过字段名来获取第一条数据)
    另外:如果你通过其他方式(如sqlserver自带的工具试试)将excel导成table,查看一下,是否也丢了第一行数据?
      

  2.   

    SqlStr :='Select * from ' +'[' +SheetName + '$'+']';//问题出现在这,忘了怎么改了,很抱歉.究竟这个"F2"是表示什么呢,//F2是因为你的这行在Excel里没有数据,所以他自动编了一个字段
      

  3.   

    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="D:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$]这个语句可以读出excel,注意的是他自动把excel第一行当作字段名.
      

  4.   

    或者你可以用OLE的方式打开excel,可以读取到第一行
      

  5.   

    确实不可以,你的第一行,默认的是字段,从第二行开始,才是通过Ado连接你要获取的数据。
    解决方法
    方法1、在Excel的首行再插入一行(该行为对应数据表得字段名)
    方法2、直接连接后表得字段名(通过字段名来获取第一条数据)
    另外:如果你通过其他方式(如sqlserver自带的工具试试)将excel导成table,查看一下,是否也丢了第一行数据?
    正解