MS Access - ADODB 连接问题 - FROM 子句中的语法错误

MS Access - ADODB conection issue - syntax error in FROM clause

提问人:SatoP 提问时间:10/6/2023 最后编辑:braXSatoP 更新时间:10/6/2023 访问量:54

问:

我正在将 Access 32 位设计的应用程序迁移到 Access 64 位。我已遵循 Microsft 网站上定义的所有步骤。我已经设法打开它并在 App 拥有的大多数宏中工作,但我正在努力解决 ADODB 连接问题。我将库从以前的“Microsoft.Jet.OLEDB.4.0”更新为“Microsoft.ACE.OLEDB.12.0”。

该代码打开一个数据库 txt 文件(我包含在结构下方),然后将其写入 Access 数据库的表中。问题在于将 Txt fila 加载到 Recordset 中时。连接正常 (cnnTXT),但我在“打开”步骤中出现语法错误。

这是我收到消息的代码的笨拙之处:

Dim cnnTXT As New ADODB.Connection                                      
Dim rsItfProc As New ADODB.Recordset


cnnTXT.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Forms!Menu_de_Opciones!tb_ruta & "\" & strDirItf & ";Extended Properties=""Text;HDR=no;FMT=Delimited"""


If rsItfProc.State = 1 Then rsItfProc.Close
  Dim file As String
  file = URL_of_the_file 
            
  rsItfProc.Open file, cnnTXT, adOpenStatic, , adCmdTable ---> HERE I AM GETTING THE MESSAGE

End If

文件是这样的:

22.11.2022                                             Dynamic List Display                1
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
|Column1   |Column2    |Column3      |Column4          |Valid Until|Valid From|Column5     |
--------------------------------------------------------------------------------------------
|XXXX      |50         |1234567890   |1234567890       |31.12.9999 |01.01.1999|81671454    |
|XXXX      |50         |1234567890   |1234567890       |31.12.9999 |01.01.1999|81671454    |
--------------------------------------------------------------------------------------------

我尝试过很多东西,但我不是这种联系的专家。

我已将 adCmdTable 属性更改为 adCmdText,我尝试将 Open 更改为 OpenText。此外,我尝试将 SQl 语句编写为第一个属性,但没有表名,所以我正在循环尝试不起作用的事情。

谁能告诉我是否缺少某些内容或存在不应该存在的参数? 在 32 位版本中,它确实有效。

问候

SQL VBA MS-ACCESS 64 位 ADODB

评论

0赞 tnavidi 10/6/2023
似乎您忘记了一个,因为您正在使用单行 if 语句,并且有一个更深的ElseEnd If
0赞 SatoP 10/6/2023
是的,你是对的,我试图简单地简化代码,因为它要长得多,我包含了这个“结束如果”,在这种情况下是不正确的,因为它在一行中进行了充分评估。
0赞 Olivier Jacot-Descombes 10/6/2023
该文件的格式不适合您的分隔文本文件。我不能包含任何标题行或分隔线--------.它可以包含由分隔的列名组成的标题。

答:

1赞 CHill60 10/6/2023 #1

您似乎将打开记录集与打开文件(连接到文件)混淆了

recordset.Open source, ActiveConnection, options

这里的“source”应该是你要运行的 SQL。对于文本文件,“表名”是文本文件的名称

评论

0赞 SatoP 10/6/2023
但是我使用文件的完整路径作为“源”,包括不带扩展名的文件名。类似于:“C:\Documents\TXT_file”
0赞 CHill60 10/6/2023
文件的完整路径是 <i>connect</i> 到该文件所需的路径。连接后,您需要选择数据 - 为此,您需要一个查询,例如select * from Name_of_File_without_path
0赞 SatoP 10/6/2023
但是我用cnnTXT做连接,不是吗?
0赞 CHill60 10/6/2023
从数据源中提取信息有两个步骤 1.连接到数据源 在您的情况下,这是“cnnTXT” - 您需要该位的完整路径文件名,因为它需要查找文件。你说对了。2. 使用该连接提取数据。通过引用所建立的连接来创建记录集,提供要运行的查询、已设置的连接以及任何其他相关信息作为选项。这部分只需要文件名,因为没有数据库表或 Excel 工作表可供参考。这是你错的地方