我也用可是很快啊不是delphi   的问题吧。

解决方案 »

  1.   

    是不是他刷新控件去了,试试disablecontrols
      

  2.   

    不会呀,我们的数据库里有40多万条纪录,只要处理好索引以及SQL语句,速度很快的呀
    把代码paste上
      

  3.   

    首先要认清不是SQL语句慢,我想非常有可能你的数据库连接有问题,时间都花在连接数据库的过程中了,你是通过BDE连接的还是通过ADO或是其他方法?
      

  4.   

    No that,I used delphi's query long time,no such slowly!
      

  5.   

    问题出现的可能很多,但有一点,肯定不是DELPHI的问题!
      

  6.   

    你的query中的SQL语句是什么?
      

  7.   

    我知道是我的问题。决非delphi的问题。我是通过bde连接数据库的,代码如下:
    procedure Tdelchargedata.Button1Click(Sender: TObject);
    begin
        if maskedit1.text<>'' then
        begin
        query1.close;
        query1.sql.Clear;
        query1.sql.Add('delete * from 收费记录 where 截止日期<:datatime');
        query1.Params[0].asstring:=maskedit1.Text;
        if messagedlg('你确信要删除这些数据,它们将是不可恢复的!',mtconfirmation,
           [mbyes,mbno],0)=mryes then
        begin
        query1.prepare;
        query1.open;
        query1.Active:=true;
        end;
        end
        else
        showmessage('你不能输入空的时间呀!');
        end;
    一执行就出现sql的光标,然后程序就死了。最可气的是,最后出现了:.....error creating cursor handle....但此时数据库的数据却已经删除了。不知道为什么提示有此错误。还请各位帮我分析分析。
      
      

  8.   

    错误:
      query1.prepare;
        query1.open;           //这有问题
        query1.Active:=true;   //使用Execute
        end;
    原因:
      delete 是无结果集语句,可是你使用Open 方法,却
    是要一个结果集的,这是就无法定位游标了(服务器游标或者客户端游标都不行)其实,你只要看一看帮助就行了:
    DescriptionCall ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).
      

  9.   

    但是我改成了execsql,可是和open的结果是一样的呀
      

  10.   

    procedure Tdelchargedata.Button1Click(Sender: TObject);
    begin
        if maskedit1.text<>'' then
        begin
        query1.close;
        query1.sql.Clear;
        query1.sql.Add('delete * from 收费记录 where 截止日期<:datatime');
        query1.Params[0].asstring:=maskedit1.Text;
        if messagedlg('你确信要删除这些数据,它们将是不可恢复的!',mtconfirmation,
          [mbyes,mbno],0)=mryes then
        begin
        query1.exesql;
        end;
        end
        else
        showmessage('你不能输入空的时间呀!');
        end;另外database要建索引
      

  11.   

    laza的没错。
    1。不要将数据库OPEN 或ACTIVE:=TRUE;
    2。要用QUERY1。EXESQL,不是query1.open
    3.如果用PREPARE,执行好以后再使用UNPREPARE
      

  12.   

    你的后台是不是用的SQL7,有可能是有其他的用户LOCK了几条数据。
      

  13.   

    你的后台是不是用的SQL7,有可能是有其他的用户LOCK了几条数据。
      

  14.   

    我是用bde连接的access数据库。记录大约有11万条,就出现了以上问题。但要是只有1000条的就会很快。看来还是delphi的问题吧!
      

  15.   

    你在QUERY中调用一个存储过程试一试。
      

  16.   

    我在单位用Unix&informix的时候就遇见了这个问题加了索引后就正常了!
      

  17.   

    但是用select时虽然慢,但还是可以忍受的。可是delete实在是无法忍受的。不知道为什么。难道delete和select在速度上有那么大区别吗?
      

  18.   

    去掉query1.prepare试试,应该会快一点吧
      

  19.   

    laza正确,有返回记录的用Open,否则用ExecSql