タイトル | : パス指定方法について |
記事No | : 10360 |
投稿日 | : 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`』で良さそうにも みえますが、これだとアクセスできないんですよね…。
|