【发布时间】:2021-02-10 08:12:42
【问题描述】:
我是一名“星期日”开发人员,试图在 MS Access 中创建一个关于“作家和书籍”的数据库,与多对多的关系。 我有一张“书”表、一张“作者”表和一张用于多对多关系的中间表。 我写了几行来更新“中间”表,在表单(作者)的子表单(书)上有一个组合框。 问题是:当我通过组合框添加新的“书”时,代码更新表“书”和中间表,刷新不是立即的,所以我无法立即在组合框上找到新值,而只能按下菜单栏上的“全部刷新”图标后。
Private Sub ID_COL_LIBRO_NotInList(NewData As String, Response As Integer)
On errot GoTo Error_Handler
Dim IntAnswer As Integer
Dim Sqlstring As String
IntAnswer = MsgBox(" " & NewData & " è un nuovo nominativo. " & vbCrLf _
& "vuoi aggiungerlo adesso ?", vbYesNo + vbQuestion, "Nome Sconosciuto")
Select Case IntAnswer
Case vbYes
Sqlstring = "INSERT INTO LIBRI (TITOLO) VALUES ( '" & NewData & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL Sqlstring
Dim datab As DAO.Database
Dim rcslibri As DAO.Recordset
Dim strultrec As String
Set prova_relazione_m_a_m = CurrentDb
Set rstlibri = prova_relazione_m_a_m.OpenRecordset("LIBRI")
rstlibri.MoveLast
strlastrifliblibro = rstlibri!RIF_LIB_LIBRO
Dim str_idcolaut As String
str_idcolaut = Me!RIF_AUT_AUTORE.Value
Sqlstring = "INSERT INTO tab_collegamento (id_col_libro, id_col_autore) VALUES ( '" & strlastrifliblibro & "','" & str_idcolaut & "')"
DoCmd.RunSQL Sqlstring
DoCmd.SetWarnings True
rstlibri.Close
Response = acDataErrAdded
Case vbNo
MsgBox "Allora seleziona un nome dalla lista.", vbExclamation + vbOKOnly, "Selezione errata"
End Select
Response = acDataErrContinue
exit_procedure:
DoCmd.SetWarnings True
Exit Sub
Error_Handler:
MsgBox Err.Number & ", " & error_Description
Resume exit_procedure
Resume
End Sub
【问题讨论】:
-
您不需要输入更多关于新书的数据而不仅仅是书名吗?为什么不打开输入此记录的表格?评论blueclawdatabase.com/notinlist-event-code
-
您需要
.Requery数据源才能获取更新。如果您的组合源是查询,则需要调用其 requery 方法来更新项目,例如Combo.Requery。表单也是如此。 -
@KostasK.,acDataErrAdded 应该是重新查询组合框。也不应该需要重新查询命令。 docs.microsoft.com/en-us/office/vba/api/…
-
@Gianni,应该在代码模块的顶部添加
Option Explicit。可以在具有应用程序选项设置的新模块中默认实现这一点。你有单步调试过的代码吗? -
最佳实践是在过程顶部声明所有变量。 On errort GoTo Error_Handler 中存在拼写错误。缩进使代码更易于阅读 - 我已经为此进行了编辑。
标签: vba ms-access refresh relationship