在工作中经常遇到一些问题,一直不能解决,希望对这方面熟悉的朋友,能给我详细讲解一下。
从数据库中拿出数据,进行修改,然后把修改后的数据保存到数据库
对数据进行修改更新,有一张单中,有多笔记录,在修改后,可能有4中情况,
a没有任何变化。
b主键内容没有变化,对主键外的内容等进行了修改,
c把原有的记录进行了删除
d把原有的记录进行了删除,同时在原有的位置增加了新的记录以下是我的一段保存数据的代码
我先从表中查出数据放在MSHFlexGrid2中,然后进行一些修改,也就是我上面说的四种情况。
a没有任何变化。
b主键内容没有变化,对主键外的内容等进行了修改,
c把原有的记录进行了删除
d把原有的记录进行了删除,同时再原有的位置增加了新的记录。但是在保存是,提示插入重复数据,也就是说我把MSHFlexGrid2中的数据全部重新插入到表中,而实际上应该是:a:不需要任何动作
b:对数据进行UPDATE
c:对数据进行delete
d:对数据进行delete后在进行insert如果保存不成功,或则取消修改,数据应该还是a,b,c
如果保存成功,才是a,b,d。请问,对这样的情况是怎样处理的。
或则怎样做才能达到我修改后的数据存储到数据库的效果。
这样的情没有其他更好的方法
我知道可以用SQL进行操作,问题是我不能判断以上4种情况。Private Sub Command1_Click()
Dim rs2 As New ADODB.Recordset
Dim SQL, sql2, SQL4 As String
Dim i, j, m, n As Integer
If rs2.State = 1 Then
rs2.Close
End If
SQL = "select top 0 Epart,Edescshort,uom,item,descshort,unit,re from HGpofact"
rs2.CursorLocation = adUseClient
rs2.Open SQL, pubStrConn, adOpenDynamic, adLockBatchOptimistic
'写入recordset
For m = 1 To MSHFlexGrid2.Rows - 1
rs2.AddNew
rs2(0).Value = MSHFlexGrid2.TextMatrix(m, 1)
rs2(1).Value = MSHFlexGrid2.TextMatrix(m, 2)
rs2(2).Value = MSHFlexGrid2.TextMatrix(m, 3)
rs2(3).Value = MSHFlexGrid2.TextMatrix(m, 4)
rs2(4).Value = MSHFlexGrid2.TextMatrix(m, 5)
rs2(5).Value = MSHFlexGrid2.TextMatrix(m, 6)
Next m
If rs2.EOF And rs2.BOF Then
MsgBox "保存数据有误,请检查编码"
Exit Sub
End If
从数据库中拿出数据,进行修改,然后把修改后的数据保存到数据库
对数据进行修改更新,有一张单中,有多笔记录,在修改后,可能有4中情况,
a没有任何变化。
b主键内容没有变化,对主键外的内容等进行了修改,
c把原有的记录进行了删除
d把原有的记录进行了删除,同时在原有的位置增加了新的记录以下是我的一段保存数据的代码
我先从表中查出数据放在MSHFlexGrid2中,然后进行一些修改,也就是我上面说的四种情况。
a没有任何变化。
b主键内容没有变化,对主键外的内容等进行了修改,
c把原有的记录进行了删除
d把原有的记录进行了删除,同时再原有的位置增加了新的记录。但是在保存是,提示插入重复数据,也就是说我把MSHFlexGrid2中的数据全部重新插入到表中,而实际上应该是:a:不需要任何动作
b:对数据进行UPDATE
c:对数据进行delete
d:对数据进行delete后在进行insert如果保存不成功,或则取消修改,数据应该还是a,b,c
如果保存成功,才是a,b,d。请问,对这样的情况是怎样处理的。
或则怎样做才能达到我修改后的数据存储到数据库的效果。
这样的情没有其他更好的方法
我知道可以用SQL进行操作,问题是我不能判断以上4种情况。Private Sub Command1_Click()
Dim rs2 As New ADODB.Recordset
Dim SQL, sql2, SQL4 As String
Dim i, j, m, n As Integer
If rs2.State = 1 Then
rs2.Close
End If
SQL = "select top 0 Epart,Edescshort,uom,item,descshort,unit,re from HGpofact"
rs2.CursorLocation = adUseClient
rs2.Open SQL, pubStrConn, adOpenDynamic, adLockBatchOptimistic
'写入recordset
For m = 1 To MSHFlexGrid2.Rows - 1
rs2.AddNew
rs2(0).Value = MSHFlexGrid2.TextMatrix(m, 1)
rs2(1).Value = MSHFlexGrid2.TextMatrix(m, 2)
rs2(2).Value = MSHFlexGrid2.TextMatrix(m, 3)
rs2(3).Value = MSHFlexGrid2.TextMatrix(m, 4)
rs2(4).Value = MSHFlexGrid2.TextMatrix(m, 5)
rs2(5).Value = MSHFlexGrid2.TextMatrix(m, 6)
Next m
If rs2.EOF And rs2.BOF Then
MsgBox "保存数据有误,请检查编码"
Exit Sub
End If
解决方案 »
- 关于输入回车键等于点了"确定"命令按钮如何设置
- 请教几个动态生成控件的问题
- listview 控件在那里!工具栏没有啊!莱鸟初到提问!
- 如何在菜单中添加ICO图片??
- vb中执行access里面的查询
- 天上★,亮晶晶,永灿烂,长安宁
- 有关打安装包的问题
- 还是那个老问提:怎么重命名文件夹??
- 我很想问个问题,现在大家做程序碰做大的困难是什么呢?
- Access数据库移植,升级(*.mdb)从一个Access2.0的文件变成Access2000的文件,该怎么做?
- 急~~~~,帮忙写两个SQL语句,很简单滴~~
- 感谢大家对北京泰思达公司的关注和厚爱,由于前来公司应聘者骤增,现将面试地点由公司改为上地五街路口,特此公告,谢谢
Dim rs2 As New ADODB.Recordset
Dim SQL, sql2, SQL4 As String
Dim i, j, m, n As Integer
If rs2.State = 1 Then
rs2.Close
End If
SQL = "select top 0 Epart,Edescshort,uom,item,descshort,unit,re from HGpofact"
rs2.CursorLocation = adUseClient
rs2.Open SQL, pubStrConn, adOpenDynamic, adLockBatchOptimistic
'写入recordset
For m = 1 To MSHFlexGrid2.Rows - 1
rs2.AddNew
rs2(0).Value = MSHFlexGrid2.TextMatrix(m, 1)
rs2(1).Value = MSHFlexGrid2.TextMatrix(m, 2)
rs2(2).Value = MSHFlexGrid2.TextMatrix(m, 3)
rs2(3).Value = MSHFlexGrid2.TextMatrix(m, 4)
rs2(4).Value = MSHFlexGrid2.TextMatrix(m, 5)
rs2(5).Value = MSHFlexGrid2.TextMatrix(m, 6)
Next m
If rs2.EOF And rs2.BOF Then
MsgBox "保存数据有误,请检查编码"
Exit Sub
End Ifrs2.UpdateBatch
rs2.Close
MsgBox "保存成功"End Sub
我已经开了好几贴了?
http://community.csdn.net/Expert/topic/4871/4871382.xml?temp=.2290918
谢谢。我按你的方法试试再说。
楼主,你放弃吧,我就没见过那几个版主和mvp来过。
我也不是想证明什么,但是我看到的事实就是这样。
1.把该表主键填充至MSHFlexGrid2的一个新列作为标记用,设为只读
2.修改数据时,当前行标记列数据不会变化
3.删除数据时,用动态数组记录当前行标记列数据值,并删除该行
4.新增数据行,当前行标记列数据因不可修改,值为NULL或0有了这些条件,就可以完成:
1.UPDATE 标记数据>0(主键)的行
2.DELETE 动态数组记录的所有主键值(删除行)
3.INSERT 标记数据=0或NULL值的行,同时生成新的主键值
Private Sub XG_MARK_DEL(ROW_S As Long) 'ID(Cell.Tag)保存到marrDeleted数组中,保存数据时用
If 当前行标记列数据值 > 0 Then'>0说明是在数据库已有数据,而不是新添加的数据行。
mlngCount = mlngCount + 1
ReDim Preserve marrDeleted(mlngCount) As Long
marrDeleted(mlngCount) = Val(Grid.Cell(ROW_S, 14).Tag)
End If
'以下移除行参考MSHFlexGrid移除行
Grid.RemoveItem ROW_S
Call Form_Resize
End Sub
谢谢你的热心帮助,我会参考你的建议。