DoCmd.OpenForm 以只读模式打开表单.访问 2016 (VBA)



我正在尝试使用一个前端和一个后端文件来模拟客户端-服务器结构。我的前端包含一个索引表单,其中列出了后端表的所有记录。双击一个条目应该打开相应的单个表单,它就是这样做的,但是一旦打开,我就无法编辑单个页面(类似于不久前的这篇文章 vba 访问表单不是只读的(。在左下角只是闪烁一个简短的"Formular ist schreibgeschützt",这意味着表单处于只读模式。

作为旁注:我没有自己创建任何访问数据库。它们是作为培训课程的一部分提供的。

我尝试了几件事,但显然,我对任何与 VBA 相关的内容都没有牢牢掌握,所以我似乎错过了一些东西(可能是显而易见的东西(。

由于我不确定它是否与 NTFS 权限有关(我通常不在 Windows 上工作(,我将两个文件(后端和前端(放在我的 c 驱动器上的一个文件夹中,并让每个人都可以完全访问该文件夹,即使我是唯一一个尝试使用它们的人,只是为了确定。由于这并没有改变任何东西,我收集到错误必须在我的代码中。

我将给出一个可能相关的代码位的逻辑列表,尽管这并不反映我之前尝试找到解决方案的顺序。

我使用早期绑定 ADODB 连接到访问 2016 后端数据库,因此在引用中"Microsoft ActiveX 数据对象 6.1 库"处于活动状态。

连接以及记录集和基 sql 字符串是全局声明的(在其自己的模块中(,因此可以在整个代码中访问它们。

Public Conn As ADODB.Connection
Public rs As ADODB.Recordset
Public xSQL As String

连接是在加载索引表单时建立的(在打开数据库时加载(。起初,我没有联系。模式设置,然后我尝试了adModeReadWrite和adModeShareDenyNone无济于事。

Private Sub Form_Load()
Set Conn = New ADODB.Connection
Conn.Provider = "Microsoft.ACE.OLEDB.16.0"
Conn.ConnectionString = CurrentProject.Path & "MitgliederlisteDaten.accdb"
Conn.CursorLocation = adUseClient
Conn.Mode = adModeShareDenyNone
Conn.Open
'conn.state at this point is 1
xSQL = "SELECT * FROM tblMitgliederliste INNER JOIN tblTyp ON tblMitgliederliste.TypID = tblTyp.TypID"
Set rs = New ADODB.Recordset
rs.Open xSQL, Conn, adOpenDynamic, adLockOptimistic
Set Me.Recordset = rs
End Sub

只要索引表单和单个表单正确显示,连接就会起作用。

双击一个条目应该打开相应的单个表单,这是用一个简单的docmd.openform完成的,尽管我尝试将数据模式设置为acFormEdit。

Private Sub MitgliedsNr_DblClick(Cancel As Integer)
DoCmd.OpenForm "frmAdresse"
'DoCmd.OpenForm "frmAdresse", , , , acFormEdit
End Sub

填充单个窗体发生在相应的 load 事件中。

Private Sub Form_Load()
Dim memberSQL As String
memberSQL = xSQL & " WHERE MitgliedsNr= " & Forms("frmAdressliste")!MitgliedsNr
Dim rs As New ADODB.Recordset
rs.Open memberSQL, Conn, adOpenDynamic, adLockPessimistic
Set Me.Recordset = rs
Dim cmbSQL As String
cmbSQL = "SELECT TypID, Typ FROM tblTyp IN '"
cmbSQL = cmbSQL & CurrentProject.Path & "MitgliederlisteDaten.accdb"
cmbSQL = cmbSQL & "' ORDER BY Typ"
Me.cmbTyp.RowSource = cmbSQL
Me.cmbTyp.ColumnCount = 2
Me.cmbTyp.ColumnWidths = "0cm;4cm"
Me.Form.AllowEdits = True
End Sub

我已经盯着它看了很长时间,以至于我无法辨认出可能明显的错误。希望有人能为我指出正确的方向。提前感谢您的任何回答或建设性的批评。

亲切问候

谢谢你们的帮助。我刚刚从头开始完成了整个重建,现在它可以工作了。我还不明白为什么。

为了尽快找到问题点,我构建了 xSQL 字符串,我用它来以不同的方式为我的索引表单构建记录集。 而不是

xSQL = "SELECT * FROM tblMitgliederliste INNER JOIN tblTyp ON tblMitgliederliste.TypID = tblTyp.TypID"

我选择了更短的

xSQL = "SELECT * FROM tblMitgliederliste"

计划稍后实施 JOIN。但这实际上就是所有需要的,因为现在我可以通过双击打开单个表单,并根据自己的喜好进行编辑和删除,而无需更改原始代码的任何其他内容。

一旦我完成了备份并呼吸了一些新鲜空气,我将开始玩扩展字符串,看看它是否真的是问题所在,尽管我不太清楚它是如何做到的。

最新更新