• ベストアンサー

ログイン画面の作成

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 よい方法があればよろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

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

Alshark
質問者

お礼

ありがとうございました。動作しました。 とても丁寧な説明で理解しやすかったです。 またイベント操作の指摘も図星でコードを読んでそのままの動作かな? と思っていました。 VBの初心者本にはVBAの延長みたいに書かれていますが、多くのところで似て非なるものですね。 理解・習熟するのに時間がかかりそうですが、しかしソフトが動いた時はうれしいもので、これからも精進したいと思います ありがとうございました

その他の回答 (2)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

RS.Open("Select * From 職員リスト Where 職員ID =' " & 検索Key & "';") 職員IDはstring型なら 検索Keyを(シングルクォーテーション)で囲んでやる。 >If RS.BOF Then 私はEOFを使うけど(これでもいいかも)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

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

Alshark
質問者

お礼

すいません さらに追加です RS.Open("Select * From 職員リスト Where 職員ID = " & 検索Key & "")の部分でもエラーが出ます ExcelVBAでは下記の書き方でOKでしたがVBではダメでした RS.Source = "Select * From 職員リスト Where 職員ID = " & 検索Key & "" RS.OPEN TextBox2.Text = RS.Fields("職員ID")でエラーが出るのはそのせいかもしれません

Alshark
質問者

補足

早速の回答ありがとうございます。 上記のようにRS.Fields("職員ID")としても緑色の波線が入って 'ADODB.Field' から 'String' への変換時にランタイム エラーが発生する可能性があります とエラーが出るんですよ いろいろここのコードを書き換えては試しているのですがうまくいきません。

関連するQ&A

専門家に質問してみよう