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

VBAからVBにステップアップしてきた初心者です。
部内の管理ソフトを作成したいのですがその際ログインする人によって権限を変更したいので職員情報(職員ID、氏名、ログインID、パスワード、権限ランク、等々)をDB(ACCESS)に保存しておいて情報抽出したいと思っていますいろいろ考えてコードを作成しているのですがうまく動きません

Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
Dim DB As New ADODB.Connection, RS As New ADODB.Recordset
Dim 検索Key As String
検索Key = TextBox1.Text
If 検索Key = "" Then
Exit Sub
End If
 DB.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application.StartupPath & "\○○.mdb;" & "Jet OLEDB:Database Password=△△;")
RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key & "")
If RS.BOF Then
MsgBox(検索Key & "に対応する職員がいません。")
Exit Sub
Else
TextBox2.Text = RS.Fields職員ID  ←ここでエラーが出ます
End If
End Sub
まずはTEXTBOX1に職員IDを入力したら勝手に氏名がTEXTBOX2に表示できるようにしたいと思っています。
いろいろレコードセットの表示方法(VBA等)を探し試したのですがどれもうまく動きません。ご教授お願いします

下記のようなサイトもあったのですがVBおよびDB操作を始めたばかりの私には難解でした
http://adonetvb.com/VB2008GetkeyData01.html

よい方法があればよろしくお願いします

A 回答 (3件)

RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key & "")


ここでデータコネクションを指定していないので次のように修正してください。あと & "" は不要です。

RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key, DB)


TextBox2.Text = RS.Fields職員ID

#1さんの指摘も含めて次のように。

TextBox2.Text = RS.Fields.Item("氏名").Value.ToString()

欲しいのは氏名だと思うのでフィールド名は"氏名"にしました。Fieldから値を得るためにValueプロパティを付加し、さらに文字列に変換するためにToString()をつけています。

これでお望みの動作になるとは思いますが、もうひとつ。

TextBox1_Enterイベントで処理していますが、もしEnterキーを押したタイミングを狙っているのであればこれは間違いです。Enterイベントはコントロールがフォーカスを受けたときに呼び出されるイベントです。Enterキーの押下によって動作させるにはKeyDownかKeyUpで処理してください。個人的にはKeyDownはキーを押し続けると繰り返し呼び出されるのでKeyUpのほうがよいかと。

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
' ここにコードを記述
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。動作しました。
とても丁寧な説明で理解しやすかったです。

またイベント操作の指摘も図星でコードを読んでそのままの動作かな?
と思っていました。

VBの初心者本にはVBAの延長みたいに書かれていますが、多くのところで似て非なるものですね。
理解・習熟するのに時間がかかりそうですが、しかしソフトが動いた時はうれしいもので、これからも精進したいと思います

ありがとうございました

お礼日時:2009/11/05 18:38

RS.Open("Select * From 職員リスト Where 職員ID =' " & 検索Key & "';")


職員IDはstring型なら 検索Keyを(シングルクォーテーション)で囲んでやる。

>If RS.BOF Then
私はEOFを使うけど(これでもいいかも)
    • good
    • 0

>TextBox2.Text = RS.Fields職員ID  


TextBox2.Text = RS.Fields("職員ID")
という問題では無くて?
  

この回答への補足

早速の回答ありがとうございます。
上記のようにRS.Fields("職員ID")としても緑色の波線が入って

'ADODB.Field' から 'String' への変換時にランタイム エラーが発生する可能性があります

とエラーが出るんですよ
いろいろここのコードを書き換えては試しているのですがうまくいきません。

補足日時:2009/11/04 23:57
    • good
    • 0
この回答へのお礼

すいません
さらに追加です

RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key & "")の部分でもエラーが出ます

ExcelVBAでは下記の書き方でOKでしたがVBではダメでした
RS.Source = "Select * From 職員リスト Where 職員ID = " & 検索Key & ""
RS.OPEN

TextBox2.Text = RS.Fields("職員ID")でエラーが出るのはそのせいかもしれません

お礼日時:2009/11/05 00:25

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