VB6将文件路径插入SQL FROM子句

VB6将文件路径插入SQL FROM子句,sql,vb6,ado,Sql,Vb6,Ado,我在Windows7桌面上使用VB6读取和处理文本文件,在将变量传递给SELECT语句时遇到问题。我的密码是: Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim cm As ADODB.Command Set conn = New ADODB.Connection conn.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" &am

我在Windows7桌面上使用VB6读取和处理文本文件,在将变量传递给SELECT语句时遇到问题。我的密码是:

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cm As ADODB.Command

Set conn = New ADODB.Connection
conn.Open _
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & App.Path & ";" & _
    "Extended Properties=""text;HDR=No;FMT=Delimited( )"""

inputFile = "C:\test data\test data.asc"

Set cm = New ADODB.Command
cm.ActiveConnection = conn
cm.CommandType = adCmdText

cm.CommandText = "SELECT * FROM " & inputFile 
Set rs = New ADODB.Recordset
rs.Open cm, , adOpenKeyset, adLockOptimistic
问题是输入文件的路径名包含空格,当我运行上面的代码时,它在rs.OPen行失败,错误是FROM子句中出现语法错误。 如果inputFile中的路径不包含空格,则一切正常

我在inputFile周围尝试了许多“[]等组合,但总是出现语法错误或另一个错误,即找不到inputFile.txt


有谁能给我一个正确的方法来处理SQL语句中带有空格的路径/文件名吗?

如果使用方括号[],文件名中显然有空格


你在问题中说你试过方括号,你能再检查一下吗?我不知道目录名中的空格

应始终引用为数据源提供的值,以避免此类问题。您可以使用引号或撇号'来完成此操作,就像您对扩展属性值所做的那样

然后,要使用数据源目录中的文件名作为表名,请至少使用方括号[]引用该文件名,最好替换为。按字符指定文件扩展名

文本文件没有OLEDB提供程序,但您的示例显示了Jet 4.0 OLEDB提供程序及其文本可安装ISAM的使用,这很好


提供了很多关于这个主题的信息,在大多数示例中使用VBScript,但它几乎也适用于VB6。

只是有一个来自遥远过去的内存,如果我没记错的话,数据源是文件所在的文件夹,而在“选择”中,您只有文件名而没有路径

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cm As ADODB.Command

Set conn = New ADODB.Connection
conn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & ";" & _
"Extended Properties=""text;HDR=No;FMT=Delimited( )"""

inputFile = "test data.asc"

Set cm = New ADODB.Command
cm.ActiveConnection = conn
cm.CommandType = adCmdText

cm.CommandText = "SELECT * FROM [" & inputFile & "]"
Set rs = New ADODB.Recordset
rs.Open cm, , adOpenKeyset, adLockOptimistic

假设文件位于App.Path

FYI中,则在向问题添加代码时,该文件位于勾号之间或缩进4空格。您试图从中选择的表的名称是什么?看起来您正在尝试从文件系统中的文件中进行选择,这毫无意义。我正在尝试从文本文件中读取数据。正如我所说,如果inputFile中的路径不包含空格,我可以毫无问题地读取文本文件数据。一旦rs打开,我就使用rs.GetRows将数据放入数组中,然后进行处理。您是否尝试过cm.CommandText=SELECT*FROM'&inputFile&@recursive更正我之前在Bob回答中输入的注释。这是有道理的。使用Jet 4.0 OLEDB提供程序的文本可安装ISAM,您可以像查询数据库表一样查询文本文件。
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cm As ADODB.Command

Set conn = New ADODB.Connection
conn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & ";" & _
"Extended Properties=""text;HDR=No;FMT=Delimited( )"""

inputFile = "test data.asc"

Set cm = New ADODB.Command
cm.ActiveConnection = conn
cm.CommandType = adCmdText

cm.CommandText = "SELECT * FROM [" & inputFile & "]"
Set rs = New ADODB.Recordset
rs.Open cm, , adOpenKeyset, adLockOptimistic