プロが教えるわが家の防犯対策術!

VS2003.NETで開発中の初心者です。
以下のコード(Form1.vb)を実行すると次のエラーがポップアップされ“oADP.Fill(oDS, "ROOT")”のラインで止まります。

<エラー>
'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。

どこがおかしいのかわかりません。
詳しい方がいましたら、ご教授下さいませ。


----------------------------
Imports System.Data.OleDb

Public Class Form1
 Inherits System.Windows.Forms.Form
 Private oConn As OleDb.OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0" & ";Data Source=..\USER.mdb")

「Windows フォーム デザイナで生成されたコード」

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   '--DataAdapterの設定
   Dim oADP As OleDb.OleDbDataAdapter
   oADP = New OleDb.OleDbDataAdapter("SELECT *FORM TALK WHERE Node=0 ORDER BY No", oConn)
   '--DataSetの設定

   Dim oDS As New DataSet
   oADP.Fill(oDS, "ROOT")
       ・
       ・
       ・
----------------------------

A 回答 (6件)

>"SELECT * FROM TALK WHERE Node=" & Node & "ORDER BY No"


・「ORDER」の前にスペースが入っていない

ヘルプで「SQL エディタ」「クエリデザイナ」を調べてみて下さい

あとデバックの仕方も覚えたほうがいいですよ
エラーが出るところでブレークポイントを設定して 対象のSQLをクイックウォッチ等でコピーし、
アクセスのクエリに貼り付けて正常に動作することを確認するとか...
    • good
    • 0
この回答へのお礼

そのとおりでした!
やってみたら正常動作で結果表示されました。
助かりました!

サンプルコードが書籍だったため、スペースの入り無しがわかりにくくて、スペースが入っていることにまったく気が付きませんでした。
SQL文の勉強も必要ですね。

あと、デバッグ方法ですが、変数の値を見るくらいしか出来ていませんでしたが、教えていただいた方法で、今後やってみようと思います。

どうも、ありがとうございました!

お礼日時:2005/04/22 17:18

>"SELECT * FROM TALK WHERE Node=" & Node & "ORDER BY No"



このSQLは正確ですか?

この回答への補足

はい、前回の例もあるので何度も見直しました。
ちなみにサンプルで載っていたコードそのままの記述なので、間違いないと思います。
もちろん、DBやデータもそれに従って、ちゃんと用意しているので存在しています。
サンプルでは、これで動作するような説明になっています。
やはり、SQL文のどこかに誤りがあるとしか考えられないのでしょうか?

補足日時:2005/04/22 15:55
    • good
    • 0

一応・・・。


>SELECT *FORM TALK WHERE Node=0 ORDER BY No"

「FROM」が「FORM」になってますけど、実物は大丈夫ですよね?

この回答への補足

大変失礼いたしました。
Private Sub Form1_Loadの方は、おっしゃるとおり、FROMのスペルミスでした。
修正したところ、通りました。

が・・・

Private Sub Form1_Load内で呼んでいる、Private Sub NodeGetでも、
oADP.Fill(oDS, "Node")の行で、同じエラーが出てしました。

これも、SQL文がおかしいのでしょうか?
ちなみに、この部分の* FROMはスペルミスはしてなかったです。

(SQL文の箇所は、VS2003.NETでは構文チェックしてくれないんですね・・)

----------------------------------------
Private Sub NodeGet(ByVal Node As String, ByVal Root As String, ByVal Kaiso As Integer)
 Dim oADP As OleDb.OleDbDataAdapter
 Dim KaisoText As String
 Dim IntLoop As Integer

 For IntLoop = 0 To Kaiso
  KaisoText += ""
 Next

 KaisoText += "+"
 oADP = New OleDb.OleDbDataAdapter("SELECT * FROM TALK WHERE Node=" & Node & "ORDER BY No", oConn)
 Dim oDS As New DataSet

 oADP.Fill(oDS, "Node")
     ・
     ・
     ・
----------------------------------------

補足日時:2005/04/22 09:17
    • good
    • 0

Connectionのopen, closeは?

この回答への補足

サンプルコードを用いてコーディングしていますが、
特にConnectionのopen, closeは記述されておらず、
このままでしたが・・・

補足日時:2005/04/22 09:22
    • good
    • 0

Imports System.Data



を入れてください。

この回答への補足

はい、今回のエラーには直接関係ないようでしたが、
一応、入れました。

補足日時:2005/04/22 09:22
    • good
    • 0

>"SELECT *FORM TALK WHERE Node=0 ORDER BY No"



このSQLは正確ですか?
・「*」「FROM」の間にスペースが無い
・「Node」フィールドは数値型ですか?

この回答への補足

早速のご回答どうもありがとうございます。
失礼しました。
「*」「FROM」の間には、実際はスペースがあります。
DBの「Node」フィールドは数値型です。

補足日時:2005/04/21 16:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!