FR3中创建MEMO后的问题 ( 积分: 30 )

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
var
mymemo:tfrxmemoview;
begin
mymemo := TfrxMemoView.Create(frxReport2.pages);
mymemo.left:=...........
.......................
请问到最后是否需要加上mymemo.free ?
 
在服务器上建一个临时表生成并存储票据号。
 
不知代码如何写?
 
我参考了很多文章,发现普遍的用在POST前写入序号的方法。但我用的是ADOQUERY的语句来写入记录的,最终一句是 ADOQuery1.ExecSQL,那么就没有BEFORE POST事件发生了,是改为ADOTABLE来重写,还是有其它语句或都事件替代的 ?
 
查看了一些资料,自己初步完成的代码如下,刚刚写完,还没有进一步测试,请哪位前辈斧正指点一下:
分为两个表,表一是写入单据号等详细记录的的,表二是供取单据号用的。
begin
datamoduleform.ADOConnection1.begin
Trans;
try

ADOQuery1.Close;
ADOQuery1.SQL.Text := 'Insert Into 表一(单据号,流水号,,姓名,日期)' +' Values (:单据号,:流水号,::姓名,日期)';

ADOQuery1.Parameters.ParamValues['姓名'] := edit1.Text;
ADOQuery1.Parameters.ParamValues['日期'] := date;
ADOQuery6.Close;
ADOQuery6.SQL.Clear;
ADOQuery6.SQL.Add('select 流水号 from 表二 where 日期=:date');
//因为事务一开始就将表一上X锁,那么另一个相同的事务就不能再进行了,也就不怕这地方查询到相同的流水号了。
ADOQuery6.Parameters.ParamValues['date'] :=date;
ADOQuery6.Open;
if ADOQuery6.IsEmpty then
begin
ADOQuery6.Close;
ADOQuery6.SQL.Text:='Insert Into 表二(流水号,日期) Values(:流水号,:日期)';
ADOQuery6.Parameters.ParamValues['流水号'] :=2;
//好象一定要等于2,否则下次取出的还是1
ADOQuery6.Parameters.ParamValues['日期'] :=date;
ADOQuery6.ExecSQL;
ADOQuery1.Parameters.ParamValues['流水号'] := 1;
ADOQuery1.Parameters.ParamValues['挂号单据号'] :=format('%s%.3d',[formatdatetime('yymmdd',date),1]);
end
else
begin
ADOQuery1.Parameters.ParamValues['流水号'] := ADOQuery6.Fields[0].AsInteger;
ADOQuery1.Parameters.ParamValues['挂号单据号'] :=format('%s%.3d',[formatdatetime('yymmdd',date),ADOQuery6.Fields[0].AsInteger]);
ADOQuery6.Close;
ADOQuery6.SQL.Clear;
ADOQuery6.SQL.Add('update 表二 set 流水号=流水号+1 where 日期=:date');//取到后在这里加上1,以便下次再取。
ADOQuery6.Parameters.ParamValues['date'] :=date;
ADOQuery6.ExecSQL;
end;
ADOQuery1.ExecSQL;
datamoduleform.ADOConnection1.CommitTrans
 
哪位高手能就代码指点一二
 
实际运行中多台电脑取号也成功的,不会重复,哪位高手再给点建议,优化一下代码,谢谢!
 
网络版其实是取服务器的系统时间,而不是取本地系统时间。
如:
Select GetDate() // 这是MS-SQL数据库里的系统时间。
 
多人接受答案了。
 
后退
顶部