当我在 Access 中 运行 VBA 请求链接 table 时出现错误 3021
Error 3021 when I run VBA request to a linked table in Access
我想从 Excel 向 Access 数据库发送请求(查询)。但是当我的请求以链接 table 为目标时,它会触发 3021 错误。但是,当我在 Access 中 运行 相同的请求时,请求编辑器 (dynaset) 本身显示 1300 行。
我测试了各种解决方案:
我尝试用
执行请求
conObj.execute(SQL字符串)
然后用下面的,同样报错
RecordSet.Open SQL, "DsnODBC"
终于有了
RecSet.Open SQL, conn, adOpenForwardOnly, adLockReadOnly, adCmdText
但是没有任何效果;每次我在这一行遇到错误
LesResult = RecSet.GetRows()
'=========Instansiation des objets=========' 'init object
Set RecSet = New ADODB.recordset
Set conn = New ADODB.Connection
'=========================================='
'===========Connection à la base===========' 'DB connect
conn.ConnectionString = ThisWorkbook.leControler.strConnectString
conn.Open ThisWorkbook.leControler.strConnectString
'=========================================='
Select Case HerbierAdmin.ActiveAction
Case "PM":
[Somme code]
SQL = "SELECT SAP_ClassItems.[Plan de montage] "
SQL = SQL & "FROM SAP_ClassItems "
SQL = SQL & "WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));"
Debug.Print SQL
Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")
LesResult = RecSet.GetRows() 'error here
RecSet.Close
For i = 0 To UBound(LesResult, 2)
Me.ListeBox.AddItem (LesResult(0, i)) 'add result to drop down box
Next
预期结果:查询结果可以添加到下拉列表中。
跳过变量:
Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")
Do until recsec.eof
Me.ListeBox.AddItem recsec(0) 'add result to drop down box
recsec.movenext
loop
recsec.close
好的,感谢骚扰爸爸。解决方案是在 like 指令中放置 '%' 而不是 '*'。
我想从 Excel 向 Access 数据库发送请求(查询)。但是当我的请求以链接 table 为目标时,它会触发 3021 错误。但是,当我在 Access 中 运行 相同的请求时,请求编辑器 (dynaset) 本身显示 1300 行。
我测试了各种解决方案:
我尝试用
执行请求conObj.execute(SQL字符串)
然后用下面的,同样报错
RecordSet.Open SQL, "DsnODBC"
终于有了
RecSet.Open SQL, conn, adOpenForwardOnly, adLockReadOnly, adCmdText
但是没有任何效果;每次我在这一行遇到错误
LesResult = RecSet.GetRows()
'=========Instansiation des objets=========' 'init object
Set RecSet = New ADODB.recordset
Set conn = New ADODB.Connection
'=========================================='
'===========Connection à la base===========' 'DB connect
conn.ConnectionString = ThisWorkbook.leControler.strConnectString
conn.Open ThisWorkbook.leControler.strConnectString
'=========================================='
Select Case HerbierAdmin.ActiveAction
Case "PM":
[Somme code]
SQL = "SELECT SAP_ClassItems.[Plan de montage] "
SQL = SQL & "FROM SAP_ClassItems "
SQL = SQL & "WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));"
Debug.Print SQL
Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")
LesResult = RecSet.GetRows() 'error here
RecSet.Close
For i = 0 To UBound(LesResult, 2)
Me.ListeBox.AddItem (LesResult(0, i)) 'add result to drop down box
Next
预期结果:查询结果可以添加到下拉列表中。
跳过变量:
Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")
Do until recsec.eof
Me.ListeBox.AddItem recsec(0) 'add result to drop down box
recsec.movenext
loop
recsec.close
好的,感谢骚扰爸爸。解决方案是在 like 指令中放置 '%' 而不是 '*'。