- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个表单以使用断开连接的 ADODB.Recordset 作为其源。
我遇到的问题是,关闭表单并对提示回复"is"后,更改不会保存到原始 Access 表中。我错过了什么?
注意:请不要告诉我方法没用,它只是一个带有本地表的POC,我打算稍后尝试使用更“远”的记录集。
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Form_Load()
Set conn = New ADODB.Connection
conn.Open CurrentProject.Connection
Set rs = New ADODB.Recordset
With rs
rs.CursorLocation = adUseClient
rs.Open "select * from amsPor", conn, adOpenStatic, adLockBatchOptimistic
Set rs.ActiveConnection = Nothing
End With
Set Me.Recordset = rs
conn.Close
End Sub
Private Sub Form_Unload(Cancel As Integer)
Select Case MsgBox("Save changes ?", vbQuestion + vbYesNoCancel)
Case vbNo
'do nothing
Case vbYes
conn.Open CurrentProject.Connection
rs.ActiveConnection = conn
rs.UpdateBatch
rs.Close
conn.Close
Set conn = Nothing
Case vbCancel
Cancel = True
End Select
End Sub
select
中的表名条款。 Record Source
形式的属性。 CurrentProject.Connection
?
? CurrentProject.Connection
并得到以下信息:
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\\xxxxxx\yyyy$\Documents\AMS.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\Users\G828992\AppData\Roaming\Microsoft\Access\System.mdw;Jet OLEDB:Registry Path=Software\Microsoft\Office\14.0\Access\Access Connectivity Engine;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=True;Jet OLEDB:Bypass UserInfo Validation=False
最佳答案
我来到这里寻找与您相同的答案,经过大量的谷歌搜索和反复试验,我终于能够准确地执行您正在尝试做的事情。我知道这是一篇旧帖子,但我没有看到任何实际提供的答案可以让您尝试做的事情的答案。我将使用您的示例并尝试应用我必须更改和添加的内容以使其正常工作。
Dim rs As ADODB.Recordset
Dim conn As ADODB.Connection
Private Sub Form_Load()
If CurrentProject.Connection.State = adStateOpen Then CurrentProject.Connection.Close
Set conn = New ADODB.Connection
conn.Open CurrentProject.Connection.ConnectionString
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "select * from amsPor", conn, adOpenForwardOnly, adLockBatchOptimistic
If Not rs Is Nothing Then
If Not rs.ActiveConnection Is Nothing Then Set rs.ActiveConnection = Nothing
If Not (rs.eof And rs.BOF) Then
Set Me.Recordset = rs
End If
If conn.State = adStateOpen Then
conn.Close
End If
End If
Call AddNewRecord(Me.Recordset)
End Sub
Private Sub AddNewRecord(ByRef rs As ADODB.Recordset)
On Error Resume Next
If Not rs Is Nothing Then
If rs.Supports(adAddNew) Then
rs.AddNew
rs.Fields("FirstName").Value = "John"
rs.Fields("LastName").Value = "Doe"
If rs.Supports(adUpdate) Then rs.Update
End If
End If
If Err.Number <> 0 Then
Debug.Print "AddNewRecord Err Msg: " & Err.Description
Err.Clear
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Select Case MsgBox("Save changes ?", vbQuestion + vbYesNoCancel)
Case vbYes
Call UpdateDbWithRS(Me.Recordset)
Case vbCancel
Cancel = True
Case Else
' Nothing.
End Select
End Sub
Private Sub UpdateDbWithRS(ByRef rs As ADODB.Recordset)
If Not rs Is Nothing Then
If CurrentProject.Connection.State = adStateOpen Then CurrentProject.Connection.Close
Set conn = New ADODB.Connection
conn.Open CurrentProject.Connection.ConnectionString
rs.ActiveConnection = conn
If rs.Supports(adUpdateBatch) Then
rs.UpdateBatch
If Not conn Is Nothing Then
If conn.State = adStateOpen Then conn.Close
Set conn = Nothing
End If
If Not rs Is Nothing Then
If rs.State = adStateOpen Then rs.Close
Set rs = Nothing
End If
End If
End If
End Sub
conn.Open CurrentProject.Connection
至
conn.Open CurrentProject.Connection.ConnectionString
, 加入代码
If CurrentProject.Connection.State = adStateOpen Then CurrentProject.Connection.Close
修复我收到的有关已打开连接的错误。然后我做的最后一个最大的改变是更换了你的
光标类型 的
adOpenStatic
至
adOpenForwardOnly
.我不确定是否真的需要最后一次更改,但我根据在此
Microsoft Support Site 上找到的断开连接的 RecordSet 示例使用了它。 .
关于vba - 访问表单链接到断开连接的 ADODB.Recordset : save changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504015/
我有一个非常简单的查询,它只返回一条记录。当我尝试从唯一记录中的唯一列中获取值时,我得到“BOF 或 EOF 为真,或者当前记录已被删除。请求的操作需要当前记录。”这里发生了什么?如果 RecordC
任何人都可以解释MS Access 2007中DAO.Recordset,DAO.Recordsets和DAO.Recordset2之间的区别吗?基本上使用记录集。...举一个例子,使它更清晰。我从“
我正在尝试使用 ADODB 通过 VBA(在 Excel 中)从 MySQL 检索记录集。我可以通过网络成功连接到 MySQL 数据库,甚至可以使用 ADOX 返回表的列表,但是当我尝试返回记录集时,
Below we will attempt to access data from a database without knowing the column names. Clearly the
我的问题如下: 我需要为记录集分配一个值。问题是我需要使用一个变量。所以,而不是写这个 MyRecordSet![field_name] 我需要写这个 MyRecordSet![variable_na
我想将记录集中的数据粘贴到工作表中的 3 列。 rs.Open "SELECT [Sheet1$].Security,[Sheet1$].Description,[Sheet1$].ID FROM
我正在使用基于数据库中数据的谷歌图表框架...... 我需要生成如下输出: ([ ['Year', 'ON', 'OFF', 'X1', 'X2'], ['Jan/12',
不确定这是否会在我打算的细节中起作用。场景是文本框填充了表中的数据,用户编辑记录并单击按钮进行保存。 Dim cdb As DAO.Database, rstEdit As DAO.Recordset
如何访问脚本任务中的 RecordSet 变量? 最佳答案 在脚本选项卡上,确保将变量放在 readonlyvariables 或 readwritevariables 文本框中。 这是一个简单的脚本
我想知道是否可以使用命名范围列表将数据添加到 ADODB 记录集,而无需在单独的行上指定名称。 我尝试评估该名称,但记录集将我的变量作为名称而不是评估它。这会导致错误,因为数据库中没有包含我的变量名称
我面临着一个小问题,我似乎无法解决这个问题。我不想使用 SQL,而是想使用 vba 检查两个表之间的重复项。所以,我所做的就是创建两个记录集。每个表一个,只需检查是否可以在一个记录集中找到文档编号,同
我想知道是否有人可以帮助我。我正在尝试从 sql 表返回的记录集填充公共(public)字典。 一切似乎都很好,除了一个部分。我不知道它是否没有正确计算字典中的键数,或者它们没有被正确输入但是无论出于
由于我收到了如此好的快速解决方案,我将再次尝试从您那里获得一些帮助: 我打开了两个记录集。 Set cmd1.ActiveConnection = cn1 cmd1.CommandText = "
应我最初问题的回复者的要求 here , 我被要求改写问题以深入了解实际需求。 我可以使用什么Strongly-Typed 数据结构来保存多个RecordSet 的集合,其中每个RecordSet 将
我打算使用 MS Access 作为我程序的数据库。我对 MS Access 一无所知,此时我正在进行反复试验和大量研究。在我的研究中,我发现 Seek 方法可以快速定位与指定值匹配的行。但是,似乎提
1.建立Recordset对象 复制代码代码如下: Dim objMyRst Set objMyRst=Server.CreateObject(“ADOD
我正在寻找可以修复此运行时构建的 VBA 代码,或有关可能导致此问题的建议。 我正在运行一个 VBA 脚本,该脚本使用 ADODB 从 SQL Server 数据库中检索数据。我已经在将数据复制到我的
我正在尝试在 Access VBA 中创建一个记录集,它将向我显示与表单当前记录相关的表中的所有记录。我当前的代码如下所示: Private Sub Form_Load() Dim rst A
我最近遇到过vba更新语句,并且我一直在使用Recordset.Edit和Recordset.Update不仅编辑我现有的数据,而且要对其进行更新。 我想知道两者之间的区别:recordset.upd
我需要更新 Excel VBA 中的记录集。我从 CSV 中提取数据并使用文本驱动程序连接到该文件。这是我与文件、记录集和更新代码的连接。 Dim con As New ADODB.Connectio
我是一名优秀的程序员,十分优秀!