起步软件技术论坛-X3

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

【搞定】locate 问题,用locate判断依然出现重复值[问题]**

[复制链接]
发表于 2007-10-29 16:22:51 | 显示全部楼层 |阅读模式
var sqlstr,xsd,xst,xsh,jhd,jht,jhh:string;
    dwbh,dwqm,dwdh,jsrbh,jsr,dq,bm,ck,rq,djlx,djbh,spbh,spqm,spdw,kmbh,kmqm,dzbj,bz:string;
    spsl,hsj,yszj,ysjs,kpje,wkpje,yhje,fkje,b,s,sum:integer;
    sqlDataSet:TSQLDataSet;
begin
     DataSetBZSJJ1.Active := false;
     xsd:='Select (select DWXX_DWBH from DWXX where DWXX_DWQM=XSDDGMDW) 单位编号,XSDDGMDW 单位名称,(select DWXX_DH from DWXX where DWXX_DWQM=XSDDGMDW) 电话,(Select ZYXX_ZYBH from ZYXX where ZYXX_ZYQM=XSDDJSR) 职员编号,XSDDJSR as 经手人,(select DWXX_DQQM from DWXX where DWXX_DWQM=XSDDGMDW) 地区,XSDDBM as 部门,XSDDFHCK as 仓库,XSDDJHRQ as 日期,'
            +'''销售单'' 单据类型,XSDDDJBH as 编号,a.商品编号 as 商品编号,a.商品全名 as 商品全名,a.商品单位 as 商品单位,'
            +'a.商品数量 as 商品数量,a.商品金额 含税价,(Select KMXX_KMBH from KMXX where KMXX_KMQM=XSDDFKZH) 科目编号,XSDDFKZH 科目全名,case when isnull(XSDDYHHJE,0)-isnull(XSDDFKJE,0)>0 then isnull(XSDDYHHJE,0)-isnull(XSDDFKJE,0) else 0 end 应收增加,'
            +'case when isnull(XSDDYHHJE,0)-isnull(XSDDFKJE,0)<0 then isnull(XSDDYHHJE,0)-isnull(XSDDFKJE,0) else 0 end as 应收减少,a.开票金额 as 开票金额,a.商品金额-a.开票金额 as 未开票金额,a.备注 备注,isnull(XSDDFKJE,0) 付款金额,isnull(XSDDYHJE,0) 优惠金额 '
            +'from XSDDB left join (Select XSDDMXDJBH,XSDDMXSPBH 商品编号,XSDDMXSPQM 商品全名,XSDDMXDW 商品单位,XSDDMXSL 商品数量,XSDDMXJE 商品金额,XSDDMXKPJE 开票金额,XSDDMXBZ 备注 from XSDDMXB) a on(a.XSDDMXDJBH=XSDDDJBH)';

     sqlstr:=xsd;
     DataSetBroker1.DataSet.Open;
     sqlDataSet:= TSQLDataSet.Create(Self);
     sqlDataSet.Database.URL := 'Biz:JXC_GJP_SJK.Database';

     with sqlDataSet do
     begin
          sql.Text:=sqlstr;
          open;
               while not eof do
               begin
                    dwbh:=FieldByName('单位编号').AsString.Trim();
                    dwqm:=FieldByName('单位名称').AsString.Trim();
                    dwdh:=FieldByName('电话').AsString.Trim();
                    jsrbh:=FieldByName('职员编号').AsString.Trim();
                    jsr:=FieldByName('经手人').AsString.Trim();
                    dq:=FieldByName('地区').AsString.Trim();
                    bm:=FieldByName('部门').AsString.Trim();
                    ck:=FieldByName('仓库').AsString.Trim();
                    rq:=FieldByName('日期').AsString.Trim();
                    djlx:=FieldByName('单据类型').AsString.Trim();
                    djbh:=FieldByName('编号').AsString.Trim();
                    spbh:=FieldByName('商品编号').AsString.Trim();
                    spqm:=FieldByName('商品全名').AsString.Trim();
                    spdw:=FieldByName('商品单位').AsString.Trim();
                    spsl:=FieldByName('商品数量').AsInteger;
                    hsj:=FieldByName('含税价').AsInteger;
                    kmbh:=FieldByName('科目编号').AsString.Trim();
                    kmqm:=FieldByName('科目全名').AsString.Trim();
                    yszj:=FieldByName('应收增加').AsInteger;
                    ysjs:=FieldByName('应收减少').AsInteger;
                    kpje:=FieldByName('开票金额').AsInteger;
                    wkpje:=FieldByName('未开票金额').AsInteger;
                    bz:=FieldByName('备注').AsString;
                    fkje:=FieldByName('付款金额').AsInteger;
                    yhje:=FieldByName('优惠金额').AsInteger;
                    if DataSetBroker1.DataSet.Locate('BH',Variants.VarArrayOf([djbh]),[])=false then
                    begin
                       Query1.Close;
                       Query1.ConnectionString:='DATABASEURL=Biz:JXC_GJP_SJK.Database';
                       Query1.CommandText:='insert into WLDZCXB(BH,DWBH,DWMC,DWDH,JSRBH,JSR,DQ,BM,CK,RQ,DJLX,SPBH,SPMC,SPDW,SPSL,HSJ,KMBH,KMQM,YSZJ,YSJS,KPJE,WKPJE,BZ)'
                       +' values('''+djbh+''','''+ dwbh +''','''+ dwqm +''','''+dwdh+''','''+jsrbh+''','''+jsr+''','''+dq+''','''+bm+''','''+ck+''','''+rq+''','''+djlx+''','''+spbh+''','''+spqm+''','''+spdw+''','+SysUtils.IntToStr(spsl)+','+SysUtils.IntToStr(hsj)+',''011'',''库存商品'','+SysUtils.IntToStr(yszj)+','+SysUtils.IntToStr(ysjs)+','+SysUtils.IntToStr(kpje)+','+SysUtils.IntToStr(wkpje)+','''+bz+''')';
                       Query1.Execute;
                    end;
                      if fkje>0 then
                      begin
                         if DataSetBroker1.DataSet.Locate('BH',Variants.VarArrayOf([djbh]),[])=false then
                         begin
                            if yszj>0 then
                            begin
                                 Query1.Close;
                                 Query1.ConnectionString:='DATABASEURL=Biz:JXC_GJP_SJK.Database';
                                 Query1.CommandText:='insert into WLDZCXB(BH,DWBH,DWMC,DWDH,JSRBH,JSR,DQ,BM,CK,RQ,DJLX,KMBH,KMQM,YSZJ,YSJS,BZ)'
                                 +' values('''+djbh+''','''+ dwbh +''','''+ dwqm +''','''+dwdh+''','''+jsrbh+''','''+jsr+''','''+dq+''','''+bm+''','''+ck+''','''+rq+''','''+djlx+''','''+kmbh+''','''+kmqm+''',0,'+SysUtils.IntToStr(fkje)+','''+bz+''')';
                                 Query1.Execute;
                            end;
                            if ysjs>0 then
                            begin
                                 Query1.Close;
                                 Query1.ConnectionString:='DATABASEURL=Biz:JXC_GJP_SJK.Database';
                                 Query1.CommandText:='insert into WLDZCXB(BH,DWBH,DWMC,DWDH,JSRBH,JSR,DQ,BM,CK,RQ,DJLX,KMBH,KMQM,YSZJ,YSJS,BZ)'
                                 +' values('''+djbh+''','''+ dwbh +''','''+ dwqm +''','''+dwdh+''','''+jsrbh+''','''+jsr+''','''+dq+''','''+bm+''','''+ck+''','''+rq+''','''+djlx+''','''+kmbh+''','''+kmqm+''','+SysUtils.IntToStr(fkje)+',0,'''+bz+''')';
                                 Query1.Execute;
                            end;
                         end;
                      end;
                    Next;
               end;
          close;
     end;

1.jpg

153.21 KB, 下载次数: 154

回复

使用道具 举报

发表于 2007-10-29 16:37:47 | 显示全部楼层
不太明白楼主的意思,重复值,跟数据集的locate有啥关系,locate仅仅是根据某个字段的值来定位到符合条件的第一条,并返回True,如果没有,那么返回false
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-29 17:14:34 | 显示全部楼层
我是根据单据编号进行定位,在读到单据编号已经存在时就不执行插入语句,读不到就执行插入语句,但是单据编号明明已经存在于表中了,怎么还是执行插入语句?代码问题?还是locate没用对?我觉得代码应该没错了
回复 支持 反对

使用道具 举报

发表于 2007-10-29 17:22:24 | 显示全部楼层
这就好办了,设置断点跟踪,肯定是逻辑错了哦,
回复 支持 反对

使用道具 举报

发表于 2007-11-2 09:32:55 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-8 15:29:11 | 显示全部楼层
可以结了
回复 支持 反对

使用道具 举报

发表于 2007-11-8 15:48:53 | 显示全部楼层
ok
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-30 06:28 , Processed in 0.054916 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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