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

时间:2012-10-17 03:17:03

标签: sql vb6 ado

我在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语句中带空格的路径/文件名吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

Processing Text Databases提供了大量关于此主题的信息,大多数示例使用VBScript,但它几乎都适用于VB6。

答案 1 :(得分:1)

如果您使用方括号[ ],则显然会在文件名should work中添加空格。

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

你在问题​​中说过你试过方括号 - 你能仔细检查吗?我不知道目录名中的空格。

答案 2 :(得分: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