我正在尝试使用一个前端和一个后端文件来模拟客户端 - 服务器结构。我的前端包含一个索引表单,列出了我的后端表的所有记录。双击一个条目应该打开相应的单个表单,它就是这样,但是一旦它打开,我就无法编辑单个页面(类似于这篇文章的背后vba access form not read-only)。在左下角只是闪烁一个短的“Formularistschreibgeschützt”,这意味着表格处于只读模式。
作为旁注:我自己没有创建任何访问数据库。它们是培训课程的一部分。
我尝试了几件事,但很明显,我没有把握任何与VBA相关的东西,所以我似乎错过了一些东西(可能是显而易见的东西)。
由于我不确定它是否与NTFS权限相关(我通常不在Windows上工作)我将两个文件(后端和前端)放在我的驱动器上的一个文件夹中,并让每个人都可以完全访问那个文件夹,即使我是唯一一个试图与他们合作的人,只是为了确定。由于这没有改变任何东西,我收集错误必须在我的代码中。
我将给出一个可能相关的代码位的逻辑列表,但这并不反映我之前尝试找到解决方案的顺序。
我使用早期绑定ADODB连接到访问2016后端数据库,因此在引用“Microsoft ActiveX Data Objects 6.1 Library”中处于活动状态。
连接,以及记录集和基本sql字符串是全局声明的(在它们自己的模块中),因此可以在整个代码中访问它们。
Public Conn As ADODB.Connection
Public rs As ADODB.Recordset
Public xSQL As String
加载索引表单(打开数据库时加载)时建立连接。起初,我没有conn.Mode设置,然后我尝试了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完成的,尽管我尝试将DataMode设置为acFormEdit
Private Sub MitgliedsNr_DblClick(Cancel As Integer)
DoCmd.OpenForm "frmAdresse"
'DoCmd.OpenForm "frmAdresse", , , , acFormEdit
End Sub
在相应的加载事件中填充单个表单。
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
我已经盯着它看了很长时间,以至于我无法弄清楚可能明显的错误。希望有人可以指出我正确的方向。提前感谢任何答案或建设性的批评。
亲切的问候
答案 0 :(得分:0)
谢谢你们的帮助。我刚从头开始重建整个事情,现在它可以工作了。我不明白为什么,但是。
为了尽可能快地到达故障点,我构建了xSQL字符串,我用它来为我的索引表单构建不同的记录集。 而不是
xSQL = "SELECT * FROM tblMitgliederliste INNER JOIN tblTyp ON tblMitgliederliste.TypID = tblTyp.TypID"
我选择了更短的
xSQL = "SELECT * FROM tblMitgliederliste"
计划稍后实施JOIN。但实际上这就是我现在所能花的所有事情,因为现在我可以通过双击打开单个表单,编辑并删除我心中的内容,而不会改变原始代码中的任何内容。
一旦我完成备份并获得新鲜空气,我将开始玩扩展字符串以查看它是否真的是问题,但我不太清楚它是怎么回事。 / p>