需求:类似客户抽奖,每到一个固定数(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了。
解决方案 »
- 这个用Delphi写的 IPAD 界面太强大了..
- 我想学2D的粒子系统,不是3D,哪里有资料
- access表之间导入时数据被改变了...为什么呀?
- 求助!我的这个程序速度非常慢~,帮我分析一下是什么原因~?(内详细~有关字符处理的)
- 有无DBRichEdit的例子,帮忙发一份啊
- 求职的问题
- 在Delphi6下怎样通过ADO动态创建SQL Server 2000中的数据库?
- treeview 節點有text屬性顯示值,有沒有什麼屬性保存值?? data或itemid好像都不對)
- 怎样调用一个非可视组件
- 如何指定路径?绝对送分
- B2C网站的商品类别对应不同属性是什么设计思路了?
- 求救:SQL和单引号的问题。
以5为例
1,2,3,4,5 mod 5=1,2,3,4,0
5条时会计算一次
6,7,8,9,10 mod 5=1,2,3,4,0
10条时会计算2次
但是有个bug插入第六条数据时删除一条数据5此时计数为5又会运算一次,而且因为插入的数据6iosk=0,所以计算成功,数据+1
解决方法是'select count(*) from CusTable' 加上条件 where iosk=0
的 fields[0].AsInteger 数值是否符合要求。
解决方法是'select count(*) from CusTable' 加上条件 where iosk=0
更新的时候不仅把 sql.Add('update CusTable set isok=1,GetDate='''+datetostr(now())+''' where Cusid='+inttostr(cusTmp)+'');
而且把其他 Cusid=0的值也替换掉,比如-1
update CusTable set isok=-1
我另外开贴给你200分
表中有N条数据,给你一个或者多个骰子扔,点数记为t,N mod t=0时,就表示抽中了
则在N条记录中,先升序排序取第1条记录,然后标记isok=1表示抽中了不过楼主的设计似乎不合理
1.抽奖当中是不可能出现有数据录入或者删除的,isok=0的数据小于一定数量时再增加数据(奖券)
2.增加或者删除当中是不能进行抽奖
3.N应该要过滤掉已经抽中的记录(即isok=1)
4.判断中奖条件多些花样,如果是这边抽奖那边添加数据,就不要用这个取记录数做条件啦不过不清楚LZ须求,以上纯属个人理解...
虽然没解决,但从你的方法得到了启示。谢谢了
请到
http://topic.csdn.net/u/20111214/23/ed36d96c-c74d-4fd7-b902-ecec80248439.html?25476
接分