过程如下:
.......
打开程序,第一次对销售单,进行结算:
1.利用adoStoredPorc执行一个存储过程getDh,返回销售单的销售单号;
2.询问用户是否打印:if messagebox('....')=idyes then print;//速度很快,立刻就弹出此对话框;
3.利用adoquery执行insert操作把销售单所有数据插入到数据库中.
4.结算过程完成.
不退出程序,接着开第二张销售单(所有数据均完全相同),进行结算:
1.利用adoStoredPorc执行一个存储过程getDh,返回销售单的销售单号;
////////////////////////////问题出现了////////////////////////
2.询问用户是否打印:if messagebox('....')=idyes then print;//至少要4秒以后,才会弹出此对话框,这是为什么?
///////////////////////////////////////////////////////////////
3.利用adoquery执行insert操作把销售单所有数据插入到数据库中.
4.结算过程完成.究竟是sql在后台做了什么,为什么第二次调用的时候,同样的代码速度就慢了很多呢?

解决方案 »

  1.   

    这个存储过程不涉及数据库表,因为他要返回的是一个单号,在表中查找该单号是否被使用,并不涉及什么表和索引,所以我也考虑为什么?考虑是sql在后台执行,感觉就是第二次执行速度慢很多.搞不清楚.
      

  2.   

    我知道原因了问题处在adoStoredProc这个控件上,他两次执行同样代码,居然速度不同?第二次执行的时间明显比第一次长,我改变了一些参数,还是没有办法解决,哪位知道如何解决?
      

  3.   

    存储过程是不是已经编译过了?另外,检查一下数据库服务器的LOG信息,看看在两次调用时有什么不同。
      

  4.   

    嗯,打开SQL的Profiler(其中会记录执行时间)
      

  5.   

    你的环境描述很含糊,应该清楚些:
    1、存储过程涉及的表和关系;
    2、存储过程的语句;
    3、DELPHI的代码;
    我们才可以给你找出问题。
    也许,是你的数据库设计的时候出的问题,或是表记录被使用占用,造成需要等待。
      

  6.   

    分析了一下,应该不是你的数据库问题:1.利用adoStoredPorc执行一个存储过程getDh,返回销售单的销售单号; 
    ////////////////////////////问题出现了//////////////////////// 
    2.询问用户是否打印:if messagebox('....')=idyes then print;//至少要4秒以后,才会弹出此对话框,这是为什么? 
    /////////////////////////////////////////////////////////////// 
    3.利用adoquery执行insert操作把销售单所有数据插入到数据库中. 
    4.结算过程完成. *************************
    你变慢的时候应该是已经取出了数据.所以与数据库无关,那么唯一的可能就是你的打印模块了,不知你是怎么处理的,若是直接print,那么就是你的打印机在你第一次发出指令后,打印机还在处理中,你的第二次打印指令已经发出,此时你的程序就出现了一个等待4秒,这几秒是被打印机吃掉了.
    建议你先把打印语句注释掉再测试一下
      

  7.   

    同一语句在SQL中执行多次,理论上第一次执行的时间应该最长,后面应该会更短.
      

  8.   

    理论上应该是一慢二快才对的,因为第一次执行完后,SQL SERVER有缓存