2017-08-06 16 views
-3

私はMS Accessを初めて使用しており、テキストボックス1(text_in)にEmployeeIDと入力し、ボタンを押した後に結果クエリ(たとえばテーブルから取られた従業員のファーストネーム)が表示されます。テキストボックス2(text_out)に印刷されます。MS Access VBAコード

は、これまでのところ、次のコードがあります。

Private Sub btn_get_data_Click() 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
'declaration of database on recordset objects 
Dim strSQL As String 

Dim a As String 
a = text_in.Value 

Set db = CurrentDb 
Set rs = db.OpenRecordset("Employee") 

strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & a 

Set db = Nothing 
Set rs = Nothing 

End Sub 

を私は多くの場所での解決策を探して試してみましたが、私は、通常のSQL言語からクエリを実行するためにMSアクセスVBAで使用されている構造を理解することはできません。

みんな、ありがとう!私のデータベースファイルに両方のソリューションを正常に実装するにはもう1時間かかりました。私が書いたように、私はMs-accessに全く新しいです。私はいくつかのチュートリアルを使って学習していますが、私のレベルはまだ低いです。もう一度、ありがとうございます。

+2

は、クエリステートメントにテキスト値を設定することはできません。これの目的は何ですか?コンボボックスを使って従業員を選んでみませんか? Multi-column comboboxはEmployee_IDを値として持つが従業員名を表示するように設定できます。 – June7

答えて

1
Private Sub btn_get_data_Click() 

on error goto errorCatch 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim strSQL As String 

Set db = CurrentDb 

strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & Me.text_in.Value & ";" 

Set rs = db.OpenRecordset(strSql, DbOpenDynaset) 

If rs.RecordCount > 0 Then 
     debug.print; rs!FirstName 
     Me.text_out.Value = rs!FirstName 
End if 

Cleanup: 
Set db = Nothing 
Set rs = Nothing 
Exit Sub 

errorCatch: 
debug.print; err.Number 
debug.print; Err.Description 

GoTo Cleanup 

End Sub 

私はyoureの後にこの何であるかを教えて傾けます。レコードセットを利用すること、およびSQL文として文字列値を使用する方法をよりよくする必要があります。

また、SQL文で直接使用できるテキストボックスの値を格納する変数を作成する必要もありませんでした。

また、ぶら下がったレコードセットオブジェクトは、お尻にかなりの痛みを伴う可能性があるため、エラー処理が非常に重要です。

EDIT - イリノイVBA

内の文字列のSQLステートメントを使用する他の方法を拡張
DoCmd.RunSQl strSql 

それとも

DoCmd.Execute strSql 

これらの両方がUPDATEのか、INSERTのに最適です。

次に、Gustav氏の指摘しているように、いくつかの制限がある基本的にコンパクトなさまざまなD関数があります。しかし、レコードセットを開いたり、使用したり、閉じるのに必要なすべてのタイピングを実行する手間が省けます。 D関数は限られているように見えますが、私はしばしば結合結果を取り出すためにいくつかネストしています。ただの想像力の問題。機能の詳細については、この気の利いたサイトで

ルック -

https://www.techonthenet.com/access/functions/index.php

+0

また、Gustavは正しいと言えるほど価値があります。これについての質問を書く必要はありません。しかし、私はあなたが非常に新しいように見えるので、これは実際にあなたにとって非常に役立つだろうと思った。私はレコードセットを読むことをお勧めします –

1

これを行うためのクエリは必要ありません。ただ、テキスト2のコントロールソースを設定します。

=DLookup("FirstName","Employee","EmployeeId=" & [text_in] & "") 
+1

実際には最後のpai rof二重引用符は必要ありません:) –

+1

私は知っていますが、それは文字列や日付の表現に似ています。 – Gustav