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

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

csvmm

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi多层开发中,一个登记窗体调用另一个查询窗体返回后,对登记窗体中的方法产生了影响。有进一步的说明!给你我所有的分数!高手请进!急!急!急! (100分)<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的结果集不变化。是何原因,请高手指教!
 
把查询结果的ClientDataSet.Data赋给记录窗体中的ClientDataSet.Data就行了,你可能用的不是同一个ClientDataSet,所以互相不影响。
 
to hyhy:
我可能没说清楚,不是那回事。我在记录窗体中只是创建了查询窗体后退出,不要查询结果,回到记录窗体后,原来记录窗体中使用正常的一个方法就不能正常使用了,那个方法和查询窗体无关,不需要使用查询窗体返回的结果集。
 
这个东西说不清,不知你具体怎么做的.
你要一步步跟踪看看.
 
to jianguobu:
我仔细跟踪过,没能发现问题。郁闷中。。。
 
代码贴出来 大家才可以帮你的
 
如果不是公共变量发生了变化,就是Variant用后没有置空,或对象用后没有释放加置空又重复用了,就是过程变量在开始用的时候也要初始化,否则指针乱指。
例如:
try
.....
finally
stream.free;
stream:=nil;
v1:=unassigned;
end;
一般不稳定都是这种情况。
 
后退
顶部