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