SELECT *
FROM history_data
WHERE (riqi >= '2003-2-1 0:00:00') AND (riqi <= '2003-2-28 23:00:00')
当这个时间段中4000条纪录的时候
在delphi 中怎么就会出错误,在SQL执行的时候是可以查询在delphi中我是这样写着:
with ExportAdoQuery do
begin
  SQL.Clear;
  SQL.Add('select * from history_data');
SQL.add('where riqi>=:time1 and riqi<=:time2'); 
  Parameters.ParamByName('time1').Value :=datetime1;
  Parameters.ParamByName('time2').Value :=datetime2;
  Open;
end;提示的错误是:
.....class EOleException with message 'Data provider or other service returned ad E_FAIL status'各位帮帮忙,帮忙顶一下

解决方案 »

  1.   

    可能是不结果数据集中有多少条数据的问题,怀疑是参数的原因,我以前遇到过参数中有中文字符会有字符集方面的问题。
    你改为直接拼SQL语句,不要用参数试试with ExportAdoQuery do
    begin
      SQL.Clear;
      SQL.Add('select * from history_data where riqi >= ' 
        + QuotedStr(datetime1) + 'and riqi <= ' + QuotedStr(datetime2));
      Open;
    end;
      

  2.   

    补充:
    少了一个空格with ExportAdoQuery do
    begin
      SQL.Clear;
      SQL.Add('select * from history_data where riqi >= ' 
        + QuotedStr(datetime1) + 'and riqi <= ' + QuotedStr(datetime2));
      Open;
    end;
      

  3.   

    如果樓主的Datetime1為日期型的話,那麼需要改成如下:
    with ExportAdoQuery do
    begin
      SQL.Text := 'select * from history_data where riqi >= ' 
        + QuotedStr(Formatdatetime('yyyy-hh-mm HH:ss:MM',datetime1)) + 'and riqi <= ' + QuotedStr(Formatdatetime('yyyy-hh-mm HH:ss:MM',datetime2));
      Open;
    end;
      

  4.   

    tjianliang(乡关何处) 谢谢你
    问题是:
    我数据量少的时候就不会出现错误
    在这个时间段我查询1000多条数据就不会出现错误的
      

  5.   

    不错 才怪你对基本SQL语句都不理解原因在 时间字段上  riqi >= '2003-2-1 0:00:00'必须把时间格式转换
      

  6.   

    with ExportAdoQuery do
    begin
      SQL.Clear;
      SQL.Add('select * from history_data');
    SQL.add('where riqi>='+#39+':time1'+#39+' and riqi<='+#39+':time2'+#39); 
      Parameters.ParamByName('time1').Value :=datetimetostr(datetime1);
      Parameters.ParamByName('time2').Value :=datetimetostr(datetime2);
      Open;
    end;
      

  7.   

    to: spinfollj(spinfollj)   datetime1,datetime2:String; 
       datetime1:=datetostr(datetimepicker1.Date)+' '+timetostr(datetimepicker3.time);
       datetime2:=datetostr(datetimepicker2.Date)+' '+timetostr(datetimepicker4.time);那为什么我查询数据纪录在3千多都没有出现错误!
      

  8.   

    to: ltysunde(@ 为要饭而....呐喊 @) 试了,通不过去
      

  9.   

    你为什么不用between呢,这样有现成的不用
      

  10.   

    同情楼主,我目前也是遇到同样的问题;查询方式和楼主一样,当用同样的方法对字段较少表查询是没错,但当对字段较多的表查询时,Query1.RecordCount就为-1???问题还没解决!!
    我个人认为应该不是与字段的多少有关,不过我的是数据库里的varchar型与string型匹配来查询.....
      

  11.   

    with ExportAdoQuery do
    begin
      SQL.Clear;
      SQL.Add('select * from history_data');
    SQL.add('where riqi>=+'''+time1+''' and riqi<='''+time2+''')'; 
      Parameters.ParamByName('time1').Value :=datetime1;
      Parameters.ParamByName('time2').Value :=datetime2;
      Open;
    end;时间加上分号就行了。
      

  12.   

    直接拼SQL语句,传给ExportAdoQuery.sql,跟一下你的sql 是不是有问题。4000条记录不算多,本人还查过10000多条的。 
    var 
     sqlStr:string;
    ....with ExportAdoQuery do
    begin
      Close;
      SQL.Clear;
      sqlStr:=' select * from history_data where riqi>=%S and riqi<=%S '
      sqlStr:=Format(sqlStr,[datetime1,datetime2])
      SQL.Add(SqlStr); 
      try
      Open;
      except
        ...
      end;
    end;