プロが教える店舗&オフィスのセキュリティ対策術

Microsoft Accessでフォームでの入力方法について教えてください。
本の管理データベースを作成しております。
書籍の情報をデータベースに入力するフォームを作っておりますが、テーブルの項目を入力する際の方法を、直接入力とリストから選択する方法を両方できるようにはできないでしょうか。
例えば、「発行書店」を入力するときに、テキストボックスに直接入力してもOK、別テーブルに書店の一覧を作っておいて、そのリストをコンボリストに表示させ、クリック選択するとテキストボックスに入るような形でもOKのようにしたいのです。

コンボボックスでリストから選ぶだけでなく、ボックス内に直接入力してもテーブルに反映できるようにできれば話が早いのですが、デザインビューのプロパティで入力チェックを「いいえ」にしてもエラーが出て設定できないので・・・。
無知で申し訳ありませんが、どうかご教示ください。

A 回答 (3件)

質問の場合は以下の方法をとります。



http://support.microsoft.com/kb/197526

しかし、これを質問の場合に合わせて書き換えて
ください、というのは大変かも知れません。
上記の、NotInListとはコンボボックスの
プロパティの「リスト外入力時」のイベントに設定
します。

説明を簡単にするためにこちらで利用方法を
設定します。


(1) テーブルの設定
T図書:
図書ID (テキスト型) (主キー)
図書名(テキスト型)
発行書店 (テキスト型)

T発行書店:
発行書店ID(テキスト型) (主キー)
発行書店(テキスト型)


(2) フォームの作成
フォームの「新規作成」を選択し、
「基になるテーブルまたはクエリの選択」で「T図書」を
選択し、「オートフォーム表形式」を選択し、「OK]として
出来たフォームを適当な名前で保存します。


(3) フォームの改造
フォームをデザインビューで開き、「発行書店」の上で
右クリックして、コントロールの変更でコンボボックス
を選択します。


(4) コンボボックスの設定
コンボボックの上で右クリックからプロパティを開き、
「値集合ソース」に、以下を貼り付け
保存します。

SELECT T発行書店.発行書店ID, T発行書店.発行書店
FROM T発行書店;

また、列数、列幅を以下に設定します。
列数 2
列幅 0cm,2cm


次に、「リスト外入力時」の右端をクリックして「ビルダの選択」
を表示し、「コードビルダ」を選択して「OK]とします。
表示された、コード表を以下のようにに設定します。


Private Sub 発行書店_NotInList(NewData As String, Response As Integer)
Dim db As Database
Dim rs As Recordset
Dim Msg As String
Dim NewID As String

On Error GoTo ER_R

If NewData = "" Then Exit Sub
Msg = "'" & NewData & "' は登録されていません。" & vbCr & vbCr
Msg = Msg & "新規に登録しますか?"

If MsgBox(Msg, vbQuestion + vbYesNo) = vbNo Then
Response = acDataErrContinue
MsgBox "もう一度登録し直してください"

Else
Set db = CurrentDb
Set rs = db.OpenRecordset("T発行書店", dbOpenDynaset)

Msg = "新しい発行書店IDを入力してください。" & vbCr & "発行書店ID."
NewID = InputBox(Msg)
rs.FindFirst BuildCriteria("発行書店ID", dbText, NewID)
' If the NewID already exists, ask for another new unique
' CustomerID
Do Until rs.NoMatch
NewID = InputBox("発行書店ID " & NewID & " はすでに存在します." & _
vbCr & vbCr & Msg, NewID & " 既存")
rs.FindFirst BuildCriteria("発行書店ID", dbText, NewID)
Loop
' 新しいレコードの設定
rs.AddNew
' 発行書店IDの登録
rs![発行書店ID] = NewID
' 発行書店の名前の登録
rs![発行書店] = NewData
' 登録したレコードの保存
rs.Update

Response = acDataErrAdded

End If

Exit Sub
ER_R:
MsgBox Err.Description
Response = acDataErrContinue

End Sub


以上です。基本的なNotInListプロパティの使い方です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やりたいことをやりたければ、もっと勉強が必要ですね。
これを機にまた勉強をしたいと思います。

お礼日時:2011/05/06 09:32

ルックアップテーブルを使うのが簡単そう。

たとえば
『書店一覧』というテーブルがあって
書店名
アサヒ
昼間
夕日
等のデータが格納してあるとし。

書籍テーブルでは書店名を納めたいフィールドが
『発行書店』とすれば
書籍テーブルをデザインビューで開き
発行書店の、ルックアップタブを開き
表示コントロール → コンボボックス
値集合タイプ→テーブル/クエリ
値集合タイプ→書店一覧
連結列→1
列数→1
列幅→2 (見やすいサイズに)
等としておけば、テーブル上でもフォーム上でも
お望みの形になると思います。

書店の一覧表テーブル内に、ID・書店名・電話番号・住所などが
ある場合はもう少しややこしくなりますけど。
そちらのテーブルの内容が分からないのでここまで。

ところで、
変数を宣言する際にどちらのライブラリを使うか明示されれば
DAOとADOの共存できますよ。
http://msdn.microsoft.com/ja-jp/library/cc948691 …
↑の真ん中あたり
    • good
    • 0
この回答へのお礼

ありがとうございます。
DAOとADOについて勉強してみます。

お礼日時:2011/05/06 09:26

No1です。

追加です。

DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
にチェックを入れて、OKとします。xxは3.6のような数字です。
このとき、
Microsoft ActiveX Data Objects xx Library
にチェックが入っていたらはずしてください。


以上です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
基本の勉強がもっと必要だと思いました。
またよろしくお願いします。

お礼日時:2011/05/06 09:28

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

関連するカテゴリからQ&Aを探す