起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1972|回复: 55

【结贴】数据集添加,奇怪?**

[复制链接]
发表于 2008-5-28 11:05:39 | 显示全部楼层 |阅读模式
DataNavigatorBeforeAction 事件内:
点击保存时,调用
DataSetBroker1.DataSet.ApplyUpdates();  

然后在点击添加时
再点击 保存
提示 违法唯一性约束
回复

使用道具 举报

发表于 2008-5-28 11:11:06 | 显示全部楼层
你提交的数据违反了唯一性定义:  检查一下
1.可能是数据集属性设了唯一性约束
2.数据字段属性设置了是否唯一
回复 支持 反对

使用道具 举报

发表于 2008-5-28 11:12:02 | 显示全部楼层
字段主健的值重复
或者没有付值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 11:13:59 | 显示全部楼层
该字段是自动创建GUID的
是不是和流程有关呢?
回复 支持 反对

使用道具 举报

发表于 2008-5-28 11:16:32 | 显示全部楼层
先按二楼检查一下,看除了GUID字段,其它字段是否也定义了唯一
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 11:17:52 | 显示全部楼层
错误消息描述直接定位到这个主键上的
其他字段没有这个约定。

snap.jpg

6.08 KB, 下载次数: 274

回复 支持 反对

使用道具 举报

发表于 2008-5-28 11:26:48 | 显示全部楼层
是不是提交了两次啊?
先去掉DataSetBroker1.DataSet.ApplyUpdates();  试一下,保存后看表中是否有新数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 11:31:16 | 显示全部楼层
procedure TMAINFORM.DataNavigatorBeforeAction(Sender: TObject; var Accept: Boolean);
var
  sValue :string;
  vProc:TStoredProcDataSet;
begin
  //保存
  ToolButton1.Enabled := false;
  if(BizActnConsts.ActionDataSetSave = TBizDataSetAction(Sender).ID) then
  begin
     Accept := false;

     DataSetBroker1.DataSet.UpdateRecord();

//必填字段 判断
     sValue := DataSetBroker1.DataSet.FieldByName('ZWNR').Text;
     if(sValue.Length = 0)then
     begin
       JsDialogs.ShowMsg('信访内容必须填写!','提示');
       exit;
     end;

     sValue := DataSetBroker1.DataSet.FieldByName('ZWMC').AsString;
     if(sValue.Length = 0)then
     begin
       JsDialogs.ShowMsg('信访名称必须填写!','提示');
       exit;
     end;

     //保存
     if(jsDialogs.ConfirmBox('您确认保存吗?', '保存', 2)) then
     begin
       ToolButton1.Enabled := true;
       DataSetBroker1.DataSet.FieldByName('ZT').AsString := '新';

       DataSetBroker1.DataSet.ApplyUpdates();

       if(DataSetBroker1.DataSet.State = TDataSetState.dsBrowse ) then
       begin
           JsDialogs.ShowMsg('保存成功!','保存');
       end;
     end;
  end;
  //删除
  if(BizActnConsts.ActionDataSetDelete = TBizDataSetAction(Sender).ID) then
  begin
      Accept := false;
      if(jsDialogs.ConfirmBox('您确认删除当前数据吗?', '删除', 2)) then
      begin
         Accept := true;
         //没有提交就删除了
         vProc := TStoredProcDataSet.Create(Self);
         try
            vProc.ConnectionString := 'DATABASEURL=Biz:\JTTXM\JTTSJK.DATABASE';
            vProc.StoredProcName := 'proc_DelUnDoTask';
            vProc.Params.ParamByName('@RowId').AsString := m_sRowId;
            vProc.Execute();
         finally
            vProc.Free();
         end;
      end;
  end;
  //添加
  if(BizActnConsts.ActionDataSetAppend = TBizDataSetAction(Sender).ID) then
  begin
    Accept := false;
    DataSetBroker1.DataSet.Insert();
  end;

end;
回复 支持 反对

使用道具 举报

发表于 2008-5-28 11:38:20 | 显示全部楼层
代码跟踪一下 字段DJBH 的值, 按1楼的操作顺序,看两次的ID是不是一样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 11:38:25 | 显示全部楼层
上面的代码详细吗?
没有人回答呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 22:58 , Processed in 0.049137 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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