tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル パス指定方法について
投稿日: 2010/12/15(Wed) 10:52
投稿者魔界の仮面弁士
> フォルダー名等にスペースが使用されているとそのようなエラーとなるようです。
スペースに関する問題は、ファイル名についても同様に存在します。

空白を含まない「test.csv」を読み込む場合には、
 『SELECT * FROM test.csv』
 『SELECT * FROM test#csv』
などと指定できますが、「test data.csv」を読み込む場合は
 『SELECT * FROM test data.csv』
では動作しません。この場合は、両端を `〜` または [〜] で囲む必要があります。

『SELECT * FROM [test data.csv]』
『SELECT * FROM `test data.csv`』
『SELECT * FROM [test data#csv]』
『SELECT * FROM `test data#csv`』
http://support.microsoft.com/kb/189683/ja

sql = String.Format("SELECT * FROM [{0}]", csvFileName)
sql = String.Format("SELECT * FROM `{0}`", csvFileName)



この他にも、「IN 句」を使う手法があります。
この方法では、別ディレクトリのファイルや別形式のファイルを読み取れるため、
より柔軟な指定が可能です。

『SELECT * FROM [test data.csv] IN "" [Text;Database=C:\Documents and Settings\Administrator\My Documents]』
『SELECT * FROM [test data.csv] IN "C:\Documents and Settings\Administrator\My Documents" "Text;"』
http://office.microsoft.com/ja-jp/access-help/HP001032240.aspx

 sql = String.Format("SELECT * FROM [{0}] IN """" ""Text;Database={1}""", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM [{0}] IN """" [Text;Database={1}]", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM [{0}] IN '' ""Text;Database={1}""", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM [{0}] IN '' [Text;Database={1}]", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM `{0}` IN '' [Text;Database={1}]", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM `{0}` IN '' `Text;Database={1}`", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM `{0}` IN [{1}] 'Text;'", csvFileName, FolderPath)
 sql = String.Format("SELECT * FROM `{0}` IN [{1}] `Text;`", csvFileName, FolderPath)


なお、ディレクトリを囲む引用符については、'〜'、[〜]、`〜`、"〜" などを使えますが、
通常は "〜" で指定するのが安全です。ただし、VBのコードとしての可読性はやや劣りますので、
指定するパスに「'」や「`」や「[」や「]」が含まれない事が分かっている場合には、
可読性を優先して、他の引用符を使うのも選択肢のひとつでしょう。


一方ファイル名については、"〜" や '〜' での指定ができません。このため、
[〜] か `〜` または引用符なしという選択になります。


C:\Documents and Settings\Administrator\My Documents\history[day1]\o'clock.csv
→『SELECT * FROM [o'clock.csv] IN "C:\Documents and Settings\Administrator\My Documents\history[day1]" 'Text;'』


ただし、「a[b]c.csv」のように角括弧を含むファイル名の扱いについては私も分かりません。
cn.GetSchema("Tables") で見た限りでは、『SELECT * FROM `a(b)c#csv`』で良さそうにも
みえますが、これだとアクセスできないんですよね…。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。