代码如下:
qry1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+dlgOpen1.FileName+';Extended Properties=Excel 8.0;Persist Security Info=False';
   qry1.SQL.Clear;
   sql := ('select * from OPENROWSET('+quotedstr('MICROSOFT.JET.OLEDB.4.0')+','+quotedstr('Excel 5.0;HDR=YES;Excel 8.0;DATABASE='+dlgOpen1.FileName)+',['+s+'])');
   qry1.SQL.Add(sql);
   qry1.Open;  //这里报错(提示From附近字句语法有错)但是我直接把SQL考到查询分析器中可以查询出excel中的信息
我想要实现将从Excel中查询出数据并保存到数据集中~~~大家帮我看看~有好的思路也可以提供~~谢谢大家了~

解决方案 »

  1.   

    用ADO连接的话,SQL语句这样写就行了
    “select * from [Sheet1$]”
    Sheet1是工作表名,根据实际情况去写。
      

  2.   

    //快速从Excel导入数据:
    procedure TForm1.Button1Click(Sender: TObject);//在数据库中自动生成表qqq
    var s:string;
      ADOConn:TADOConnection;
      aDataSet:TADODataSet;
    begin
      if OpenDialog1.Execute then
      begin
      ADOConn:=TADOConnection.Create(self);
      ADOConn.LoginPrompt:=false;
      ADOConn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
      +OpenDialog1.FileName
      +';Extended Properties=Excel 8.0;Persist Security Info=False';
      aDataSet:=TADODataSet.Create(self);
      aDataSet.Connection:=ADOConn;
      ADOConn.OpenSchema(siTables,EmptyParam,EmptyParam,aDataSet);
      aDataSet.Last;
      s:=aDataSet.Fields.Fields[2].AsString;//获取第一工作表表名
      aDataSet.Close;
      aDataSet.Free;
      ADOConn.Close;
      ADOConn.Free;
      ADOQuery2.Connection:=ADOConnection1;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Append('select * into qqq from OPENROWSET(');//将这个‘qqq’字改为你的数据库中的表名
      ADOQuery2.SQL.Append(quotedstr('MICROSOFT.JET.OLEDB.4.0'));
      ADOQuery2.SQL.Append(','+quotedstr('Excel 5.0;HDR=YES;Excel 8.0;DATABASE='+OpenDialog1.FileName)+',['+s+'])');
      ADOQuery2.ExecSQL;
      showmessage('ok');
      end;
    end;
    procedure TForm1.Button3Click(Sender: TObject);//在数据库中已经存在表qqq
    var s:string;
      ADOConn:TADOConnection;
      aDataSet:TADODataSet;
    begin
      if OpenDialog1.Execute then
      begin
      ADOConn:=TADOConnection.Create(self);
      ADOConn.LoginPrompt:=false;
      ADOConn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
      +OpenDialog1.FileName
      +';Extended Properties=Excel 8.0;Persist Security Info=False';
      aDataSet:=TADODataSet.Create(self);
      aDataSet.Connection:=ADOConn;
      ADOConn.OpenSchema(siTables,EmptyParam,EmptyParam,aDataSet);
      aDataSet.Last;
      s:=aDataSet.Fields.Fields[2].AsString;//获取第一工作表表名
      aDataSet.Close;
      aDataSet.Free;
      ADOConn.Close;
      ADOConn.Free;
      ADOQuery2.Connection:=ADOConnection1;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Append('insert into qqq select * from OPENROWSET(');//将这个‘qqq’字改为你的数据库中的表名
      ADOQuery2.SQL.Append(quotedstr('MICROSOFT.JET.OLEDB.4.0'));
      ADOQuery2.SQL.Append(','+quotedstr('Excel 5.0;HDR=YES;Excel 8.0;DATABASE='+OpenDialog1.FileName)+',['+s+'])');
      ADOQuery2.ExecSQL;
      showmessage('ok');
      end;
    end;
    摘自:http://topic.csdn.net/u/20110409/17/5da85312-084c-4827-837a-acc69b546563.html
      

  3.   

    楼上的我试过只能从数据库中取信息,不能直从Excel中取~我要的是从Excel中取信息过滤后在写入一个新的excel中
      

  4.   


      ADOQuery2.SQL.Append('insert into qqq select * from OPENROWSET(');//将这个‘qqq’字改为你的数据库中的表名
      ADOQuery2.SQL.Append(quotedstr('MICROSOFT.JET.OLEDB.4.0'));
      ADOQuery2.SQL.Append(','+quotedstr('Excel 5.0;HDR=YES;Excel 8.0;DATABASE='+OpenDialog1.FileName)+',['+s+'])');
      ADOQuery2.ExecSQL;
    //这几句修改下九行了,'insert into  OPENROWSET(‘+quotedstr('MICROSOFT.JET.OLEDB.4.0')+','+quotedstr('Excel 5.0;HDR=YES;Excel 8.0;DATABASE='+OpenDialog1.FileName)+',['+s+'])' +'select * from qqq'+
      

  5.   

    楼上的是从数据库表QQQ中查出信息插入到excel中,我要的是从Excel中查然后插入到另一个EXCEL中,不知楼上的明白我的意思没有,我要的不是将数据库中的数据倒到EXCEL中,而是直接将EXCEL中的数据过滤后倒到新的EXCEL中。
      

  6.   

    问题已经解决了~感谢大家的帮助,将sql 赋值为select * from [Sheet1$]的就可以了。