【发布时间】:2020-09-01 16:00:39
【问题描述】:
当尝试运行以下代码时,当它遇到Dim qdf As QueryDef 说时出现错误
用户自定义类型未定义
我认为这真的很奇怪,因为我有同一个项目的备份,在它之后没有进行太多更改,这完全可以正常工作。我试图追溯自己的脚步,并为此苦苦挣扎。
关于我可能遗漏什么的任何线索?我已经尝试了Tools > References 的常见建议并从那里添加,无论如何我之前没有它就可以工作。
Private Sub Complete_Click()
Set objAD = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objAD.UserName)
strDisplayName = objUser.DisplayName
Dim dtTrained As String
Dim sprTrained As String
Dim compCheck As String
dtTrained = InputBox("Enter date trained as 'mm/dd/yyyy':", "", Format(Date, "mm/dd/yyyy"))
Debug.Print dtTrained
sprTrained = InputBox("Trained By:", "", strDisplayName)
Debug.Print sprTrained
compCheck = InputBox("How was competency verified?", "", "Enter here")
Debug.Print compCheck
Dim ConfirmMsg, ConfirmStyle, ConfirmTitle, ConfirmResponse
ConfirmMsg = "Continue?"
ConfirmStyle = vbYesNo
ConfirmTitle = " "
ConfirmResponse = MsgBox(ConfirmMsg, ConfirmStyle, ConfirmTitle)
If ConfirmResponse = vbYes Then
Const dbConnStr = "CONNECTION STRING IS HERE"
Dim qdf As QueryDef
Set qdf = CurrentDb.CreateQueryDef("")
Dim sqlString As String
sqlString = "INSERT INTO dbo.TRAINING_RECORDS (EMPLOYEE_ID, DOCUMENT_ID, REVISION, DATE_TRAINED, TRAINED_BY, STATUS, COMPETENCY) " & _
"SELECT '" & EMPLOYEE_ID.Value & "', '" & DOCUMENT_ID.Value & "', '" & LATEST_REV.Value & "', '" & dtTrained & "', '" & sprTrained & "', 'C', '" & compCheck & "'"
qdf.sql = sqlString
qdf.ReturnsRecords = False
qdf.Connect = dbConnStr
Debug.Print sqlString
qdf.Execute
'CurrentDb.Execute "INSERT INTO TRAINING_RECORDS (EMPLOYEE_ID, EMPLOYEE_NAME, DOCUMENT_ID, FILENAME, REVISION, DATE_TRAINED, TRAINED_BY, STATUS) " & _
'"SELECT EMPLOYEE_ID, EMPLOYEE_NAME, DOCUMENT_ID, FILENAME, REVISION, DATE_TRAINED, TRAINED_BY, STATUS FROM uSysTRAINING_RECORDS " & _
'"WHERE DOCUMENT_ID = '" & DOCUMENT_ID.Value & "'"
CurrentDb.Execute "INSERT INTO TRAINING_RECORDS (EMPLOYEE_ID, DOCUMENT_ID, REVISION, DATE_TRAINED, TRAINED_BY, STATUS) " & _
"SELECT * FROM uSysTRAINING_RECORDS " & _
"WHERE EMPLOYEE_ID = '" & EMPLOYEE_ID.Value & "'"
CurrentDb.Execute "DELETE FROM TRAINING_NEEDED " & _
"WHERE EMPLOYEE_ID LIKE '" & EMPLOYEE_ID.Value & "' AND DOCUMENT_ID LIKE '" & DOCUMENT_ID.Value & "'"
Forms!TRAINING_MATRIX.TRAINING_NEEDED_SUBFORM.Form.Requery
Forms!TRAINING_MATRIX.TRAINING_RECORDS_SUBFORM.Requery
Forms!TRAINING_MATRIX.ALL_TRAINING_RECORDS.Requery
Else
End If
End Sub
【问题讨论】:
-
听起来您需要添加对 Microsoft DAO 的引用。 datanumen.com/blogs/add-object-library-reference-vba
-
@RobertHarvey 就是这样......谢谢!
-
这段代码在哪里运行?如果在 MS Access 中,默认情况下它应该已经在其“Microsoft Office x.x 数据库引擎对象库”下提供了 DAO。因此,QueryDefs 应该可用。您可能不小心取消了它。
-
@Parfait 它在 Access 中运行。我也有同样的想法,尤其是因为它可以正常工作,而无需之前添加 Microsoft DAO 引用。所以,我不太确定那里发生了什么,但添加该参考确实解决了问题。