标题:请教mshflexgrid控件显示数据库中记录修改后不能保存问题
只看楼主
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
结帖率:100%
已结贴  问题点数:10 回复次数:13 
请教mshflexgrid控件显示数据库中记录修改后不能保存问题
   用的mshflexgrid与text框结合录入多行数据并保存至数据库中,然后若要修改保存过的记录,我是先从数据库中读取数据至Mshflexgrid表中,然后修改好以后再保存至数据库中。现在发现问题有些蹊跷:有的时候改了更新不了 再改第2次的话 它又好了 还有如果是改了多行记录的话 有的就更新一条记录 其他的没变 再试几次 说不定下次又好改了
   经过这几天的反复测试 现在发现一个问题:我每次更改完当前行某列的数据后,必须要将鼠标定位在当前行,数据即可更新。若更改好数据后,鼠标定位在其他行,则数据无法更新。请问各位这该怎么解决?也就是现在只要我更改完数据后,必须将鼠标点下当前行,否则,数据更新不了,郁闷
  请大家帮我看看这个问题如何解决?好多天了,还是未解决。
搜索更多相关主题的帖子: mshflexgrid 数据库 保存 控件 
2010-07-13 09:23
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
这是更新的代码,其中Quality,Fuk,Wbquality为数值型,ID为自动递增项,请问哪里有问题呀?
Call OpenConn
  For i = 1 To Flex1.Rows - 1
  If Flex1.TextMatrix(Flex1.Row, 0) <> "" Then
  conn.Execute ("UPDATE Sells SET Guige='" + Flex1.TextMatrix(Flex1.Row, 1) + "',Huif='" + Flex1.TextMatrix(Flex1.Row, 2) + "',Jiaol='" + Flex1.TextMatrix(Flex1.Row, 3) + "',Diameter='" + Flex1.TextMatrix(Flex1.Row, 4) + "',Quality=" + Flex1.TextMatrix(Flex1.Row, 5) + ",Fuhw='" + Flex1.TextMatrix(Flex1.Row, 6) + "',Box='" + Flex1.TextMatrix(Flex1.Row, 7) + "',Fuk=" + Flex1.TextMatrix(Flex1.Row, 8) + " ,Wbquality=" + Flex1.TextMatrix(Flex1.Row, 9) + " where ID= " & Me.Flex1.TextMatrix(Flex1.Row, 0) & "")
  End If
  Next i
  MsgBox "记录更新成功!", 64, "提示"
  XPBtedit.Enabled = True
  XPBtsave.Enabled = False
  End If

我在别的论坛也发过这个问题,人家给的建议是:
你的代码有两个问题,
一是Flex1.Row是当前行,当你离开这行点下行是ID是对不上的,所以不会更新。
二是你这样从上向下循环,你没有修改过的行也会更新一遍,相当影响速度。
建议你用一个数组保存修改过的行的ID,判断修改过的再更新
用数组保存,不知道怎么做?
2010-07-13 09:26
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
请大家帮忙呀 这段代码该如何改呀 郁闷 拖了好久了都 谢谢
2010-07-20 16:34
frank_tao78
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:69
专家分:143
注 册:2010-1-11
得分:10 
我玩了几天这个控件,也发现这个问题,就是不绑定数据的时候,用代码显示、修改、删除,都很麻烦,不过做好一个显示、保存模块,就很简单了。

你说的那个问题,我是这么解决的:Click事件发生的时候,保存key到一个自定义变量,然后要修改的话,查找这个值,定位,再修改,虽然麻烦一点,不过不失为一个办法。

这是我写过的一段删除代码:
Private Sub cmdDel_Click()    '删除
If Len(ListHc) = 0 Then Exit Sub    'ListHc就是我在flexgrid的Click事件的时候保存的
Dim i As Integer
For i = SysHcGrid.Rows - 1 To 0 Step -1   
 '遍历这个flexgrid,查找需要删除的row,原来是直接removeitem,不过发现老是会移除掉不想移除的记录
    If SysHcGrid.TextMatrix(SysHcGrid.Row, 0) = Trim(ListHc) Then
        SysHcGrid.RemoveItem SysHcGrid.Row
    End If
Next
End Sub
以下是click的时候,保存了ListHc值
Private Sub SysHcGrid_Click()
If SysHcGrid.Row > 0 Then
    ListHc = SysHcGrid.TextMatrix(SysHcGrid.Row, 0)
else
    ListHc = ""
End If
End Sub
2010-07-20 20:19
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
回复 4楼 frank_tao78
非常感谢你的回复 按照你的这个思路我这样改了一下:
Private Sub save()    '保存代码
If Len(ListHc) = 0 Then Exit Sub   
Dim i As Integer
For i = 1 to flex1.Rows - 1     
If flex1.TextMatrix(flex1.Row, 0) = Trim(ListHc) Then
     conn.Execute ("UPDATE Sells SET Guige='" + Flex1.TextMatrix(i, 1) + "',Huif='" + Flex1.TextMatrix(i, 2) + "',Jiaol='" + Flex1.TextMatrix(i, 3) + "',Diameter='" + Flex1.TextMatrix(i, 4) + "',Quality=" + Flex1.TextMatrix(i, 5) + ",Fuhw='" + Flex1.TextMatrix(i, 6) + "',Box='" + Flex1.TextMatrix(i, 7) + "',Fuk=" + Flex1.TextMatrix(i, 8) + " ,Wbquality=" + Flex1.TextMatrix(i, 9) + "")
    End If
Next
End Sub

