tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルサンプル投稿に対する質問
記事No10351
投稿日: 2010/12/13(Mon) 23:26
投稿者Yoji
こんにちは。初心者です。OS:XPsp3,VB2010Exp
VB2010でチャートを書きたい!と思って、ここに迷い込みました。
サンプル投稿"CSVファイルをADO.NETを使ってDataGridViewに表示(VB.NET)"は、興味深く、
動かしてみたのですが、最初、「デバック開始」ボタンを押したら、
「FROM 句の構文エラーです。」とエラーが出ました。
test.csvの置き場所が悪いのかと思っていろいろ試しましたがデバッグでは、
うまくいきませんでした。
そこで、該当する"FROM"の行をなんとなく修正してみました。
投稿分 New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & csvFileName, cn)
修正分 New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & "C:\test.csv", cn)

すると、Form1がちゃんと表示されました!うれしかったです。

質問:
1."C:\"には、test.csvが無いのになぜちゃんと動いたのでしょう?
2.このようなプログラムはどうやってデバッグするのでしょう?
  コンパイルして出来上がったreleseフォルダのexeファイルだと投稿のままでちゃんと動きました。
  「デバッグ開始」は使わないのでしょうか?

今後、ちゃんと動くコードを書いても、場合によってはデバッグ開始ではエラーが出ることがあるのでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルサンプル投稿に対する質問【修正】
記事No10353
投稿日: 2010/12/14(Tue) 09:12
投稿者花ちゃん
私のコードに問題があったようです。

下記の部分を修正願います。

誤 Dim csvFileName As String = System.IO.Path.Combine(FolderPath, "test.csv")
正 Dim csvFileName As String = "test.csv"

フォルダー名等にスペースが使用されているとそのようなエラーとなるようです。

[ツリー表示へ]
タイトルRe: サンプル投稿に対する質問【修正】
記事No10357
投稿日: 2010/12/14(Tue) 22:06
投稿者Yoji
> フォルダー名等にスペースが使用されているとそのようなエラーとなるようです。

迷い込んだ初心者の質問にご回答頂きありがとうございます。
インターネット上に開示いただける先人の方々に感謝、感謝です。

ご助言に感謝するとともに今後とも開示、ご教授をよろしくお願いします。
コピペしたプログラムでも自分のコンピューターで想像したとおりに動くことに感動しますし、開示していただいた先人の意思を理解できてるんだ!と自信がつきます。
ありがとうございます。

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

[ツリー表示へ]
タイトルRe: パス指定方法について
記事No10371
投稿日: 2010/12/15(Wed) 23:12
投稿者Yoji
> > フォルダー名等にスペースが使用されているとそのようなエラーとなるようです。
> スペースに関する問題は、ファイル名についても同様に存在します。

> などと指定できますが、「test data.csv」を読み込む場合は
>  『SELECT * FROM test data.csv』
> では動作しません。この場合は、両端を `〜` または [〜] で囲む必要があります。
>
> この他にも、「IN 句」を使う手法があります。
> この方法では、別ディレクトリのファイルや別形式のファイルを読み取れるため、
> より柔軟な指定が可能です。
>
>
> ただし、「a[b]c.csv」のように角括弧を含むファイル名の扱いについては私も分かりません。
> cn.GetSchema("Tables") で見た限りでは、『SELECT * FROM `a(b)c#csv`』で良さそうにも
> みえますが、これだとアクセスできないんですよね…。

魔界の仮面弁士様

素人のやっかみかも知れませんが、MSの関係者?
それともQueryに見初めた方なのでしょうか、、、
この返信は、ず〜っと、とっといて欲しいです。
Accessは、いろんなことが管理できるようでしたが、初っ端で挫折してしまいまいた。

ご教授をありがとうございます。
恐れずに立ち向かっていきたいと思います。<何に?

[ツリー表示へ]