accessからレコードを取得するには?

解決


けんたろう  2009-12-05 10:26:21  No: 146632  IP: 192.*.*.*

Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim database As String = "sample.mdb"
Dim name As String
Dim no As Integer
Dim SQL As String
no = Val(Me.TextBox1.Text)
CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" & database
CN.Open()
SQL = "SELECT * FROM member WHERE no = " & no
RS.Open(SQL, CN, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
name = RS.Fields("name").Value
BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。
実行すると上記のエラーがでて困っています。accessのテーブル構造はno(数値型)name(テキスト型)で見たところ、noに対するレコードも存在しaccessのクエリを実行してもちゃんと結果がでます。どなたかご教授お願いいたします!!

編集 削除
 2009-12-05 12:24:43  No: 146633  IP: 192.*.*.*

以下についてどうなっていますか?
・このときのTextBox1.Textの値がnoフィールドにあるかどうか
・RS.Openの後、RS.EOFは何を返すのか

それよりも.NetならADODBでなくADO.Netを使った方がいいのでは。

編集 削除
魔界の仮面弁士  2009-12-05 12:40:41  No: 146634  IP: 192.*.*.*

> Dim database As String = "sample.mdb"
ファイルは、フルパスで指定するようにしてください。
相対パス指定にすると、カレントドライブやカレントディレクトリの
影響を受けるため、意図していなかった場所のファイルが
利用されてしまう可能性があります。

> adOpenDynamic
Jet Provider は、ダイナミックカーソルをサポートしていません。
接続先に応じて、適切な CursorType / LockType を指定するようにしてください。

編集 削除
けんたろう  2009-12-08 14:25:19  No: 146635  IP: 192.*.*.*

あさん、魔界の仮面弁士さん遅れてすいません。noは予約語らしくnanbaにしたら、うまくいきました。ファイルは、フルパスで指定するようにしました!!本当にありがとうございました。

編集 削除