+ -
当前位置:首页 → 问答吧 → 求一个算法

求一个算法

时间: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了。

作者: thisisxutao   发布时间: 2011-12-14