以下是click的时候,保存了ListHc值
Private Sub flex1_Click()
If flex1.Row > 0 Then
    ListHc = flex1.TextMatrix(flex1.Row, 0)
else
    ListHc = ""
End If
End Sub
但是运行后,反而将原来表里的数据都清空了,这是怎么回事呢?
2010-07-21 10:35
frank_tao78
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:69
专家分:143
注 册:2010-1-11
得分:0 
有没有把这个传递的值(ListHc)设置成全局变量
怪了,我运行下来,好的啊
2010-07-21 20:25
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
以下是引用frank_tao78在2010-7-21 20:25:35的发言:

有没有把这个传递的值(ListHc)设置成全局变量
怪了,我运行下来,好的啊
设置的啊 public listhc as integer
 奇怪了 只要改下保存 数据就全清空了 不知道怎么回事了
就是这段代码:
Call OpenConn
 If Len(listhc) = 0 Then Exit Sub
dim k as integer
For k = 1 To Flex1.Rows - 1
If Flex1.TextMatrix(Flex1.Row, 0) = Trim(listhc) Then
conn.Execute ("UPDATE Sells SET Guige='" & Flex1.TextMatrix(k, 1) & "',Huif='" & Flex1.TextMatrix(k, 2) & "',Jiaol='" & Flex1.TextMatrix(k, 3) & "',Diameter='" & Flex1.TextMatrix(k, 4) & "',Quality='" & Flex1.TextMatrix(k, 5) & "',Fuhw='" & Flex1.TextMatrix(k, 6) & "',Box='" & Flex1.TextMatrix(k, 7) & "',Fuk='" & Flex1.TextMatrix(k, 8) & "',Wbquality='" & Flex1.TextMatrix(k, 9) & "'")
    End If
Next
MsgBox "记录更新成功!", 64, "提示"
2010-07-22 08:49
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
又试了下 运行发现下面这段代码 “提示update语句的语法错误”不知道哪里的问题 哎
conn.Execute ("UPDATE Sells SET Guige='" & Flex1.TextMatrix(k, 1) & "',Huif='" & Flex1.TextMatrix(k, 2) & "',Jiaol='" & Flex1.TextMatrix(k, 3) & "',Diameter='" & Flex1.TextMatrix(k, 4) & "',Quality=" & Flex1.TextMatrix(k, 5) & ",Fuhw='" & Flex1.TextMatrix(k, 6) & "',Box='" & Flex1.TextMatrix(k, 7) & "',Fuk=" & Flex1.TextMatrix(k, 8) & ",Wbquality=" & Flex1.TextMatrix(k, 9) & " where ID=" & Flex1.TextMatrix(k, 0) & "")
2010-07-22 09:32
frank_tao78
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:69
专家分:143
注 册:2010-1-11
得分:0 
dim sql as string
sql="update sells set Guige='" & Flex1.TextMatrix(k,1) & "'"
sql=sql & ",Huif='" & Flex1.TextMatrix(k,2) & "'"
sql=sql & ",Jiaol='" & Flex1.TextMatrix(k, 3) & "'"
sql=sql & ",Diameter='" & Flex1.TextMatrix(k, 4) & "'"
sql=sql & ",Quality='" & Flex1.TextMatrix(k, 5) & "'"
sql=sql & ",Fuhw='" & Flex1.TextMatrix(k, 6) & "'"
sql=sql & ",Box='" & Flex1.TextMatrix(k, 7) & "'"
sql=sql & ",Fuk='" & Flex1.TextMatrix(k, 8) & "'"
sql=sql & ",Wbquality='" & Flex1.TextMatrix(k, 9) & "'"
sql=sql & " where ID='" & Flex1.TextMatrix(k, 0) & "'"
看看是不是这个问题。因为textmatrix引用
另外,你ListHc设置成Integer再用Len判断,可能会有问题的。
我觉得,你这段代码出问题,估计就是数据类型上的问题,如果不嫌麻烦,索性用转换函数,规范一下。
咱是三脚猫碰上三脚猫,你只能试试看,我也是学习ing
2010-07-22 15:32
suosuody
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-13
得分:0 
以下是引用frank_tao78在2010-7-22 15:32:22的发言:

dim sql as string
sql="update sells set Guige='" & Flex1.TextMatrix(k,1) & "'"
sql=sql & ",Huif='" & Flex1.TextMatrix(k,2) & "'"
sql=sql & ",Jiaol='" & Flex1.TextMatrix(k, 3) & "'"
sql=sql & ",Diameter='" & Flex1.TextMatrix(k, 4) & "'"
sql=sql & ",Quality='" & Flex1.TextMatrix(k, 5) & "'"
sql=sql & ",Fuhw='" & Flex1.TextMatrix(k, 6) & "'"
sql=sql & ",Box='" & Flex1.TextMatrix(k, 7) & "'"
sql=sql & ",Fuk='" & Flex1.TextMatrix(k, 8) & "'"
sql=sql & ",Wbquality='" & Flex1.TextMatrix(k, 9) & "'"
sql=sql & " where ID='" & Flex1.TextMatrix(k, 0) & "'"
看看是不是这个问题。因为textmatrix引用
另外,你ListHc设置成Integer再用Len判断,可能会有问题的。
我觉得,你这段代码出问题,估计就是数据类型上的问题,如果不嫌麻烦,索性用转换函数,规范一下。
咱是三脚猫碰上三脚猫,你只能试试看,我也是学习ing
呵呵  换上这个还是不行 还是"Update语句语法错误" 那你的意思是将ListHc设置成String再用Len判断?
2010-07-22 15:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-312806-1-1.html




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

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