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

このような問題を回避するために、Data Source に指定された値は常に引用符で囲む必要があります。拡張プロパティの値で行ったのと同じように、引用符 " またはアポストロフィ ' を使用してこれを行うことができます。

次に、データ ソース ディレクトリ内のファイル名をテーブル名として使用するには、少なくとも角かっこ [ ] を使用して "引用" し、できれば . を置き換えます。# 文字によるファイル拡張子。

「テキスト ファイル用の 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 に答える