在BPL开发框架中(Bpl,EXE,DLL结构,主窗口一个EXE,每个模块一个DLL,开发框架为BPL),用DLL支持具体的数据连接方式(BDE,ADO,DBExpress等等).
当使用ADO时,在DLL中一功能窗体中弹出编辑对话框,数据抽象封装类的实例是在功能窗体中创建的,打开对话框时将该实例赋与对话框以利用封装类的保存方法,但在对话框中保存数据时,严重超时。同样的情况用DBExpress没问题。跟踪到ADOQuery的SQL属性改变事件引起超时,但跟不进该ADODB单元中的SQL的TStrings.OnChange改变事件。诸位有谁遇到类似的问题?
解决问题后奉送上100分

解决方案 »

  1.   

    就是将在功能窗体在创建的数据封装类实例赋与编辑对话框的一属性,并在对话框中调用数据封装类的保存方法。保存时严重超时,经分析是保存时给AdoQuery.SQL属性赋值时,引发AdoQuery.SQL的TStringList.OnChange事件,此事件是在ADODB单元中定义的,无法跟踪。而正是此事件引发超时!!!
    当在窗体中调用数据封装类的保存方法是没有问题,而换成DBExpress连接也不存在此问题!请有类似经验的高手指示一二!!谢谢
      

  2.   

    此事件是在ADODB单元中定义的,无法跟踪。
    ----------------------可以把Use Debug DCUs钩上,来调试VCL的单元。
      

  3.   

    先谢谢Harryfin的指点!
    我追踪到TParameters.InternalRefresh()方法,其中有二个内置方法。
    耗时的指令就在其中的RefreshFromOleDB过程中,跟踪确认是下行代码严重超时
    OLEDBCommand := (Command.CommandObject as ADOCommandConstruction).OLEDBCommand as ICommand;
    奇怪的是在窗体中执行数据抽象类的方法时也会执行到此处,但不会如此耗时。而且只是第一次进对话框时才耗时,第二次就很快了!但关闭窗体后,再打开编辑对话框操作后保存又重现耗时的情景...l...晕中总体感觉ADODB这个单元很多问题,特别是涉及到主从表、汉字时,相同情况使用DBExpree却没有任何异常!!且ADO的速度也差太大!!
      

  4.   

    ADO是MS的,别的再好也难推广。