求一个算法
时间:2011-12-14
来源:互联网
需求:类似客户抽奖,每到一个固定数(N)后取最后一个,比如每5个取1个。1,2,3,4,5取1;6,7,8,9,10取2,。。。。。
实现:
procedure TOutForm.ISok;
var TmpQuery:TADOQuery;
begin
TmpQuery:= TADOQuery.Create(nil);
TmpQuery.Connection:= DataM.ADOCon;
with TmpQuery do
begin
close;
sql.Clear;
sql.Add('select count(*) from CusTable');
try
open;
//SumData为因子,满SumData数后执行
if (fields[0].AsInteger mod SumData=0) then ChangeIsoK
except
exit
end;
end;
end;
procedure TOutForm.ChangeIsoK;
var TmpQuery1,TmpQuery2:TADOQuery;
cusTmp:integer;
xm,dh,kh,qh,rq:string;
begin
TmpQuery1:= TADOQuery.Create(nil);
TmpQuery1.Connection:= DataM.ADOCon;
cusTmp:=0; xm:='';dh:='';kh:='';qh:='';rq:='';
with TmpQuery1 do
begin
close;
sql.Clear;
//取IsOk为0的最后一条弹出
sql.Add('select TOP 1 Cusid,CusName,Phone,CarId,JunNo,SysDate from CusTable where IsOk=0 order by Cusid asc');
try
open;
cusTmp:=fields[0].AsInteger;
xm:= fields[1].AsString;
dh:= fields[2].AsString;
kh:= fields[3].AsString;
qh:= fields[4].AsString;
rq:= fields[5].AsString;
TmpQuery2:= TADOQuery.Create(nil);
TmpQuery2.Connection:= DataM.ADOCon;
with TmpQuery2 do
begin
close;
sql.Clear;
//把弹出的记录isok=1
sql.Add('update CusTable set isok=1,GetDate='''+datetostr(now())+''' where Cusid='+inttostr(cusTmp)+'');
try
ExecSQL;
LuckForm:=TLuckForm.Create(nil);
LuckForm.Label8.Caption:=inttostr(cusTmp); LuckForm.Label9.Caption:=xm; LuckForm.Label10.Caption:=dh;
LuckForm.Label11.Caption:=kh; LuckForm.Label12.Caption:=qh; LuckForm.Label13.Caption:=rq;
LuckForm.ShowModal;
//刷新数据
ALLFalshDate;
except
free
end;
end;
except
exit
end;
end;
//添加数据成功后调用ISok。
问题:没有删除的情况下正常,一旦有删除数据后程序执行异常,比如到6条记录时删除一条,添加第七条记录后就跳出2了。
实现:
procedure TOutForm.ISok;
var TmpQuery:TADOQuery;
begin
TmpQuery:= TADOQuery.Create(nil);
TmpQuery.Connection:= DataM.ADOCon;
with TmpQuery do
begin
close;
sql.Clear;
sql.Add('select count(*) from CusTable');
try
open;
//SumData为因子,满SumData数后执行
if (fields[0].AsInteger mod SumData=0) then ChangeIsoK
except
exit
end;
end;
end;
procedure TOutForm.ChangeIsoK;
var TmpQuery1,TmpQuery2:TADOQuery;
cusTmp:integer;
xm,dh,kh,qh,rq:string;
begin
TmpQuery1:= TADOQuery.Create(nil);
TmpQuery1.Connection:= DataM.ADOCon;
cusTmp:=0; xm:='';dh:='';kh:='';qh:='';rq:='';
with TmpQuery1 do
begin
close;
sql.Clear;
//取IsOk为0的最后一条弹出
sql.Add('select TOP 1 Cusid,CusName,Phone,CarId,JunNo,SysDate from CusTable where IsOk=0 order by Cusid asc');
try
open;
cusTmp:=fields[0].AsInteger;
xm:= fields[1].AsString;
dh:= fields[2].AsString;
kh:= fields[3].AsString;
qh:= fields[4].AsString;
rq:= fields[5].AsString;
TmpQuery2:= TADOQuery.Create(nil);
TmpQuery2.Connection:= DataM.ADOCon;
with TmpQuery2 do
begin
close;
sql.Clear;
//把弹出的记录isok=1
sql.Add('update CusTable set isok=1,GetDate='''+datetostr(now())+''' where Cusid='+inttostr(cusTmp)+'');
try
ExecSQL;
LuckForm:=TLuckForm.Create(nil);
LuckForm.Label8.Caption:=inttostr(cusTmp); LuckForm.Label9.Caption:=xm; LuckForm.Label10.Caption:=dh;
LuckForm.Label11.Caption:=kh; LuckForm.Label12.Caption:=qh; LuckForm.Label13.Caption:=rq;
LuckForm.ShowModal;
//刷新数据
ALLFalshDate;
except
free
end;
end;
except
exit
end;
end;
//添加数据成功后调用ISok。
问题:没有删除的情况下正常,一旦有删除数据后程序执行异常,比如到6条记录时删除一条,添加第七条记录后就跳出2了。
作者: thisisxutao 发布时间: 2011-12-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28