5

我在 Windows 7 桌面上使用 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 语句中带有空格的路径/文件名?

4

3 回答 3

3

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

然后使用数据源目录中的文件名作为表名,至少使用方括号 [] 将其“引用”,并最好替换 . # 字符为文件扩展名。

没有“用于文本文件的 OLEDB 提供程序”,但您的示例显示了使用 Jet 4.0 OLEDB 提供程序及其 Text Installable ISAM,这很好。

处理文本数据库提供了关于这个主题的大量信息,大多数示例使用 VBScript,但它几乎都适用于 VB6。

于 2012-10-17T09:41:16.810 回答
1

显然,如果您使用方括号,文件名中的空格应该可以工作[ ]

cm.CommandText = "SELECT * FROM [" & inputFile & "]" 

您在问题中说您尝试过方括号-您可以仔细检查一下吗?我不知道目录名称中的空格。

于 2012-10-17T07:50:53.657 回答
0

刚刚对遥远的过去有记忆,如果我没记错的话,数据源是文件所在的文件夹,在选择中你只有文件名而没有路径。

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

于 2012-10-17T12:01:29.500 回答