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

Access2010を使用しています。
AccessVBA初心者です。

T_マスタを基にF_新規登録フォームとF_詳細情報フォームを作成しました。
項目は全部で50ほどあるのですが、その中で20の項目については、
それぞれ選択項目が決まっているため、プルダウンで選択してもらう作りです。
この選択された20項目を非連結のtxtboxにそれぞれ点数変換し、
フォーム上で合計値を出しています。
個々の点数をテーブルで持つ必要がないので、フォーム上での計算ですが、
合計値のみ、テーブルへセットしたいと考えております。

更新されるタイミングは特にこだわらないのですが、
新規登録=登録ボタン(新規レコードに登録)、
詳細情報=更新ボタン(既存データの書き換え)を設けているので、
それぞれを押したタイミングにでもテーブルへ値がセットされればと思います。
できればマクロ、VBA両方でできる方法があるとよいのですが。。

ご教示をお願いいたします。

質問者からの補足コメント

  • うーん・・・

    アクションクエリとは更新クエリのことでしょうか?
    フォームにしかない値を持ってくる構文はどこへ書けばよろしいですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/05/27 17:03
  • つらい・・・

    nicotinismさん、今回もご指導をありがとうございます。
    アクションクエリとマクロ操作は一通り問題ないのですが、
    フォームでの作成経験がなく、VBAも初心者です。
    VBAプログラミングに関する本で一通り流れはROMに沿ってやってみたのですが・・・

    T_マスターの主キー=ID、データ型はテキスト型にしています。
    F_詳細情報の更新ボタンを押すタイミングで更新がかかるよう、
    更新クエリを作成し、マクロに追加してみました。
    F_詳細情報のレコードソースはT_マスタになっているのですが、
    実行するとパラメーターの入力画面が出てしまいます。。。
    F_詳細のtxtbox点数のコントロールソースに式が入っているせいかと思い、
    もう一つ合計点数の非連結txtboxを作り、点数をコントロールソースで
    引っ張って更新クエリを作ってみたのですがはやりうまくいきません。
    ご指導をお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/05/30 10:19
  • へこむわー

    操作方法を教えてくださった皆様ありがとうございました。
    月末で他の業務が忙しくなったため、私の意志には反しますが、
    新たに点数更新ボタンを作成し、テーブルへセットする方法で今回は対応いたしました。
    また新たな壁にぶつかりましたらご教示をお願いいたします。

      補足日時:2016/06/01 16:28

A 回答 (5件)

更新クエリでなくても、フォームに合計フィールドと連結しているテキストボックスを作成し、そこに反映させれば保存されますよ。



そういう方法もあります。
    • good
    • 0

私もAccess全く触ったことない状態から、Accessで画面を作ってる


既存システムの改修依頼があって、1時間くらいでできたし…
難しく考えすぎなんじゃないでしょうか?

まず、(私の説明では)フォームのレコードソースとかは関係
なくなります。
非連結にした時点で、Accessが裏でテーブルに自動でリンクして
更新するという機能を使わないことになります。極端な話、
フォームにテキストボックスとボタンを置いただけで、あとは
全てVBAで更新するのと変わらないわけです。
本やサイトのサンプルもそんな感じだと思うので、そういった
単純なサンプルプログラムで試した方がいいのかも?

クエリ等を使うのも結構ですが、まずは簡単なサンプルレベルから
成功することを確認してください。そしてどこまで成功するか
報告してください。
> アクションクエリとマクロ操作は一通り問題ないのですが、
そこを一文で終わらせないで下さい。
どう問題ないのですか?説明してください。

まず、べた書きで(画面から値を取らずに直接Update文を書いて)
ボタン押下のプログラムからデータ更新できたのでしょうか?
 →その場合、画面から取った値を文字列(String)でつなげて終わりです。

ここまでで問題解決することは可能なはずですが、
>実行するとパラメーターの入力画面が出てしまいます。。。
パラメータを使うなら、使い方を勉強してからじゃないと使えませんが
使うことに決めたんですか?
スキルがあるならSQLインジェクション対策としても有用で、
職業プログラマの常識ではありますが…。

>実行するとパラメーターの入力画面が出てしまいます。。。
その場合、2つの原因が考えられます。
(1)SQL文に意図してパラメータを追加した。
 →その場合、パラメータの値もプログラムで設定してください。
  (方法はパラメータを紹介してあるサイトやページに書いてありますので
  まずは書いてあるまま実行して成功するかどうか確認してください。
  自分でアレンジするのはサンプル通りやって成功してからにしてください)
  →成功しなかった場合は追加で状況報告
(2)SQL文が間違っていて、Accessが分からない単語を「パラメータですか?」
 レベルで聞き返してきている。
 →SQL文が間違っていないか?Accessが質問してきている"パラメータ名"
  が何になっているかまず確かめる。

以上
    • good
    • 0

>詳細情報=更新ボタン(既存データの書き換え)を設けている


ということですので、
T_マスタテーブルの主キーに相当するフィールドの説明が必要かな?
(フィールド名とデータ型は特に)

マクロで行う場合は
更新クエリと追加クエリを作っておいて
このクエリをマクロから実行。
VBAでもクエリを実行できますし、クエリのSQL文をコード中に埋め込んで
ゴチョゴチョやればクエリは不要です。
図は更新クエリのイメージ的なモノです。
「Access2010 フォーム上で出した」の回答画像3
この回答への補足あり
    • good
    • 0

>アクションクエリとは更新クエリのことでしょうか?


紹介したページは基礎知識なので、知らないのであれば
前後のページも含めて読んで頂ければ。。。
http://www.accessclub.jp/sql/11.html
>何らかの"アクション"を施すクエリのことをいいます
と説明されています。
正確に言うなら「アクションクエリの更新クエリを使う」です。

>フォームにしかない値を持ってくる構文はどこへ書けばよろしいですか?
フォームのコントロールから取るだけでは?
例えばテキストボックスならTextBox.Value プロパティ
https://msdn.microsoft.com/ja-jp/library/office/ …
これを先に紹介したページの「変数」を使った事例と組み合わせて、
更新クエリを文字列変数の編集で作り上げます。
その後、アクションクエリとして実行すればテーブルに反映されます。

入門本や入門サイトで一式勉強すべきことはご自分で勉強なさってくださいね。
プログラムは勉強した人にしかできない作業ですから。
    • good
    • 0

アクションクエリの実行では?


http://www.accessclub.jp/sql/12.html
この回答への補足あり
    • good
    • 0

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