delphi多层开发中,一个登记窗体调用另一个查询窗体返回后,对登记窗体中的方法产生了影响。有进一步的说明!给你我所有的分数!高手请进!HELP ME !!急!

  • 主题发起人 主题发起人 caacwp
  • 开始时间 开始时间
C

caacwp

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi多层开发中,一个登记窗体调用另一个查询窗体返回后,对登记窗体中的方法产生了影响。有进一步的说明!给你我所有的分数!高手请进!HELP ME !!急!急!急!在线等! (200分)<br /> delphi多层开发,使用了corba和ado,有一个记录窗体和一个查询窗体。在记录窗体中有增、删、改、查、存等按钮,其中有2个combobox,使用了combobox1的失去焦点事件,通过调用服务器端的一个方法(下述)来获取combobox2的iterm项。记录窗体中的查询按钮用来调用查询窗体查找要修改的记录,并把结果返回记录窗体。

服务器端的方法:
procedure getinfo(aa)...;
....
sqlstr:='select xx xx from table1 where xxx=aa ';
if adoquery1.active then
adoquery1.active:=false;
adoquery1.sql.clear;
adoquery1.sql.add(sqlstr);
adoquery1.open;
...

客户端的方法:
procedure Tlogform.combobox1exit(sender:Tobject);
...
clientdataset1.close;
server.getinfo(combobox1.text);
clientdataset1.open;
if clientdataset1.recordercount>0 then

...//对comblist2的iterm项进行赋值
查询按钮调用查询窗体:
。。。
try
if not assigned(queryfrm ) then
application.createform(...);
queryfrm.showmodal;
...
finally
...
queryfrm.free;
queryfrm.:=nill;
end;

不调用查询窗体时客户端方法正常,调用查询窗体后使用客户端方法,即使不做任何查询就关闭查询窗体返回,跟踪发现,改变combobox1的text后,服务端的结果集发生变化,但是客户端clientdataset1的结果集不变化。是何原因,请高手指教!
 
你这是垃圾多层!这样设计!采用返回数据集来处理!
 
这样好像不是三层结构,感觉上更像C/S模式!好像并没有中间层似的!
 
你把 combobox1.text 传到中间层有什么意义?直接写入 ClientDataSet1.CommandText 中执行效率更高!也不会出错。
 
感谢大家的关注和评论,但是能帮我先找到错误吗,各位大侠?
 
这种写法的后果是:
  服务器已经更新的底端数据,但客户端并没有请示服务器发送数据的请求,因此不会变
  
 
TO ypluo:
你好,感谢你的光临。那客户端怎样发请求呢?用其REFRESH方法吗?我试过,也不行。
要说没有重新获取数据的请求,好像也不对:不调用查询窗体时,此方法使用正常,也就是说,客户端的数据已经被刷新,这说明使用CLIENTDATASET的OPEN方法应该可以达到刷新的效果。
 
TO kaida:
我认为传一个参数本身比传SQL串占用带宽小、保密性好,当然,在这里这是次要的,我也试过用COMMANDTEXT,但是结果是一样的,照样影响。
 
TO hardware007:
有QQ吗?能告诉我么,在线聊,行吗?
 
我没看明白。你说的是啥呀?
 
看你给出的代码,不像有什么问题,倒是觉得应该是其他某一个不起眼的什么地方的代码出的连带问题,所以只能说点建议方法:
如果是改变combobox1的text后发生的变化,应该从TControl.SetText方法开始继续跟踪,断点设在服务端发生变化的地方,如果能够停在断点,马上察看堆栈中函数调用轨迹。
反查到记录窗体中调用查询窗体的地方。
 
我的QQ号是61619980,我在线守候,欢迎各位大侠在线指导!!!!!!!
 
那是不是两个窗体使用同一个Tprovidiar而引起的
 
后退
顶部