不确定这是否适用于我打算的具体细节。方案是文本框中填充了表中的数据,用户编辑记录并单击要保存的按钮。
Dim cdb As DAO.Database, rstEdit As DAO.Recordset
Set cdb = CurrentDb
DataValues = "SELECT * FROM Companies, Link_Table WHERE Companies.CompanyID = " & SelectedValue & ";"
Set rstEdit = CurrentDb.OpenRecordset(DataValues, dbOpenSnapshot)
With rstEdit
OldCompanyName = !CompanyName
OldCompanyDescription = !Description
OldFriendlyName = !FriendlyName
OldAddressLine1 = !AddressLine1
OldAddressLine2 = !AddressLine2
OldAddressLine3 = !AddressLine3
OldTown = !Town
OldPostcode = !AddressPostcode
OldCounty = !AddressCounty
OldMainTelephone = !MainTelephone
OldMainEmail = !MainEmail
OldWeb = !WebAddress
'不确定这是否必要。在例子中引用了它,但不确定为什么? ^'
!CompanyName = NewCompanyName
!Description = NewCompanyDescription
!FriendlyName = NewFriendlyName
!AddressLine1 = NewAddressLine1
!AddressLine2 = NewAddressLine2
!AddressLine3 = NewAddressLine3
!Town = NewTown
!AddressPostcode = NewPostcode
!AddressCounty = NewCounty
!MainTelephone = NewMainTelephone
!MainEmail = NewMainEmail
!WebAddress = NewWeb
.Update
End With
但是,在单击“保存”按钮时,会出现错误,指出数据库或对象是只读的,我不确定原因。据我所知,它不是在任何地方开放,也不应该因任何原因而被打开!希望有人能够对这个问题有所了解。该表有一个主键集,即CompanyID,但是在例程中没有使用它。
答案 0 :(得分:3)
类型参数dbOpenSnapShot
位于:
Set rstEdit = CurrentDb.OpenRecordset(DataValues, dbOpenSnapshot)
使rstEdit作为只读记录集(或快照)打开。请考虑改为使用dbOpenDynaset
。
答案 1 :(得分:2)
如另一个答案所述,dbOpenSnapshot
选项会产生只读记录集。但是,一旦更改OpenRecordset
选项,您仍将保留只读记录集。
用作记录集来源的查询包括Companies
和Link_Table
之间的implicit cross join。意味着Companies
的每一行都与Link_Table
中的每一行匹配。这意味着Access会将查询视为只读,这反过来意味着记录集也将是只读的。
在查询设计器中构建并测试新查询,您可以在其中明确定义JOIN
条件。从简单的事情开始;在工作WHERE
之后,请忽略JOIN
子句。
SELECT *
FROM
Companies
INNER JOIN Link_Table
ON Companies.link_field = Link_Table.link_field;
注意:
JOIN
是一对多的,您应该能够在“很多”一侧编辑表中的字段,但可能无法编辑“一”表中的字段JOIN
。答案 2 :(得分:0)
尝试在OpenRecordset方法中指定可编辑的LockEdits
参数。
Set recordset=object.OpenRecordset(source, type, options, lockedits)
在LockEdits
方法的OpenRecordset
参数中使用以下常量之一时,可以创建可编辑记录集:
dbOptimistic, dbPessimistic, dbOptimisticValue, or dbOptimisticBatch
来源 VBA:运行时错误'3027'使用ODBCDirect打开RecordSet:http://support.microsoft.com/kb/161252