| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2082 人关注过本帖
标题:远程视图插入新数据后, 作为主键的标识列的值只能requery()才能得到刷新吗?
取消只看楼主 加入收藏
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:2 
远程视图插入新数据后, 作为主键的标识列的值只能requery()才能得到刷新吗?
在SQLSERVER中做了个测试表, 表中有一个自增量标识列ID设置为主键,
在VFP中做了个远程视图, 设置ID为主键, 更新条件中ID设置不更新

然后做了个表单, 数据环境添加了这个远程视图, 表单中用一个Grid操作这个视图
现在就象在操作本地表的感觉了,
增加一条新记录, ID值不处理, 随便弄几个数据进其它字段
再增加新记录, ID值仍然不处理, 只是保证其它字段不全为空
增加若干新记录, 会看到ID值本应当自增量, 结果全部保持为空.

现在转到SQL里面直接查看, ID值正常自动增量
回到VFP中requrey(), Grid刷新, 得到正常的ID值

现在进一步试验, 把所有的ID乱改值, 结果如猜想的一样, 没有任何不良影响(这个好理解, 更新条件已经设置为不更新了嘛)


但有一点搞不明白的是:
1.主键是ID, 现在本地视图主键看起来已经失效了, 系统是如何保证远程更新的主键对比的呢?
2.假设视图其实控制着另一个表, 主键与SQLSERVER同步, 没有理由让视图显示无效的ID值啊, 完全可以让ID同步体现SQLSERVER里的值啊,
  这样某种情况下如果主键能用上的话, 就不必requery()了, 能节约网络和服务器开销
3.以上情况是不是说明, 当在视图设计时, 把主键设置为不更新后, 随后对视图的所有操作都可以忽略主键(不需要做任何维护)呢?
搜索更多相关主题的帖子: 数据 测试表 
2012-06-01 12:48
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
收藏
得分:0 
Tony
你讲的我觉得很有道理, 感觉你对SQL研究也很深入, 而我快有十年没动手编程了, 这一次因为一个特殊的现场管理系统, 我的应用需求讲给程序员太费事才自己操刀.
我主要想确认我构建的系统, 不会因为我对远程视图的错误理解而在今后布置应用时才发现有根本性的错误.
其中最需要了解的是:
1. 如果把远程视图当作本地表一样来操作, 把所有的后台更新全部交给系统, 这种作法可不可靠呢?
    这个问题是我在反复测试视图更新服务器的机制时所一直顾虑的, 因为当我brow远程视图时后乱改表中数据测试时, 有时会有更新冲突的提示, 而我一直找不到什么规律
2. 如果对远程视图的操作有某种规则限制, 那么什么地方可以有文档参考?我这几天差不多把联机帮助通读了一回, 尤其是关于SPT和视图的部分,但是没有找到非常明确的说明.
    或者这个规则其实很简单的话, Tony版主能指导一下
3. 虽然不是本贴的主题, 但是顺便回一下关于自动步进的主键的问题, 这个主要是想尽可能减少编程时要考虑的因素, 如果因为这个造成不确定因素, 确实反而不如另用一种主键生成机制. 我一想到30台机在同一秒向表中添加数据(这是我现在做的系统的一个基本要求), 如何确保主键维一就头大 :), 如果交给系统可靠的话, 还是交给它吧.
2012-06-01 15:16
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
收藏
得分:0 
Tony, 我实在是想不出来有什么办法可以有效地控制视图的动作, 所以你说的下面这一段:
对这种情况,可以考虑减少每次传输的数据量,只传送确实有更新的数据,而不是把没有更新的数据也打包跑在网路上,这当然又增加了编程的判断代码。
当使用远程视图时, 我最伤脑筋的就是这一点, 我不确定视图到底有没有能力作到比较优化.
但视图确实就编程来说非常方便, 我很想采用它.

从联机帮助来看, 或者从视图设计器的更新条件来看, 视图在底层应当是会作一个数据是否有变更的比较动作,
就是只更新被设置为可更新和确实有数据改变的记录和字段.
而 "是否更新" 的判断机制, 我不是很确定, 猜想除了视图本身这个cursor之外,
本机上应当还有一份源表的映射cursor,
这样的话,其实有三个层次
第一层是远程视图的显表, 我们可以看到它的数据, 对它进行修改, 增加或者删除记录,
第二层是远程视图的隐表, 它的内容最初应当是视图抓取服务器的数据,
    然后如果有本地更新到服务器, 它会自动requery()一下, 这样就可以不至于丢失主键
第三层是服务器上的源表.
为了描述方便, 我把第一层称为表1, 第二层称为表2, 第三层称为表3
则这三层表之间的关系其实是比较复杂的,
尤其是表3和表2也有可能不同步, 因为网络环境下其它用户也有可能修改到表3数据而表2不可能也不应当即时同步它.

如果我的猜想成立, 则我现在测试远程视图时所遇到的各种现象就解释得通了,
但是我的系统架构就不可靠了,
我就得用SPT写比远程视图多出几十倍的代码来实现应用功能了.

全部用SPT手动维护数据环境的话, 想想就令人头皮发麻啊...
我另发一贴专门跟大家讨论吧
2012-06-01 21:35
快速回复:远程视图插入新数据后, 作为主键的标识列的值只能requery()才能得到刷 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036810 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved