可不可以在客户端组织数据到一个Recordset,然后一次性Update到另外一个数据源

时间:2022-06-19 23:21:35
如题,不知道讲明白没有,另一个数据源是SQL Server,
不想用DTS,也不想用链接服务器,客户端用VB编程

7 个解决方案

#1


可以,ADO 可以使用 内存数据集
不需要任何数据源
参考
当然可使用记录集
因为记录集可以直接创建在内存中
Dim Rs As New ADODB.Recordset
Dim II As Long

Rs.CursorLocation = adUseClient
Rs.Fields.Append "Col1", adVarChar, 20
Rs.Fields.Append "Col2", adVarChar, 20
Rs.Fields.Append "Col3", adVarChar, 20
Rs.Fields.Append "Col4", adVarChar, 20


Rs.Open "me"




'把表格中的数据搬到数据集,再借助 .Find 即可查找,速度超快

For II = 1 To 1000
'插入1000行
    Rs.AddNew
    Rs(0).Value = "a" & II & 1
    Rs(1).Value = "b" & II & 2
    Rs(2).Value = "c" & II & 3
    Rs(3).Value = "d" & II & 4
    Rs.Update
Next



Rs.MoveFirst

Rs.Find "Col1='a11'"


If Rs.EOF = False Then
    MsgBox Rs(0)
End If



Rs.Close

#2


感谢zlt982001(乐天)

那么,怎么把这个Recordset的内容更新另到一个SQL Server数据源里呢?

#3


可能有些朋友不明白为什么要这样,那时因为客户端需要采集很多数据,但是和服务器又不是24小时随时连接,并且网络情况又不太好,不能容许一条一条记录插入,那将花费大量时间,Bulk Insert是不错的,但是很麻烦,要把数据文件通过其它方式传到服务器上。
我想,如果有一种机制把内存Recordset直接更新到服务器数据源上岂不是更方便。
也许想法天真了。但是请知道的朋友帮帮我。不胜感激。

#4


我们用asp来处理
客户端,生成xml后,提交到远程asp文件
Private Sub CustomerManager_PostCustomerTable(ByVal rs As ADODB.Recordset)
  Dim RequestDoc As MSXML.DOMDocument
  Set RequestDoc = New MSXML.DOMDocument
  rs.Save RequestDoc, adPersistXML
  Dim httpRequest As New MSXML.XMLHTTPRequest
  httpRequest.Open "POST", sURL & "PostCustomerTable.asp", False
  httpRequest.send RequestDoc
  ' throw assert on any return status other than 200
  If httpRequest.Status <> 200 Then
    MsgBox httpRequest.statusText, , httpRequest.Status
  End If
End Sub

服务端
<%@ Language=VBScript %>

<%

  dim rs
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open Request
  rs.UpdateBatch
%>

#5


无论何种方式,最终都是要一条条更新的,只不过是一次性的一条条更新而已


你可以选择,

1。将内存记录集保存为文件,将文件传送给服务器端,服务器端读取,更新

2。连接服务器端,用记录集更新



#6


谢谢online(龙卷风V3.0--笑傲江湖) & zlt982001(乐天)
结贴了。

通过两位的方法,我想能够解决我提出的问题了。非常感谢。

#7


很久没上CSDN了,不知道怎么给分了,看了帮助也没找到

不好意思

#1


可以,ADO 可以使用 内存数据集
不需要任何数据源
参考
当然可使用记录集
因为记录集可以直接创建在内存中
Dim Rs As New ADODB.Recordset
Dim II As Long

Rs.CursorLocation = adUseClient
Rs.Fields.Append "Col1", adVarChar, 20
Rs.Fields.Append "Col2", adVarChar, 20
Rs.Fields.Append "Col3", adVarChar, 20
Rs.Fields.Append "Col4", adVarChar, 20


Rs.Open "me"




'把表格中的数据搬到数据集,再借助 .Find 即可查找,速度超快

For II = 1 To 1000
'插入1000行
    Rs.AddNew
    Rs(0).Value = "a" & II & 1
    Rs(1).Value = "b" & II & 2
    Rs(2).Value = "c" & II & 3
    Rs(3).Value = "d" & II & 4
    Rs.Update
Next



Rs.MoveFirst

Rs.Find "Col1='a11'"


If Rs.EOF = False Then
    MsgBox Rs(0)
End If



Rs.Close

#2


感谢zlt982001(乐天)

那么,怎么把这个Recordset的内容更新另到一个SQL Server数据源里呢?

#3


可能有些朋友不明白为什么要这样,那时因为客户端需要采集很多数据,但是和服务器又不是24小时随时连接,并且网络情况又不太好,不能容许一条一条记录插入,那将花费大量时间,Bulk Insert是不错的,但是很麻烦,要把数据文件通过其它方式传到服务器上。
我想,如果有一种机制把内存Recordset直接更新到服务器数据源上岂不是更方便。
也许想法天真了。但是请知道的朋友帮帮我。不胜感激。

#4


我们用asp来处理
客户端,生成xml后,提交到远程asp文件
Private Sub CustomerManager_PostCustomerTable(ByVal rs As ADODB.Recordset)
  Dim RequestDoc As MSXML.DOMDocument
  Set RequestDoc = New MSXML.DOMDocument
  rs.Save RequestDoc, adPersistXML
  Dim httpRequest As New MSXML.XMLHTTPRequest
  httpRequest.Open "POST", sURL & "PostCustomerTable.asp", False
  httpRequest.send RequestDoc
  ' throw assert on any return status other than 200
  If httpRequest.Status <> 200 Then
    MsgBox httpRequest.statusText, , httpRequest.Status
  End If
End Sub

服务端
<%@ Language=VBScript %>

<%

  dim rs
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open Request
  rs.UpdateBatch
%>

#5


无论何种方式,最终都是要一条条更新的,只不过是一次性的一条条更新而已


你可以选择,

1。将内存记录集保存为文件,将文件传送给服务器端,服务器端读取,更新

2。连接服务器端,用记录集更新



#6


谢谢online(龙卷风V3.0--笑傲江湖) & zlt982001(乐天)
结贴了。

通过两位的方法,我想能够解决我提出的问题了。非常感谢。

#7


很久没上CSDN了,不知道怎么给分了,看了帮助也没找到

不好意思