起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 278|回复: 16

【结】[问题]FGUID违反唯一性约束**

[复制链接]
发表于 2008-6-26 09:46:15 | 显示全部楼层 |阅读模式
一个从数据集,FGUID字段是主键且由系统自动填充NewGUID()
主数据集打开的时候会由代码给从数据集插入几条数据
在此之前都正常
问题是当从数据集的某条记录获得焦点,当鼠标离开之后会报一个FGUID违反唯一性约束 的错误。当把这条记录删除之后重新添加一个就没问题了。

这个系统自动生成的GUID有可能重复么?这个现象不稳定出现,昨天测试出现一次,今天出现一次
回复

使用道具 举报

发表于 2008-6-26 09:55:40 | 显示全部楼层
楼主,你把这个错误截图贴出来看看吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-26 13:39:36 | 显示全部楼层
现在问题稳定出现了
焦点只能从最上面那条记录上移开
从下面的任何一个上移开都会报错
看FGUID也没重复
在调试状态下定位不到哪条语句出错

1.jpg

144.15 KB, 下载次数: 195

回复 支持 反对

使用道具 举报

发表于 2008-6-26 17:02:01 | 显示全部楼层
这个字段是不是流程字段啊????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 08:35:07 | 显示全部楼层
不是
从数据集的主键
在从数据集中切换的时候才这样
回复 支持 反对

使用道具 举报

