| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1191 人关注过本帖
标题:关于adodc控件操作会错误更新其他字段的求解
只看楼主 加入收藏
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
结帖率:84%
收藏
已结贴  问题点数:40 回复次数:15 
关于adodc控件操作会错误更新其他字段的求解
使用到的控件:datagrid1,datagrid2,adodc1,adodc2,
datagrid1的datasource是 adodc1
datagrid2的datasource是 adodc2
图1
图片附件: 游客没有浏览图片的权限,请 登录注册

datagrid1.选中要查看的订单编号 按下enter键盘会跳出datagrid2如下图2,请注意上图第一行的订单编号为100001
图2
图片附件: 游客没有浏览图片的权限,请 登录注册

此图2为datagrid2的明细,按下esc的时候,datagrid2会隐藏,显示datagrid1,如下图3,问题出现了
图3
图片附件: 游客没有浏览图片的权限,请 登录注册
请看图3,当esc后datagrid2隐藏后,datagrid1显示后,第一行的订单编号变成了上次查看明细的订单编号
注:datagrid1.allowedupdate 是false
数据库中的数据也被更改了。。不知为什么,请求指教,万分感谢!!!
程序测试.rar (6.18 KB)
汇款数据库_Data.rar (111.22 KB)
搜索更多相关主题的帖子: 键盘 
2014-03-07 22:56
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:40 
DataGrid1_KeyDown事件修改如下:
Private Sub DataGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
    订单编号 = DataGrid1.Columns("订单编号").Value
    酒店名称 = DataGrid1.Columns("酒店名称").Value
    厨房 = DataGrid1.Columns("厨房").Value
    Adodc1.Recordset.Close
    Adodc1.Recordset.CursorLocation = adUseServer
    Adodc1.Refresh
    If KeyCode = 13 Then '以下是在datagrid1上选定按下enter的情况
   

        sql1 = "select 订单表.酒店货物名称,订单表.转换酒店单价 as 单价,订单表.送货单数量,订单表.酒店单位,订单表.备注 from 订单表,订单编号表头 where 订单表.id_编号=订单编号表头.id_编号 and 订单编号 ='" & 订单编号 & "' order by id_订单"
        Adodc2.RecordSource = sql1
        Adodc2.Refresh
        Set DataGrid2.DataSource = Adodc2
        DataGrid2.Visible = True
        Label7.Caption = "订单编号:" & 订单编号
        Label3.Caption = "酒店名称:" & 酒店名称
        Label4.Caption = " 厨房:" & 厨房
        Frame3.Visible = True
        Call 初始化datagrid2
        sql1 = "select count(酒店名称) as a from 订单表,订单编号表头 where 订单表.id_编号=订单编号表头.id_编号 and 订单编号表头.订单编号='" & 订单编号 & "'and 订单表.转换酒店单价 is null "
        Adodc3.RecordSource = sql1
        Adodc3.Refresh
        If Adodc3.Recordset.Fields("a") <> 0 Then
            DataGrid2.AllowUpdate = False
            MsgBox "有没有价格的货物,请先确定价格,再来填写送货数量!", vbOKOnly + vbInformation, " 提示信息"
            Exit Sub
        Else
            DataGrid2.AllowUpdate = True
        End If
   DataGrid2.SetFocus
        SendKeys "{right}"
        SendKeys "{right}"
    End If
End Sub

[ 本帖最后由 lowxiong 于 2014-3-8 00:08 编辑 ]
2014-03-07 23:43
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
收藏
得分:0 
我的数据库中市是有key的,附件的2个表是其中2个表,我复制出来的,订单表的外键市是id编号,订单编号表头主键是id编号,通过这个来连接的,不是没有key的问题,我把adodc1的locktype改成了readonly就解决了,虽然不知道为什么,默认的会出现这种问题
2014-03-08 00:03
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
我在二楼的代码改了。你数据库的确没key,如果有key的话则那项边上有个钥匙图样,你的都没有,见下图:
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-03-08 00:17
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
改成readonly是掩耳盗铃,除非你不需要改adodc1的数据。
2014-03-08 00:19
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
收藏
得分:0 
回复 5楼 lowxiong
版主,这不是key的问题,
图片附件: 游客没有浏览图片的权限,请 登录注册
,在我的数据库中,有key,但问题依然存在,版主你可以将id_编号设为主键,订单表中的id_编号设为外键,你试试问题依然存在,不知为什么
注:在我esc后停留咋adodc1. recoredset.find 这句的时候,datagrid1.的第一行已被更改,但并没有更新到数据库中
如果我后面执行 adodc1.recordeset.find,第一行数据库中的内容即被更改。很是奇怪,甚是不解!
这2个表是我从数据库中复制大另外一个数据库中的,所以这2个表没有保留结构,版主你可以把key和关系手动加上试一试,问题依旧!
我这个中共有3个adodc控件,起不同的作用
adodc1主要是显示和控制datagrid1的,这个无update需求
adodc2主要是显示和控制datagrid2的,这个有update需求
adodc3主要是备用
2014-03-08 09:49
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
我跟踪了,问题正如你所说的,rst.find后更改了数据,换我在2楼的代码后即没有这个问题,我只是将ado的游标类型更换为adUseServer,你默认的是adUseClient,游标类型只是决定数据更改对于远程数据库而言数据更改是否是及时而已,应该不会产生rst.find更改数据的事情,估计这是一个bug。
但如果实际更改数据后还是修改了数据(原来你的代码只要进入后立即esc也会更改数据),估计是你的sql语句有问题,我在看看。

[ 本帖最后由 lowxiong 于 2014-3-8 11:50 编辑 ]
2014-03-08 11:47
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
收藏
得分:0 
回复 7楼 lowxiong
Adodc1.Recordset.Close
    Adodc1.Recordset.CursorLocation = adUseServer
    Adodc1.Refresh
我已将上述代码写入事件中,不过问题依然存在,我觉得这并不是游标的问题,因为我adodc1这个控件不涉及到更新数据库的问题,而它却莫名的修改数据库中的内容,个人认为这是1个bug
2014-03-08 12:24
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
我的是正常的,见屏幕录像
录像1.rar (656.33 KB)
2014-03-08 12:59
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
收藏
得分:0 
回复 9楼 lowxiong
版主,你的录像我看了,发现操作问题,见图1,图2
图1
图片附件: 游客没有浏览图片的权限,请 登录注册

这是版主你选择的方法,这种方法,我试过了,不会出现更改数据的情况,但是这种选择方式只有用鼠标的情况下会生效
图2
图片附件: 游客没有浏览图片的权限,请 登录注册

这是我用的选择的方式,与版主的不一样,这就导致了会更改数据,版主在试试,不要用图1方式选择数据,图2是较为普遍的选择数据的方式,用键盘就可以实现高亮显示,
所以还请在测试一遍
2014-03-08 13:15
快速回复:关于adodc控件操作会错误更新其他字段的求解
数据加载中...
 
   



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

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