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
...全文
500 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2009-03-28
  • 打赏
  • 举报
回复
Data Source=
都没指定服务器....
ryszx1 2009-03-28
  • 打赏
  • 举报
回复
帮你顶一下,我也有类似的问题!

Con.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=db_FABD03;Data Source=."
Res.Open "select * from 图书信息表", Con, adOpenStatic, adLockReadOnly

我用模仿书本上的写法,这样连接数据库,可是还是提示Con.Open ......这句有错误


rzysl 2009-03-28
  • 打赏
  • 举报
回复
结果不满意哦,高手们都指给了一个思路,就不能给我一个明确点,有参考价值的代码吗?
特别是SQL语句指点一下也好呀,小弟找不到这方面的参考书或资料
rzysl 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yorkness 的回复:]
你单步运行,当程序运行到
con.Execute "insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")" 时,你可以在立即窗口里面看一下
"insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")"的实际内容是什么,就可以知道为什么插入不能成功了
[/Quote]

谢谢提供这个调试思路。
可以试一下。
rzysl 2009-03-25
  • 打赏
  • 举报
回复
谢谢楼上的回复,不过这里没有错,是因为传递过来数据数组比字段是多一个的,而shuju(0)是不放入字段的。
yorkness 2009-03-25
  • 打赏
  • 举报
回复
老兄,在
For i = 1 To Res.Fields.Count - 1
sqln = sqln & "," & Res.Fields(i).Name
sqlv = sqlv & "," & ShuJu(i + 1)
Next i
中,sqlv = sqlv & "," & ShuJu(i + 1) 这个肯定错了,应该改为

sqlv=""
sqln=""
For i = 1 To Res.Fields.Count - 1
if i=1 then
sqln = Res.Fields(i).Name
sqlv = "'" & ShuJu(i) & "'"
else
sqln = sqln & "," & Res.Fields(i).Name
sqlv = sqlv & ",'" & ShuJu(i) & "'"
end if
Next i

yorkness 2009-03-25
  • 打赏
  • 举报
回复
你单步运行,当程序运行到
con.Execute "insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")" 时,你可以在立即窗口里面看一下
"insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")"的实际内容是什么,就可以知道为什么插入不能成功了
Tiger_Zhao 2009-03-25
  • 打赏
  • 举报
回复
On Error Resume Next
你将所有的错误都忽略了,谁知道错在哪里!
rzysl 2009-03-25
  • 打赏
  • 举报
回复
郁闷呀,调试不出来,还有人能给我明确一点的代码吗?
先说明一下:Private Sub WSServer_DataArrival()
......
end sub 这个过程没有问题,放上来,是为了让大家能比较容易理解我代码要做什么。这里主要是和客户端进行数据相互传递。

我的主要问题在下面的数据的更新要如何做?
有人提出不要用这样的更新方式,有人能直接给我提供一个可参考的代码吗?

用INSERT INTO 语句到底要如何编写?

拜谢呀!!!
rzysl 2009-03-24
  • 打赏
  • 举报
回复
Insert into语句具体怎么实现。给个具体的代码好吗,谢谢!

或者帮我看看我问题中的第4点,也是用con.Execute "insert into " & ShuJuBiao & "(" & sqln & ") values (" & sqlv & ")"
可是没有成功,是不是那段代码有问题!

谢谢了!
  • 打赏
  • 举报
回复
只不过是一个插入语句,用INSERT INTO 语句写吧
rzysl 2009-03-24
  • 打赏
  • 举报
回复
用sql的是否会好一点?
提出“不建议这种写法”的朋友,能说说具体怎么做吗?最好给出代码,谢谢了。

Tiger_Zhao:如何才能做到更新和现实分开来?如何保证这个时间间隔,有好的思路吗?

谢谢
Tiger_Zhao 2009-03-24
  • 打赏
  • 举报
回复
将 RecordSet 绑定到 MSHFlexGrid 后,它正在填充数据,你不一定能成功关闭。
更新和显示要分开来。
还有你 DataArrival 的事件间隔是否足够完成数据库操作?
ChinaITOldMan 2009-03-24
  • 打赏
  • 举报
回复
不建议这种写法

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