VB中用res.Update更新数据库 没有成功
rzysl 2009-03-24 11:19:14 故障说明:1、整个客户端和服务器端的数据接收过程没有问题,用Debug.Print 测试过。
2、问题可能出在UpDataToSKDengji()这个过程里
3、自己在调试运行程序时出现了两种情况:一是客户端和服务器的数据互相发送的整个过程都有完成,而且有成功更新数据库。
二是客户端和服务器的数据互相发送的整个过程也有完成,可是数据库更新没有完成,打开数据所在的文件夹,
可以看到数据还是处于打开状态。说明res.close和con.close没有起作用,那么是不是Res.Update出现
了问题。这个是我最大的困惑,要怎么解决?
4、有人说用SQL的Con.Execute 来更新数据库会好一点,可是我用下面这段代码也没有起作用。
Dim i As Long, sqln As String, sqlv As String
sqln = Res.Fields(0).Name
sqlv = ShuJu(1)
For i = 1 To Res.Fields.Count - 1
sqln = sqln & "," & Res.Fields(i).Name
sqlv = sqlv & "," & ShuJu(i + 1)
Next i
Con.Execute "insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")"
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim ClientData As String, CommandStr() As String
On Error Resume Next
If Index = 0 Then Exit Sub
With WSServer(Index)
.GetData ClientData '获取数据
CommandStr = Split(ClientData, "|")
'Split将字符串以"|"为分隔符,自动分离到一维数组中
Debug.Print "接到的协议命令:" & CommandStr(0)
Select Case CommandStr(0)
Case CLI_READY_SENDDATA
MainData(Index).theLength = Val(CommandStr(1)) 'CommandStr(1)是从客户端接收到的信息,内容是要传递过来的数据量大小
.SendData SER_READY_RECEIVE_DATA
Case CLI_DENGRU '客户端传来 登入 信息
'----------调用过程将分离出来的信息添加到RZ_jfgl.mdb的SKDengJi表中------
Call UpDataToSKDengji("SKDengJi", CommandStr(), UBound(CommandStr))
'参数说明:1、要连接的数据表名称,2、要添加到字段中的各个数据内容,3、数组个数
'问题就从这里开始,调用的过程没有起作用,也就是数据库没有正常更新成功
'-----------------------------------------------------------------------
.SendData SER_RECEIVE_COMPLET '返回"数据接收完成"
DoEvents
Exit Sub '本次响应完成,退出这次的 数据达到 事件,等待下次 数据达到 响应
Case CLI_READY_CLOSE '客户端请求断开连接
.SendData SER_ALLOW_CLOSE '允许断开连接
.Tag = "Unload" '允许卸载
MainData(Index).theState = 0
DoEvents
timerUnloadWsk = True '启动定时器,回收当前WINSOCK
Exit Sub '本次响应完成,退出这次的 数据达到 事件,等待下次 数据达到 响应
End Select
End With
End Sub
Private Sub UpDataToSKDengji(ByVal ShuJuBiao As String, ByRef ShuJu() As String, ByVal ShuJuCount As Long)
'编写一个将数据添加到数据库的过程,一个数据表名称,一个数组名(按地址传递),一个数组个数
Dim i As Long, sqln As String, sqlv As String
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\rz_jfgl.mdb;Persist Security Info=False"
Res.Open "select * from " & ShuJuBiao, Con, adOpenKeyset, adLockOptimistic
'--------添加学生信息到记录集中-----
Res.AddNew
For i = 1 To ShuJuCount
If i = 1 Then '数值类型
Res.Fields(i - 1).Value = Val(ShuJu(i))
' Debug.Print "有进到 1 中:" & Res.Fields(i - 1).Value
ElseIf i = 7 Then '布尔类型
Res.Fields(i - 1).Value = CBool(Val(ShuJu(i)))
' Debug.Print "有进到 7 中:" & Res.Fields(i - 1).Value
Else
Res.Fields(i - 1).Value = ShuJu(i)
' Debug.Print "第" & i & "个字段赋值成功:" & Res.Fields(i - 1).Value
End If
Next i
Res.Update '问题是不是出在这里,是不是res的Update工作机制不适合我这段程序
'-----------------------------------
Set MSHFlexGrid1.DataSource = Res '在网格中显示数据库记录,方便程序编写
Res.Close
Set Res = Nothing
Con.Close
MsgBox ("数据库添加后,关闭数据库,返回成功!")
'有执行的时候,数据库操作就正常,没有执行,数据库操作就没有完成,是什么原因?Res.Close和Con.Close没有完成
End Sub