两个小问题(50分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如果有Form1和Form2,假如把Form2从Auto-Create forms移到
Available forms,在Form1添加button1,
其onclick事件为:
Application.CreateForm(TForm2, Form2);
with Form2 do
try
showmodal;
finally
free;
end;

运行时,显示form1,然后按button1,出现form2,如果关闭form2时,那么
form2会不会从内存释放掉?有没有其它软件来监控form2有没有释放掉?

2、数据库mssql7,假如有dbo.table1,字段为id和no,在form1里添加
Ttable,其CachedUpdate=true。假如有两个用户同时对dbo.table1进行添加
数据,我要防止编号(NO)重复,那我在BeforePost事件:
with query1 do
begin
close;
sql.clear;
sql.add('select count(*) from table1 where no=:no and
id<>:id');
parambyname('no').AsString:=table1no.value;
parambyname('id').AsFloat:=table1id.value;
open;
end;

if query1.fields[0].Asinteger>0 then
begin
messagedlg('编号重复');
abort;
end;

如果是单机是肯定可以判断出编号重复,但如果是在网络上运行,两个用户同时
操作,我这样写语句(beforepost事件),会不会判断出数据重复呢?注意一
点,我这个ttable的Cachedupdate是true。

 
1.添一个按钮,在关闭Form2后调用它,一试便知
2.有更简单的办法:
提交时有重复值会报错,截获并汉化,再调用Refresh,一切OK
 
LeeChange:
1.你说关闭form2后再调用它,如何调用它,写什么语句?
2.我知道重复会报错,我上面写的语句会不会报数据重复?
 
Form2.Show,报错就说明释放了。
 
1.没有释放,除非你在某个地方Free了这个窗体。

2。试试在
procedure TForm1.Table1UpdateError(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin

end;
中将(NO)加1,设置UpdateAction=uaRetry。
 
1.procedure TForm1.FormClose(Sender: TObject; <font color=red>var Action: TCloseAction</font>);

2.编号做成主键
 
1.
form2.onclose;
begin
action:=cafree;
end;
delete:try...finally....


 
to Cakk:
如果我不反No做成主键,还有没有其它的方法?

to 沈前卫:
我的NO不是数字型,是字符型,是写任何字符的。


 
form2 应该是释放了的,几位大虾出面,我都不敢说话了。
 
我认为FORM2已经free了。
 
还讨论什么,试一下不就行了。
 
多人接受答案了。
 
后退
顶部