起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 123|回复: 6

【搞定】数据库有重复数据。急!急!急!**

[复制链接]
发表于 2007-8-28 09:17:07 | 显示全部楼层 |阅读模式
数据库一天里有两条数据。
       DataSetLRLSSJJ.First;
        while not DataSetLRLSSJJ.Eof do
        begin // SCTJ_ZBDATA.ZBBH, SCTJ_ZBDATA.ZBSZ, SCTJ_ZBDATA.SJSJ
          //指标数据  zbsj  存在   编辑   不存在  追加
          if  DataSetBZSJJ1.Locate('ZBBH', DataSetLRLSSJJ.FieldByName('ZBBH').Asinteger , [TLocateOption.loCaseInsensitive]) then
              DataSetBZSJJ1.Edit
          else
              DataSetBZSJJ1.Append;
           DataSetBZSJJ1.FieldByName('ZBBH').AsInteger:=DataSetLRLSSJJ.FieldByName('ZBBH').Asinteger;
           DataSetBZSJJ1.FieldByName('ZBSZ').AsFloat:=DataSetLRLSSJJ.FieldByName('zbsj').AsFloat;
          DataSetBZSJJ1.FieldByName('SJSJ').AsString:= FormatDateTime('YYYY-MM-DD',sjsj);

          DataSetLRLSSJJ.Next;
        end;
        //提交数据
        DataSetBZSJJ1.ApplyUpdates;
问题在哪里? 如何避免。
回复

使用道具 举报

发表于 2007-8-28 09:49:38 | 显示全部楼层
if  DataSetBZSJJ1.Locate('ZBBH', DataSetLRLSSJJ.FieldByName('ZBBH').Asinteger , [TLocateOption.loCaseInsensitive]) then

这一句应该限制了如果有zbbh,就不会增加数据。
Locate是本地查询,可能有多个用户在同时登录,并录这几个指标。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-28 09:54:17 | 显示全部楼层
对,那应该如何解决?
回复 支持 反对

使用道具 举报

发表于 2007-8-28 10:02:25 | 显示全部楼层
一个是你制度上控制。
另一个,你尝试下  注销那句判断,让提交时每次都重新打开数据表。
//提交或者更新数据
function TJBSJLRJM.UpLoadData(CJBH:Integer;sjsj:double):boolean;
begin
  //   if not DataSetBZSJJ1.Active then    注销这句
        OpenZBData(CJBH,sjsj);
     result:=false;
     try
       DataSetLRLSSJJ.First;
        while not DataSetLRLSSJJ.Eof do
        begin // SCTJ_ZBDATA.ZBBH, SCTJ_ZBDATA.ZBSZ, SCTJ_ZBDATA.SJSJ
          //指标数据  zbsj  存在   编辑   不存在  追加
          if  DataSetBZSJJ1.Locate('ZBBH', DataSetLRLSSJJ.FieldByName('ZBBH').Asinteger , [TLocateOption.loCaseInsensitive]) then
              DataSetBZSJJ1.Edit
          else
              DataSetBZSJJ1.Append;
           DataSetBZSJJ1.FieldByName('ZBBH').AsInteger:=DataSetLRLSSJJ.FieldByName('ZBBH').Asinteger;
           DataSetBZSJJ1.FieldByName('ZBSZ').AsFloat:=DataSetLRLSSJJ.FieldByName('zbsj').AsFloat;
          DataSetBZSJJ1.FieldByName('SJSJ').AsString:= FormatDateTime('YYYY-MM-DD',sjsj);

          DataSetLRLSSJJ.Next;
        end;
        //提交数据
        DataSetBZSJJ1.ApplyUpdates;
        result:=true;
     except
     end;
     DataSetBZSJJ1.Close;
end;
回复 支持 反对

使用道具 举报

发表于 2007-8-28 10:03:27 | 显示全部楼层
你用2台机器用一个客户登录测试一下。看看能不能满足需求。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-28 11:20:55 | 显示全部楼层
可以了,谢了
回复 支持 反对

使用道具 举报

发表于 2007-8-28 15:24:23 | 显示全部楼层
ok!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-15 13:05 , Processed in 0.036463 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表