procedure TForm_guanli.Button4Click(Sender: TObject);
begin
if MessageDlg('您的操作将删除所指定时间内所有记录,建议先导出数据。您确定删除吗?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
with datam.kq_quy do
begin
close;
sql.clear;
sql.add('delete from windchankq');
sql.add('where in_time between :ada and :adz or out_time between :ada and :adz');
parambyname('ada').asDatetime:=datetimepicker1.datetime;
parambyname('adz').asDatetime:=datetimepicker2.datetime;
prepare;
RequestLive:=true;
Active:=true;
edit;
post;
application.MessageBox('数据修改成功!','提示框');
refresh;;end;
end;
end;"error creating cursor handle"大家帮我看看,怎么会有这个错误?请指正。

解决方案 »

  1.   

    看看是否是因为在
    sql.add('delete from windchankq');

    sql.add('where in_time between :ada and :adz or out_time between :ada and :adz');
    之间少了一个空格。其间应加一句:
    sql.add(' ');
      

  2.   

    RequestLive:=true; //不用这个语句!
    Active:=true;
    //当执行Update, Insert语句时,请使用ExecSQL,如:
    Query1.ExecSQL;不要使用Open(Active := True)这样的语句,它的操作结果虽然也成功,但是会出现你碰到那样的信息!!还有,这个问题以前问过N多次~~~
      

  3.   

    忘记打广告了,呵呵:-)CSDN查询助手:
    http://www.csdn.net/Expert/TopicView1.asp?id=1017938
      

  4.   

    ********************************************
    是不是像下面这样,要不要EDIT、POST、REFRESH了
    ********************************************procedure TForm_guanli.Button4Click(Sender: TObject);
    begin
    if MessageDlg('您的操作将删除所指定时间内所有记录,建议先导出数据。您确定删除吗?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
    with datam.kq_quy do
    begin
    close;
    sql.clear;
    sql.add('delete from windchankq');
    sql.add('where in_time between :ada and :adz or out_time between :ada and :adz');
    parambyname('ada').asDatetime:=datetimepicker1.datetime;
    parambyname('adz').asDatetime:=datetimepicker2.datetime;
    prepare;
    Query1.ExecSQL;
    application.MessageBox('数据修改成功!','提示框');
    refresh;;end;
    end;
    end;
      

  5.   

    像你这种情况,无需Prepare(我这是么做的),无需Refresh!!因为你这里的完成的操作仅仅是(为了)删除数据,而非显示给数据感知控件!
      

  6.   

    如下就行了:
    procedure TForm_guanli.Button4Click(Sender: TObject);
    begin
      if MessageDlg('您的操作将删除所指定时间内所有记录,建议先导出数据。您确定删除吗?',
         mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
        with datam.kq_quy do
        begin
          close;
          sql.clear;
          sql.add('delete from windchankq');
          sql.add('where in_time between :ada and :adz or out_timebetween :ada and :adz');
          parambyname('ada').asDatetime:=datetimepicker1.datetime;
          parambyname('adz').asDatetime:=datetimepicker2.datetime;
          prepare;
          ExecSql;//delete操作不能返回结果集!只能用ExecSql
          SQL.Text:='Select * from indchankq';
          Open
          application.MessageBox('数据修改成功!','提示框');
        end;
      end;
    end;
    //用TADOQuery,TQuery时只有当用到有返回结果集的SQL语句时,才能用Open或
    //Active:=True;否则只能用ExecSql方法
      

  7.   

    纵多SQL语句中只有SELECT操作能是返回数据集的,即创建了Cursor(游标), 
    这里应使用OPEN或ACTIVE := TRUE 操作,
    而其它如DELETE,UPDATE,INSERT INTO 等等都不需要返回数据集,
    需要使用EXECSQL操作,如果这种情况下使用OPEN则会出现像你遇到的这种错误提示,所以在你的语句在使用了Active:=true;而后更有EDIT、POST这些操作,当然要出错了!
      

  8.   

    你的Active:=True错了
    你执行的不是Select操作,应该是用ExecSql