Foxtable(狐表)用户栏目专家坐堂 → [求助]自定义复合主键问题


  共有5571人关注过本帖树形打印复制链接

主题:[求助]自定义复合主键问题

帅哥哟,离线,有人找我吗?
arthurshoe
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:265 积分:1806 威望:0 精华:0 注册:2014/3/29 9:27:00
[求助]自定义复合主键问题  发帖心情 Post By:2014/4/13 10:21:00 [只看该作者]

外部数据做了一个复合主键表 冲裁中转进度表,主键是 轮次单号 + 部件名称, 没有了默认的 _identify, _locked,  _sorted... 
用代码执行新增操作,发现新记录上的轮次单号和部件名称都是空值,不能被正确赋值。。
Tables("冲裁中转进度表").AddNew()
Tables("冲裁中转进度表").current("部件名称") =  "我的部件"
Tables("冲裁中转进度表").current("轮次单号") = "单号"

以为是赋值出现问题。。测试已经存在的记录,记录是可以被赋值的
Tables("冲裁中转进度表").current("部件名称") =  "我的部件"
Tables("冲裁中转进度表").current("轮次单号") = "单号"

用foxtable界面建另外一个表,也即是表默认有_identify, _locked,  _sorted, 用系统的 新增行 功能
发现在记录的所有列都是空值是 该记录已经有一个 行号。。。
而上面的外部复合主键表用 新增行, 在所有记录列空值是 系统是不会自动产生 行号,只有在手动在表里用编辑后才能产生行号。。。
用代码的话,会发生上面的赋值问题。。。应该是主键相关问题。。

请高手帮忙!
[此贴子已经被作者于2014-4-13 10:23:18编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/13 22:13:00 [只看该作者]

 赋值这样写

 

Dim nr As Row = Tables("冲裁中转进度表").AddNew()

nr("部件名称") = "xxx"

nr("轮次单号") = "yyy"


 回到顶部
帅哥哟,离线,有人找我吗?
arthurshoe
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:265 积分:1806 威望:0 精华:0 注册:2014/3/29 9:27:00
  发帖心情 Post By:2014/4/14 2:48:00 [只看该作者]

结果是一样的。。还是不能赋值啊!

 回到顶部
帅哥哟,离线,有人找我吗?
pengjiam
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:187 积分:2763 威望:0 精华:0 注册:2011/7/30 21:27:00
  发帖心情 Post By:2014/4/14 6:43:00 [只看该作者]

_identify, _locked,  _sorted中一定有不允许为空的字段,要不把表中这些字段属性设置为可以为空。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/14 9:26:00 [只看该作者]

以下是引用pengjiam在2014-4-14 6:43:00的发言:
_identify, _locked,  _sorted中一定有不允许为空的字段,要不把表中这些字段属性设置为可以为空。

 

在你的表中,有这三列,还是没有这三列?默认_Identify是主键。

 

方案一,你可以使用_Identify + 其它列 做复合主键;

 

方案二,你可以删除_Identify,然后在狐表里,重新引用一次这个外部表


 回到顶部
帅哥哟,离线,有人找我吗?
arthurshoe
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:265 积分:1806 威望:0 精华:0 注册:2014/3/29 9:27:00
  发帖心情 Post By:2014/4/14 20:11:00 [只看该作者]

谢谢大家的回复。。
前面我讲过 我的表示直接自己建立的  没有_identiy, _locked, _Sortkeys等。。。
出现只能在表格编辑状态才能新增直接输入数值。。但是在代码内不能赋值。。。

试过了各种方案还是不行:
-允许identify locked sortkeys 为空。。其他两列做组合主键。。。不行
-不允许identify 为空也不行。。。同样的问题。。。
-删除identify重新引用也不行。。。。

楼上的方案
方案一,你可以使用_Identify + 其它列 做复合主键;。。。因为identify一定是不同的。。这样做就失去了我要保证其他两列在表里面唯一性的意义了

看过foxtable 为解决上面问题。。。是在beforesave前先检查记录是不是存在。。。
这样做 如果数据表原有上万条记录是。。。效率好像有问题。。。如果是批量增加可能更大问题。。。而且还有可能出现不同用户并发问题吧。。
如果动态加载数据的话还得做datatable重新加载。。还是后台筛选?

Foxtable 有什么好办法 解决这个问题了(保持几列的组合在数据库的唯一性)?

谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/14 20:50:00 [只看该作者]

 复合主键在狐表里使用是很麻烦的,必须输入唯一的值,才能再新增行。

 

 而且新增的行,是不能直接赋值的,你可以新增两行,然后给上一行赋值。

 

 参考下面的代码

 

Dim nr As Row = CurrentTable.AddNew
CurrentTable.Rows(nr.Index-1)("bbb") = Date.now
CurrentTable.Rows(nr.Index-1)("ccc") = Date.now

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
arthurshoe
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:265 积分:1806 威望:0 精华:0 注册:2014/3/29 9:27:00
  发帖心情 Post By:2014/4/14 22:58:00 [只看该作者]

只能先这样了。。。不过在保存时又要先把最后一个空记录删除。。确实有点麻烦啊。。。
不知道在将来的foxtable能不能比较好的支持

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/4/15 8:23:00 [只看该作者]

建议楼主用组合索引的方法,效果是相同的,


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/15 9:53:00 [只看该作者]

以下是引用逛逛在2014-4-15 8:23:00的发言:

建议楼主用组合索引的方法,效果是相同的,

 

这个方法怎么具体实现?印象中索引好像不是这么用的


 回到顶部
总数 15 1 2 下一页