发表于 2008-6-27 08:38:47 | 显示全部楼层
楼主,把从数据集拷贝、粘贴到论坛上看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 08:45:16 | 显示全部楼层
object DataSetDCBMJLDB: TSQLDataSet
  Relation.KeyFieldNames = 'FMASTERGUID'
  Relation.Master = DataSetZB
  Relation.MasterFieldNames = 'FGUID'
  Relation.DeleteRule = krNoAction
  Relation.UpdateRule = krNoAction
  AfterScroll = DataSetDCBMJLDBAfterScroll
  ID = 'DCBMJLDB'
  DisplayName = #35843#20986#37096#38376#32463#29702#20195#21150
  Database.Reference = 'Biz:\OWFSPACE\OWFDB.DATABASE'
  CheckConstraints = <>
  OnFieldChange = DataSetDCBMJLDBFieldChange
  Params = <>
  SQL.Text =
    'SELECT THEDSLAVE.FGUID, THEDSLAVE.FMASTERGUID, THEDSLAVE.FMARK, ' +
    'THEDSLAVE.FBEGINTIME, THEDSLAVE.FPERSONID, THEDSLAVE.FDEPTID, TH' +
    'EDSLAVE.FMEMO, THEDSLAVE.FNUMBER, THEDSLAVE.FEXTENDCHAR1, THEDSL' +
    'AVE.FEXTENDCHAR2'#13#10'  FROM THEDSLAVE'#13#10'  WHERE THEDSLAVE.FMARK ='#39'Ou' +
    'tDeptMng'#39
  Left = 146
  Top = 106
  object FIELD_DCBMJLDB_FGUID: TUserDataField
    ID = 'FGUID'
    DisplayName = #20174#34920'ID'
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Enabled = True
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    AutoFillDef.Options = [foFillReadOnly, foNullFieldOnly]
    AutoFillDef.Expression.Text = 'NewGUID()'
    IsRequired = True
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A456C656D656E74
      0D0A497352657175697265640D0A4C6F6F6B75704465660D0A4C6F6F6B757052
      6573756C740D0A}
  end
  object FIELD_DCBMJLDB_FMASTERGUID: TUserDataField
    ID = 'FMASTERGUID'
    DisplayName = #20027#34920'ID'
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A456C656D656E74
      0D0A4C6F6F6B75704465660D0A4C6F6F6B7570526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FMARK: TUserDataField
    ID = 'FMARK'
    DisplayName = #26631#35760#23383#27573
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Enabled = True
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    AutoFillDef.Options = [foFillReadOnly, foNullFieldOnly]
    AutoFillDef.Expression.Text = #39'OutDeptMng'#39
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A456C656D656E74
      0D0A4C6F6F6B75704465660D0A4C6F6F6B7570526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FBEGINTIME: TUserDataField
    ID = 'FBEGINTIME'
    DisplayName = #20195#21150#26102#38388
    DataType = dtDateTime
    EditStyleID = 'Date'
    AutoFillDef.Enabled = True
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    AutoFillDef.Options = [foFillReadOnly, foNullFieldOnly]
    AutoFillDef.Expression.Text = 'IIf((FNUMBER is not null),ServerTime(),null)'
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      466F726D61740D0A446973706C61794E616D650D0A456C656D656E740D0A4C6F
      6F6B75704465660D0A4C6F6F6B7570526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FPERSONID: TUserDataField
    ID = 'FPERSONID'
    DisplayName = #20195#21150#20154
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Enabled = True
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    AutoFillDef.Options = [foFillReadOnly, foNullFieldOnly]
    AutoFillDef.Expression.Text = 'IIf(FNUMBER is not null,OperatorID(),'#39#39')'
    LookupDef.Kind = lkDataValues
    LookupDef.DataBase.Reference = 'Biz:\HRM\HRMDB.DATABASE'
    LookupDef.SQL.Strings = (
      'SELECT TPERSON.FID, TPERSON.FDISPLAYNAME'
      '  FROM TPERSON')
    LookupDef.DisplayField = 'FDISPLAYNAME'
    LookupDef.KeyField = 'FID'
    LookupDef.Filter.Strings = (
      ' ')
    LookupDef.ViewID = 'GridView'
    LookupDef.ViewProperties.Strings = (
      'object TGridViewDesigner'
      '  VisibleColumns.Strings = ('
      '    '#39'FDISPLAYNAME'#39')'
      '  Options = []'
      'end')
    LookupDef.Options = [loNoDropDown, loManualDropDown]
    LookupDef.InnerSQLList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text = 'SELECT TPERSON.FID, TPERSON.FDISPLAYNAME'#13#10'  FROM TPERSON'#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      4E616D650D0A456C656D656E740D0A4C6F6F6B75704465660D0A4C6F6F6B7570
      526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FDEPTID: TUserDataField
    ID = 'FDEPTID'
    DisplayName = #20195#21150#20107#21153
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    LookupDef.Kind = lkDataValues
    LookupDef.DataBase.Reference = 'Biz:\OWFSPACE\OWFDB.DATABASE'
    LookupDef.SQL.Strings = (
      'SELECT Distinct(THEDSLAVE.FMASTERGUID) as '#20195#21150#20107#21153
      '  FROM THEDSLAVE'
      '  WHERE THEDSLAVE.FMARK = '#39'CommissionAffair'#39)
    LookupDef.DisplayField = #20195#21150#20107#21153
    LookupDef.KeyField = #20195#21150#20107#21153
    LookupDef.ViewID = 'GridView'
    LookupDef.ViewProperties.Strings = (
      'object TGridViewDesigner'
      '  VisibleColumns.Strings = ('
      '    #20195#21150#20107#21153)'
      '  Options = []'
      'end')
    LookupDef.Options = [loDropDownButton, loDropDownList]
    LookupDef.InnerSQLList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text =
          'SELECT Distinct(THEDSLAVE.FMASTERGUID) as '#20195#21150#20107#21153#13#10'  FROM THEDSLAVE' +
          #13#10'  WHERE THEDSLAVE.FMARK = '#39'CommissionAffair'#39#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      4E616D650D0A456C656D656E740D0A4C6F6F6B75704465660D0A4C6F6F6B7570
      526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FMEMO: TUserDataField
    ID = 'FMEMO'
    DisplayName = #22791#27880
    DataType = dtText
    EditStyleID = 'String'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A456C656D656E74
      0D0A4C6F6F6B75704465660D0A4C6F6F6B7570526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FNUMBER: TUserDataField
    ID = 'FNUMBER'
    DisplayName = #20195#21150#35828#26126
    DataType = dtNumber
    DataTypeAttribute.Precision = 15
    DataTypeAttribute.Scale = 0
    EditStyleID = 'String'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    LookupDef.Kind = lkEnumValues
    LookupDef.Values.Strings = (
      
        '<?xml version="1.0" standalone="yes"?>  <DATAPACKET Version="2.0' +
        '"><METADATA><FIELDS><FIELD fieldname="'#20851#38190#20540'" attrname="xF0" fieldt' +
        'ype="string" WIDTH="255"/><FIELD fieldname="'#26597#25214#20540'" attrname="xF1" ' +
        'fieldtype="string" WIDTH="255"/></FIELDS><ARAMS/></METADATA><RO' +
        'WDATA><ROW xF0="1" xF1="'#24050#23436#25104'"/><ROW xF0="0" xF1="'#26410#23436#25104'"/></ROWDATA>' +
        '</DATAPACKET>')
    LookupDef.DisplayField = #26597#25214#20540
    LookupDef.KeyField = #20851#38190#20540
    LookupDef.Filter.Strings = (
      ' ')
    LookupDef.ViewID = 'GridView'
    LookupDef.ViewProperties.Strings = (
      'object TGridViewDesigner'
      '  VisibleColumns.Strings = ('
      '    #26597#25214#20540)'
      '  Options = []'
      'end')
    LookupDef.Options = [loDropDownButton, loDropDownList]
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      4E616D650D0A456C656D656E740D0A4C6F6F6B75704465660D0A4C6F6F6B7570
      526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FEXTENDCHAR1: TUserDataField
    ID = 'FEXTENDCHAR1'
    DisplayName = #25805#20316
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    LookupDef.Kind = lkDataValues
    LookupDef.DataBase.Reference = 'Biz:\OWFSPACE\OWFDB.DATABASE'
    LookupDef.SQL.Strings = (
      'SELECT THEDSLAVE.FEXTENDCHAR1, THEDSLAVE.FMASTERGUID'
      '  FROM THEDSLAVE'
      '  WHERE THEDSLAVE.FMARK = '#39'CommissionAffair'#39)
    LookupDef.DisplayField = 'FEXTENDCHAR1'
    LookupDef.KeyField = 'FEXTENDCHAR1'
    LookupDef.Filter.Strings = (
      '(FMASTERGUID = DataSet.FDEPTID)')
    LookupDef.Filtered = True
    LookupDef.ViewID = 'GridView'
    LookupDef.ViewProperties.Strings = (
      'object _1: TGridViewDesigner'
      '  VisibleColumns.Strings = ('
      '    '#39'FEXTENDCHAR1'#39')'
      '  Options = []'
      'end')
    LookupDef.Options = [loReturnFiltered, loDropDownButton, loDropDownList]
    LookupDef.InnerSQLList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text =
          'SELECT THEDSLAVE.FEXTENDCHAR1, THEDSLAVE.FMASTERGUID'#13#10'  FROM THE' +
          'DSLAVE'#13#10'  WHERE THEDSLAVE.FMARK = '#39'CommissionAffair'#39#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
    LookupDef.InnerFilterList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text = '(FMASTERGUID = DataSet.FDEPTID)'#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      4E616D650D0A456C656D656E740D0A4C6F6F6B75704465660D0A4C6F6F6B7570
      526573756C740D0A}
  end
  object FIELD_DCBMJLDB_FEXTENDCHAR2: TUserDataField
    ID = 'FEXTENDCHAR2'
    DisplayName = #25805#20316#35828#26126
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    Attributes.ReadOnly.Text = 'CZBQ is null'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    Button.OnClick = FIELD_DCBMJLDB_FEXTENDCHAR2ButtonClick
    StoredProps = {
      417474726962757465730D0A4175746F46696C6C4465660D0A446973706C6179
      4E616D650D0A456C656D656E740D0A4C6F6F6B75704465660D0A4C6F6F6B7570
      526573756C740D0A}
  end
  object FIELD_DCBMJLDB_CZBQ: TInternalDataField
    ID = 'CZBQ'
    DisplayName = #25805#20316#26631#31614
    DataType = dtString
    DataTypeAttribute.Size = 32
    EditStyleID = 'String'
    Alignment = taLeftJustify
    Attributes.Enabled.Text = 'False'
    Attributes.ReadOnly.Text = 'True'
    AutoFillDef.Trigger = [ftOnInsert, ftOnEdit, ftOnDataChange]
    AutoFillDef.Options = [foFillReadOnly, foNullFieldOnly]
    AutoFillDef.CalcMode = cmByLookup
    LookupDef.DataBase.Reference = 'Biz:\OWFSPACE\OWFDB.DATABASE'
    LookupDef.SQL.Strings = (
      
        'SELECT THEDSLAVE.FMASTERGUID, THEDSLAVE.FEXTENDCHAR1, THEDSLAVE.' +
        'FEXTENDCHAR2'
      '  FROM THEDSLAVE'
      '  WHERE THEDSLAVE.FMARK = '#39'CommissionAffair'#39)
    LookupDef.Filter.Strings = (
      
        '(FMASTERGUID = DataSet.FDEPTID) AND (FEXTENDCHAR1 = DataSet.FEXT' +
        'ENDCHAR1) ')
    LookupDef.InnerSQLList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text =
          'SELECT THEDSLAVE.FMASTERGUID, THEDSLAVE.FEXTENDCHAR1, THEDSLAVE.' +
          'FEXTENDCHAR2'#13#10'  FROM THEDSLAVE'#13#10'  WHERE THEDSLAVE.FMARK = '#39'Commi' +
          'ssionAffair'#39#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
    LookupDef.InnerFilterList.Expressions = <
      item
        Name = '[Default]'
        Expression.Text =
          '(FMASTERGUID = DataSet.FDEPTID) AND (FEXTENDCHAR1 = DataSet.FEXT' +
          'ENDCHAR1) '#13#10
      end
      item
        Name = 'ORACLE'
        Expression.Text = ' '
      end
      item
        Name = 'MSSQL'
        Expression.Text = ' '
      end
      item
        Name = 'SYBASE'
        Expression.Text = ' '
      end
      item
        Name = 'DB2'
        Expression.Text = ' '
      end
      item
        Name = 'SQLITE'
        Expression.Text = ' '
      end
      item
        Name = 'Paradox'
        Expression.Text = ' '
      end>
  end
end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 09:02:01 | 显示全部楼层
找到一些规律了
从数据集的默认数据是表单创建时用代码创建的,代码根据另一个数据集中的数据插入几条记录。
现在发现了几种可能导致这种问题出现的原因:
1、如果在插入的时候post了,那么直接流转流程是没问题的,但是在从数据集中切换的时候就会出问题。而且post之后有时会出现多数据的情况,比如默认添加了4条,在这个环节改动一些数据,在下一环节看到的数据就会是改动后的数据和4条默认添加的数据。取消post之后就没问题了。

2、从数据集添加数据的时候,用Append不论post与否,都会出现FGUID这个问题。Insert取消post之后就没问题了。但是insert之后的记录没有正常排序,点一下从数据集的记录会重新排序。

3、从数据集中存在OnFieldChange事件,事件是根据几个字段的值从另一个数据集中查找一条数据并给从数据集的一个字段赋值。
  数据集中赋值语句为:
   DataSet.FieldByName('CZBQ').AsString:= lQuery.FieldByName('FEXTENDCHAR2').AsString;
  当把这条代码注释后也不会出现问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 09:32:52 | 显示全部楼层
这样吧,先把问题简化。
我想要的是从数据集代码插入完之后能够排序,而不是鼠标点一下再离开才排序,怎么实现?
我插入的时候源数据集是已经排序好的,可是插入完还是没有排序
回复 支持 反对

使用道具 举报

发表于 2008-6-27 10:00:20 | 显示全部楼层
楼主,9楼的问题,可以使用客户端排序实现。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 16:17 , Processed in 0.044991 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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