以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]自定义复合主键问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=49163) |
-- 作者:arthurshoe -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/4/13 22:13:00 -- 赋值这样写
Dim nr As Row = Tables("冲裁中转进度表").AddNew() nr("部件名称") = "xxx" nr("轮次单号") = "yyy" |
-- 作者:arthurshoe -- 发布时间:2014/4/14 2:48:00 -- 结果是一样的。。还是不能赋值啊! |
-- 作者:pengjiam -- 发布时间:2014/4/14 6:43:00 -- _identify, _locked, _sorted中一定有不允许为空的字段,要不把表中这些字段属性设置为可以为空。 |
-- 作者:有点甜 -- 发布时间:2014/4/14 9:26:00 -- 以下是引用pengjiam在2014-4-14 6:43:00的发言:
_identify, _locked, _sorted中一定有不允许为空的字段,要不把表中这些字段属性设置为可以为空。
在你的表中,有这三列,还是没有这三列?默认_Identify是主键。
方案一,你可以使用_Identify + 其它列 做复合主键;
方案二,你可以删除_Identify,然后在狐表里,重新引用一次这个外部表 |
-- 作者:arthurshoe -- 发布时间:2014/4/14 20:11:00 -- 谢谢大家的回复。。 前面我讲过 我的表示直接自己建立的 没有_identiy, _locked, _Sortkeys等。。。 出现只能在表格编辑状态才能新增直接输入数值。。但是在代码内不能赋值。。。 试过了各种方案还是不行: -允许identify locked sortkeys 为空。。其他两列做组合主键。。。不行 -不允许identify 为空也不行。。。同样的问题。。。 -删除identify重新引用也不行。。。。 楼上的方案 方案一,你可以使用_Identify + 其它列 做复合主键;。。。因为identify一定是不同的。。这样做就失去了我要保证其他两列在表里面唯一性的意义了 看过foxtable 为解决上面问题。。。是在beforesave前先检查记录是不是存在。。。 这样做 如果数据表原有上万条记录是。。。效率好像有问题。。。如果是批量增加可能更大问题。。。而且还有可能出现不同用户并发问题吧。。 如果动态加载数据的话还得做datatable重新加载。。还是后台筛选? Foxtable 有什么好办法 解决这个问题了(保持几列的组合在数据库的唯一性)? 谢谢! |
-- 作者:有点甜 -- 发布时间:2014/4/14 20:50:00 -- 复合主键在狐表里使用是很麻烦的,必须输入唯一的值,才能再新增行。
而且新增的行,是不能直接赋值的,你可以新增两行,然后给上一行赋值。
参考下面的代码
Dim nr As Row = CurrentTable.AddNew
|
-- 作者:arthurshoe -- 发布时间:2014/4/14 22:58:00 -- 只能先这样了。。。不过在保存时又要先把最后一个空记录删除。。确实有点麻烦啊。。。 不知道在将来的foxtable能不能比较好的支持
|
-- 作者:逛逛 -- 发布时间:2014/4/15 8:23:00 -- 建议楼主用组合索引的方法,效果是相同的, |
-- 作者:有点甜 -- 发布时间:2014/4/15 9:53:00 -- 以下是引用逛逛在2014-4-15 8:23:00的发言:
建议楼主用组合索引的方法,效果是相同的,
这个方法怎么具体实现?印象中索引好像不是这么用的 |