- ベストアンサー
Access2002 フォーム上にないフィールドに入力するには
フォーム上にあるボタンを押すと、あるフィールドに数値を入力する VBAを作りましたが、フィールドには入力されませんでした。 色々やってみたらフォーム上にフィールドが無いと入力されないようでした。 これはAccess2002の仕様なのでしょうか。 それともそのための表記があるのでしょうか。 例) 顧客ID = 1 単純にこれだけのことがしたいのですがうまくいきません。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
余計なことかもしれませんが、フォーム上のテキストボックスには、アクセスが勝手にフィールドと同じ名前をつけます。が、フィールドにつながっている別のものです。 ですから、テキストボックスにフィールドAとおなじ名前をつけて、フィールドBをソースにしてもよいのです(やったことありませんが、できるはずです)。 本題に戻して、アクションクエリを呼び出すには DoCmd オブジェクトの OpenQuery メソッドを使用します。 例えばコマンドボタンのクリックイベントに Private Sub コマンドボタン_Click() DoCmd.OpenQuery "クエリ名" End Sub と書きます。 クエリ(ご質問の場合は更新クエリになりますが)は、普通にクエリビルダで作成します。 クエリが選択クエリなら、その結果が表示されます。 詳しくはヘルプをご参照ください。 ついでに ADO を使ったやり方。 Private Sub コマンドボタン_Click() Dim Cnxn As ADODB.Connection Set Cnxn = CurrentProject.Connection Cnxn.Execute "SQL" End Sub SQLとは、言ってみればクエリを逐語的に記述したものです。 ADOは、VBAから直接テーブルを操作するしくみです。
その他の回答 (3)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。 フィールドとは「顧客ID」という名のテキストボックスなんですね? Forms!<フォーム名>.[顧客ID] = 1 をコマンドボタンのClickイベントに記述してください。 <フォーム名>は、現物にあわせ適宜変更してください。 これからテキストボックスを配置するなら、Text1といった名前でしょうから、顧客IDに変更するなどしてください。 #2さんの1)呼び出すとは、オブジェクト「クエリ」で「更新クエリを作成し、呼び出す(=クエリを実行する)」ということです。
お礼
なるほど、勉強になりました。 ご回答ありがとうございます。
申し訳ありませんが、よくわからないのですが、フォーム上にフィールド(テキストボックスのことだと思いますが)がないのに、なぜ、どこに、1を表示、あるいは入力するのでしょうか。 存在しないテキストボックスに、値を入力しようとしてもできないのは、Access2002の仕様というより、至極当たり前のことだと思うのです。 フォームではなくて、テーブルの、当該レコードの「顧客ID」フィールドに1を入力するのですか? それなら、いくつか方法があると思います。 1) アクションクエリーを作って、それを呼び出す。 2) ADODBを使って、SQLを走らせる。 3) フォーム上の「顧客ID」をソースにする非表示のテキストボックスを作って、そこに書き込む。 はずしてますかね。
お礼
ご回答ありがとうございます。 >フォームではなくて、テーブルの、当該レコードの「顧客ID」フィールドに1を入力するのですか? はい、そうなんです。 顧客IDというフィールドを変数として使用したいと思っており、 変数ならばわざわざフォーム上に表示させる必要も無いと思ったしだいです。 基本的にフォーム上に無ければ入力はされないということなんですね。 教えていただいた3)の方法をとろうと思います。 後学のために教えていただきたいのですが、1)の呼び出すというのはどのような表記をすればいいのでしょうか。
- bin-chan
- ベストアンサー率33% (1403/4213)
例示の「顧客ID = 1」の「顧客ID」を、どのような利用をなさろうとされているのか、によります。 「変数」という「入れもの」は、フォーム上の「テキストボックス」だったり、Dimで宣言する Integer型やLong型やString型であったりします。 VBAでForm上に定義してあるオブジェクト(例:TextBox1)を参照する場合は Forms!TextBox1.Text = 1 をコマンドボタンのClickイベントに記述するなどします。
お礼
ご回答ありがとうございます。 顧客IDというのは数値型のフィールドです。 フィールドに1という値を入力したいだけなのです。 なにか宣言のようなものが必要なのでしょうか。
お礼
まだ私には難しい内容ですが勉強になります。 ご回答ありがとうございました。