带我疯子...
问题是速度之一。
我有一个正常工作的SQL Server,它链接到一个可访问客户端的网站,我想添加一个access前端,以使我们在办公室工作的人员能够更好地支持客户端和现场人员。
我构建的当前表单是一个主表单,其中包含五个子表单,从而在一个视图中为我们提供了所有相关的客户信息。但是,这需要24秒才能加载单个客户端的完整记录。
我查看了SQL Server,发现没有索引,将其修复后将时间缩短到24秒,根据客户端的不同,相应的负载也接近18秒(有些记录很多)。这可能是可以的,因为这是现实世界中计算时间的相对永恒,但是还不错。我想看看是否可以通过更改连接方式以及表单与记录的绑定方式等来获得更好的负载。
在查看各种想法并阅读了大量内容后,我发现: https://docs.microsoft.com/en-us/office/vba/access/concepts/activex-data-objects/bind-a-form-to-an-ado-recordset?source=docs
之所以吸引我,是因为我更倾向于使用ADO,很少使用DAO。我最初了解的ADO旨在与SQL等配合使用,这似乎是一个明智的主意。
据我所知,如果我可以解决这个问题,它将作为通过查询的方式,仅通过网络返回一个记录,因此应大大加快我的表格的速度。但是,它将无法正常工作。
我的代码是:
Private Sub csssetform(lngID As Long)
Dim cnn As New ADODB.Connection
Dim Rs1 As New ADODB.Recordset
Dim strSQL As String
Dim strR As String
cnn = "Provider=MSOLEDBSQL;Server=Server;Database=DatabaseName;UID=username; PWD=Password;"
cnn.Open
strSQL = "SELECT Clients.Clientid,Clients.accountContact,Clients.accountEmail,Clients.Address,Clients.Name,Clients.OfficePhone,Clients.PostCode," & _
"Clients.Shentonacc,Clients.Suburb FROM Clients WHERE (((Clients.Clientid)=" & lngID & "));"
With Rs1
Set .activeConnection = cnn
.Source = strSQL
.LockType = adLockPessimistic
.CursorType = adOpenKeyset
.Open
End With
Debug.Print Rs1.RecordCount
Me.Recordset = Rs1
End sub
现在直到Me.Recordset = rs1生成错误3251时我都没有错误,这种类型的对象不支持该操作,这对于了解为什么与我没有区别的人不支持该功能的人来说非常好可以看到我复制的示例。
根据错误消息,我不明白为什么我正在处理的表单不支持记录集?我的代码中有错误吗?我对链接站点破坏的理解是否是错误的?错误还有吗?
感谢您的帮助