VBA Microsoft 文本驱动程序在 where 子句中包含文本
VBA Microsoft Text Driver having text in the where-clause
我使用此函数从文本文件中获取信息:
Function Import_Kundendaten_FromText(sqlstring As String) As String
'On Error GoTo MeinEnde
Dim cn As ADODB.connection
Dim rec As ADODB.Recordset
Set cn = New ADODB.connection
On Error Resume Next
cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=" & "" & ";" & "Extensions=asc,csv,tab,txt;"
On Error GoTo 0
If cn.State <> adStateOpen Then Exit Function
On Error Resume Next
Set rec = New ADODB.Recordset
rec.Open LCase(sqlstring), cn, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not rec.BOF And Not rec.EOF Then Import_Kundendaten_FromText = rec.Fields(0).Value '
MeinEnde:
If Err <> 0 Then fehlerverarbeitung ("Err-Nr: " & Err.Number & Chr(10) & "Err-Desc: " & Err.Description & Chr(10) & _
"Err-Source: " & Err.Source & Chr(10) & "Sub Import_Kundendaten_FromText" & Chr(10) & Now())
End Function
如果我这样使用
Import_Kundendaten_FromText("SELECT SOMETEXTFIELD FROM C:\variable_outl_kunden.txt WHERE CustNo = 105")
=> 完美!
Import_Kundendaten_FromText("SELECT SOMETEXTFIELD FROM C:\variable_outl_kunden.txt WHERE CustName = 'Someone'")
=> 没有给出任何结果也没有错误!!!
我不知道,为什么我不能在 where-staement 中使用文本 - 有什么想法吗?
谢谢!
最大值
你的代码有很多问题。
- 如评论中所述,您需要一个 Schema.ini 文件才能让您的代码正常工作。 - 我假设您已经有了一个,否则您的代码只有在文本文件与文本驱动程序的默认设置匹配时才能工作。
- 代码中的
On Error Resume Next
语句,尤其是第二个语句,很可能是您看不到任何错误消息的原因。
- 文本文件中的列名和数据将区分大小写。所以你的
LCase(sqlstring)
不是一个好主意,除非文本文件内容都是小写的。
我使用此函数从文本文件中获取信息:
Function Import_Kundendaten_FromText(sqlstring As String) As String
'On Error GoTo MeinEnde
Dim cn As ADODB.connection
Dim rec As ADODB.Recordset
Set cn = New ADODB.connection
On Error Resume Next
cn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=" & "" & ";" & "Extensions=asc,csv,tab,txt;"
On Error GoTo 0
If cn.State <> adStateOpen Then Exit Function
On Error Resume Next
Set rec = New ADODB.Recordset
rec.Open LCase(sqlstring), cn, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not rec.BOF And Not rec.EOF Then Import_Kundendaten_FromText = rec.Fields(0).Value '
MeinEnde:
If Err <> 0 Then fehlerverarbeitung ("Err-Nr: " & Err.Number & Chr(10) & "Err-Desc: " & Err.Description & Chr(10) & _
"Err-Source: " & Err.Source & Chr(10) & "Sub Import_Kundendaten_FromText" & Chr(10) & Now())
End Function
如果我这样使用
Import_Kundendaten_FromText("SELECT SOMETEXTFIELD FROM C:\variable_outl_kunden.txt WHERE CustNo = 105")
=> 完美!
Import_Kundendaten_FromText("SELECT SOMETEXTFIELD FROM C:\variable_outl_kunden.txt WHERE CustName = 'Someone'")
=> 没有给出任何结果也没有错误!!!
我不知道,为什么我不能在 where-staement 中使用文本 - 有什么想法吗?
谢谢! 最大值
你的代码有很多问题。
- 如评论中所述,您需要一个 Schema.ini 文件才能让您的代码正常工作。 - 我假设您已经有了一个,否则您的代码只有在文本文件与文本驱动程序的默认设置匹配时才能工作。
- 代码中的
On Error Resume Next
语句,尤其是第二个语句,很可能是您看不到任何错误消息的原因。 - 文本文件中的列名和数据将区分大小写。所以你的
LCase(sqlstring)
不是一个好主意,除非文本文件内容都是小写的。