起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 272|回复: 19

【结贴】判断是否有重复记录。怎么实现?急**

[复制链接]
发表于 2007-12-3 08:59:14 | 显示全部楼层 |阅读模式
有三张表:立项表,生产资质表,合同明细表
要实现每输入一条明细或导入明细时,自动根据立项表检测该条明细中的产品是否经过立项(即立项表中是否已归档)检测该明细中的厂家是否有该产品的生产资质(生产资质表中有两个字段,厂家和产品,如果有厂家和某产品的记录,说明该厂家有生产某产品的生产资质)
我直接用sql的select 等语句写编译出错,想问下这个功能在justep里怎么实现???谢谢
回复

使用道具 举报

发表于 2007-12-3 09:28:58 | 显示全部楼层
其实就是去数据库里查找看有没有重复的记录。
请楼主参考如下代码:(是通过字段 FDept、FYear、FQuarter 来判断是否有重复记录的。 )

Function TGYJSB.WetherExitData(ADepartment,ATableName:string;Aquarter,AYear:integer):boolean;
Const lSql = 'Select count(*) as lCount from %s where FDept=''%s'' and FYear=%s '+
         ' and FQuarter=%s';
var
  lQuery: TQuery;
  lgsid,lMastYear,lquarter:string;
begin
  result := False;
  if (ADepartment = '') or (ATableName = '') or (Aquarter = '')  or (AYear ='') then exit;
  lQuery := TQuery.Create(nil);
  try
    lQuery.ConnectionString := TCommonFunctionLib.GetSMBDBConnectionStr;
    lMastYear :=SysUtils.IntToStr(AYear);
    lquarter :=SysUtils.IntToStr(Aquarter);
    lQuery.Close;
    lQuery.CommandText := SysUtils.Format(lSql,[ATableName,ADepartment,lquarter,lMastYear]);  
    lQuery.Open;
    if lQuery.FieldByName('lCount').AsInteger > 0 then
    begin
      Result := True;
    end;
  finally
    lQuery.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-3 22:04:40 | 显示全部楼层
TCommonFunctionLib要引入哪些资源??
我已经引入公共函数库了
不过编译报错:Undeclared identifier "TCommonFunctionLib"
还有就是数据表名:ATableName 我有张表叫T_JMGL_CPLX,直接把这个名字传入函数后报错:'T_JMGL_CPLX' denotes a 'namespace' where a 'variable' was expected
请问这个是因为???
回复 支持 反对

使用道具 举报

发表于 2007-12-4 08:51:57 | 显示全部楼层
CommonFunctionLib是:
“业务模型\业务系统\办公自动化(OA)\公共资源\公共函数库”
你需要引用这个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 09:03:59 | 显示全部楼层
我在这个平台里  业务系统下没找到办公自动化这个目录。。。
还有直接把表名传入的错误要怎么改?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 09:09:46 | 显示全部楼层
我这个版本里没有办公自动化这个目录。。。
回复 支持 反对

使用道具 举报

发表于 2007-12-4 10:37:41 | 显示全部楼层
啊哦,那你就自己写。
这个是该资源集里的公共函数。

static function TCOMMONFUNCTIONLIB.GetSMBDBConnectionStr: string;
begin
  Result := 'DATABASEURL=' + GetSMBDBConnectionURL;
end;

static function TCOMMONFUNCTIONLIB.GetSMBDBConnectionURL: string;
begin
  Result := 'Biz:\OPERATION\OperationDB.Database';
end;

另:给你的代码是参考的,就是告诉你平台里如何用SQL
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 11:30:40 | 显示全部楼层
请教下2楼:WetherExitData(ADepartment,ATableName:string;Aquarter,AYear:integer):boolean;

lQuery.CommandText := SysUtils.Format(lSql,[ATableName,ADepartment,lquarter,lMastYear]);  
这两句里不是有个ATableName吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-4 11:49:19 | 显示全部楼层
2楼能不能看看附件,我参考你的代码写的。

12.rar

1.07 KB, 下载次数: 36

回复 支持 反对

使用道具 举报

发表于 2007-12-4 11:49:41 | 显示全部楼层
不好意思,漏了一些代码给你。

procedure TGYJSB.DataNavigator1BeforeAction(Sender: TObject; var Accept: Boolean);
Const
  lErrMsg = '该季度的数据已经存在!!!';
Var
  lBJD: TTBJD;
  lYear,lQuarter: integer;
begin
  case (Sender as TBizDataSetAction).ID of
    BizActnConsts.ActionDataSetAppend:
    begin
      lBJD := TTBJD.create(context);
      try
        if lBJD.ShowModal = Business.Forms.Controls.mrOk then
        begin
          lYear := lBJD.DataSetNY.FieldByName('N').AsInteger;
          lQuarter := lBJD.DataSetNY.FieldByName('JD').AsInteger;
          //判断有没有该季度的数据存在
          if WetherExitData(Fgsid,'GYJSBZB',lYear,lQuarter) then
          begin
            jsDialogs.ShowWarning(lErrMsg, '新建数据');
            Accept := False;
            Exit;
          end;
          GraphicTab.Index := 1;
          //GraphicTabChange(nil,1);   提高速度
          dsbMaster.DataSet.Append;
          dsbMaster.DataSet.FieldByName('FYear').AsInteger := lBJD.DataSetNY.FieldByName('N').AsInteger;
          dsbMaster.DataSet.FieldByName('FQuarter').AsInteger := lBJD.DataSetNY.FieldByName('JD').AsInteger;
          dsbMaster.DataSet.FieldByName('LSZD1').AsInteger := 1;
          SetDetailData;
        end;
      finally
        lBJD.Free;
      end;
      Accept := False;
    end;
    BizActnConsts.ActionDataSetSave:
    begin
      dsbMaster.DataSet.edit;
      dsbMaster.DataSet.FieldByName('LSZD1').AsInteger := 0;
      dsbMaster.DataSet.post;
    end;
  end;
end;

在这个里面有 if WetherExitData(Fgsid,'GYJSBZB',lYear,lQuarter) then

'GYJSBZB' 这个就是表名。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 20:39 , Processed in 0.052728 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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