次の方法で共有

Accessで定数テーブルを利用したい。

Anonymous
2017-09-20T08:07:20+00:00

Accessをちょびっとがじっただけの初心者です。

どなたかご存知の方がいらっしゃいましたらご教示ください。

テーブルに定数ファイルを設定したいのですができますでしょうか。

Aテーブルにデータを蓄積し、クエリで定数を利用して

計算結果を出したいのですが、素人でもフォームから定数を変更できるように、別のテーブルで定数を持たせたいのです。

クエリの中の計算式に値を入れれば計算できるのですが、定数の値が変更された場合、常に、クエリの計算式を変更しないといけないことになります。それを定数テーブルの更新フォームで変更できるようにしたいのです。

実際、Aテーブルをメインとしたクエリを作成し、定数テーブルの値で計算式を作ったところ、うまく計算結果を得られ、そのクエリからフォームもできましたが、ただ、クエリの中でAテーブルと定数テーブルも表示させているためか、Aテーブルのデータをフォームから1件削除したところ、1件しか入っていない定数テーブルのデータ内容も消えてしまい、クエリからデータが消えてしまいました。見てみると定数テーブルには何も入っていない状態になってしまいました。Aテーブルにはデータが残っているのですが、定数テーブルのデータがないため、クエリに表示されなくなりました。

クエリにはAテーブルと、定数テーブルを表示させています。

フォームの削除コマンドには、

If Me.NewRecord = True Then

MsgBox "新規レコードは削除できません"

Exit Sub

End If

lans = MsgBox("削除してもよろしいですか?", vbYesNo + vbInformation, "確認")

If lans = vbNo Then

Exit Sub

End If

On Error GoTo ErrExit

DoCmd.SetWarnings False

DoCmd.RunCommand acCmdDeleteRecord

DoCmd.SetWarnings True

Exit Sub

ErrExit:

MsgBox "エラーが発生した為、削除できませんでした。" & vbCrLf & "エラー内容: " & Err.Description

End Sub

HPを参考にさせていただいたマクロで、私個人では、細かくマクロは作成するだけの知識がありません。

方法として、テーブルを指定してデータを削除する方法か、データが削除されないテーブルを作成するかのどちらかだと思うのですが、ご存知の方、いらっしゃいましたら、ご教示、よろしくお願いいたします。

上手く説明できずに申し訳ないですが、よろしくお願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

10 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-09-21T06:19:28+00:00

    > Aテーブルには成績が5段階標記で入力されています。

    > 5なら4点、4なら3点、3なら1点、2と1は0点とて計算します。

    > それが国語、数学、理科、社会、英語と9科目あり、さらに3年間分

    > があります。

    > 他にも、生徒会役員なら5点とか10点とかの加算もあります。

    > それらの点数を定数テーブルとして持たせようと考えております。

    >

    > それらの点数を定数テーブルとして持たせようと考えております。

    >

    > DLookupの場合、各科目ごとにそれらを設定する必要があるのでは

    > ないのでしょうか。あるいは、各得点ごとにDLookupの設置が必要

    > なのか、どちらかではないかと思っていますが、勘違いでしょうか。

    現時点において、[Aテーブル]と[定数テーブル]のそれぞれの定義内容

    (実際のテーブル名,各フィールドの名前/データ型,主キーの設定等)

    について具体的な情報を挙げられていないため、こちらとしても

    あくまで一例を挙げる程度の回答しか出来ません。

    仮に、各種テーブルの正規化が適切に行なわれているのであれば、

    例えば以下のような感じのテーブル設計になっている

    のではないかと思われますが。

    (以下、先頭の P はそのフィールドが主キーはあることを示す)

    [T_学生名簿]


    P  学籍番号          テキスト型

       姓                テキスト型

       名                テキスト型

       フリガナ姓        テキスト型

       フリガナ名        テキスト型

       性別コード        数値型

       生年月日          日付/時刻型

       入学年月日        日付/時刻型

       卒業年月日        日付/時刻型

       退学年月日        日付/時刻型

       編入時学年        数値型


    (その他、居住地や連絡先等の個人情報については割愛)

    [T_成績評価履歴]


    P  成績評価履歴ID    オートナンバー型

       年度              数値型

       学期              数値型

       学年              数値型

       クラス番号        数値型

       学籍番号          テキスト型

       評価科目ID        数値型

       成績評価          数値型

       備考              メモ型(長いテキスト型)


    [T_評価科目]


    P  評価科目ID        数値型

       評価科目名        テキスト型


    [T_成績評価]


    P  成績評価          数値型

       評価点            数値型


    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2017-09-21T05:33:47+00:00

    ご丁寧にありがとうございます。

    DLookupについたはだいたい、分かってきました。

    ただ、うまくいきません。

    もう少し詳細に説明させていただきます。

    Aテーブルには成績が5段階標記で入力されています。

    5なら4点、4なら3点、3なら1点、2と1は0点とて計算します。

    それが国語、数学、理科、社会、英語と9科目あり、さらに3年間分

    があります。

    他にも、生徒会役員なら5点とか10点とかの加算もあります。

    それらの点数を定数テーブルとして持たせようと考えております。

    DLookupの場合、各科目ごとにそれらを設定する必要があるのでは

    ないのでしょうか。あるいは、各得点ごとにDLookupの設置が必要

    なのか、どちらかではないかと思っていますが、勘違いでしょうか。

    また、

    > =[任意の連結テキストボックスの名前]+[フォームヘッダー上の演算テキストボックスの名前]

    とのことですが、テーブルまたはクエリにそのフィールドを設定する必要があるのでしょうか。

    力不足なのにややこしいことをしようとして申し訳ありません。

    ご教示、よろしくお願いします。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2017-09-21T04:21:03+00:00

    > はい。Aテーブルの追加・修正・削除を行うため、色々試した結果、

    > その方法にたどりつきました。それ以外でAテーブルの追加・修正・削除を

    > 行う方法があるのでしょうか。

    (内部結合しているわけでも、外部結合しているわけでもなく)

    「[Aテーブル]と[定数テーブル]の乗積を返す選択クエリ」を

    フォームのレコードソースとしているのがまずいのであって、

    そのフォームの[レコードソース]プロパティに

    [Aテーブル](だけ)が設定されていれば充分だろう、

    ということです。

    > Aテーブルのクエリの中の、式ビルダで、DLookup関数を

    > 用いて計算すれば、定数テーブルを表示させなくても大丈夫なんでしょうか

    DLookup などの Access の定義域集計関数は、その関数単体で

    「任意のテーブル/クエリから(任意の条件に該当するレコードの)

     任意のフィールドの値や集計値」を取得するための関数です。

    クエリに限らず、フォーム/レポート/マクロ/モジュール上からでも

    呼び出すことが出来ます。

    > ・[定数テーブル]から任意のフィールドの値を

    >  参照する DLookup 関数を用いた式を

    >  コントロールソースとする演算テキストボックスを

    >  フォームヘッダー上に配置する。

    例えば、[Aテーブル]をレコードソースとする帳票フォームの

    フォームヘッダー上にテキストボックスを新規作成し、

    その[コントロールソース]プロパティに

    以下のような式を設定なさればよいでしょう。


    =DLookup("フィールド名","テーブル名")


    (参照先のテーブルに格納されているレコードの件数が

      1 件だけである場合のみ有効)

    > ・上記のテキストボックスの値を用いた式を

    >  コントロールソースとする演算テキストボックスを

    >  詳細セクション上に配置する。

    更に、上記の演算テキストボックスによって返される値を

    任意の連結コントロール(フィールド)の値に加算した結果を

    同じフォーム上に表示したいのであれば、詳細セクション上に

    テキストボックスを新規作成し、その[コントロールソース]プロパティに

    以下のような式を設定なさればよいでしょう。


    =[任意の連結テキストボックスの名前]+[フォームヘッダー上の演算テキストボックスの名前]


    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  4. Anonymous
    2017-09-21T02:49:05+00:00

    ご回答ありがとうございます。

    > ([Aテーブル]と[定数テーブル]を乗積結合している場合)

    > その選択クエリは本来、レコード編集不可のクエリとなるはずですが、

    > その選択クエリをレコードソースとする連結フォームの

    > [レコードセット]プロパティを「ダイナセット (矛盾を許す)」に

    > 設定されているのでしょうか。

    はい。Aテーブルの追加・修正・削除を行うため、色々試した結果、

    その方法にたどりつきました。それ以外でAテーブルの追加・修正・削除を行う

    方法があるのでしょうか。

    > 定数の参照及びその値を用いた計算に関しては、例えば

    > ・[定数テーブル]から任意のフィールドの値を

    > 参照する DLookup 関数を用いた式を

    *>*コントロールソースとする演算テキストボックスを

    *>*フォームヘッダー上に配置する。

    申し訳ありません。Aテーブルのクエリの中の、式ビルダで、DLookup関数を

    用いて計算すれば、定数テーブルを表示させなくても大丈夫なんでしょうか

    > ・上記のテキストボックスの値を用いた式を

    *>*コントロールソースとする演算テキストボックスを

    > 詳細セクション上に配置する。

    素人で申し訳ありません。この意味が理解できません。

    もう少し、ご指導、お願いできますでしょうか。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  5. Anonymous
    2017-09-21T02:03:49+00:00

    > Aテーブルにデータを蓄積し、クエリで定数を利用して

    > 計算結果を出したいのですが、素人でもフォームから定数を変更できるように、

    > 別のテーブルで定数を持たせたいのです。

    > クエリの中の計算式に値を入れれば計算できるのですが、定数の値が変更された場合、

    > 常に、クエリの計算式を変更しないといけないことになります。

    > それを定数テーブルの更新フォームで変更できるようにしたいのです。

    これについては、[定数テーブル]をレコードソースとする連結フォームを作成し、

    そのフォームの[追加の許可]プロパティ及び[削除の許可]プロパティを

    「いいえ」に設定しておけば充分であるはず。

    > 実際、Aテーブルをメインとしたクエリを作成し、定数テーブルの値で計算式を作ったところ、

    > うまく計算結果を得られ、そのクエリからフォームもできましたが、

    ([Aテーブル]と[定数テーブル]を乗積結合している場合)

    その選択クエリは本来、レコード編集不可のクエリとなるはずですが、

    その選択クエリをレコードソースとする連結フォームの

    [レコードセット]プロパティを「ダイナセット (矛盾を許す)」に

    設定されているのでしょうか。

    > ただ、クエリの中でAテーブルと定数テーブルも表示させているためか、

    > Aテーブルのデータをフォームから1件削除したところ、

    > 1件しか入っていない定数テーブルのデータ内容も消えてしまい、

    > クエリからデータが消えてしまいました。

    > 見てみると定数テーブルには何も入っていない状態になってしまいました。

    > Aテーブルにはデータが残っているのですが、定数テーブルのデータがないため、

    > クエリに表示されなくなりました。

    そのフォームでの編集対象となるのはあくまで[Aテーブル]のみですから、

    そのフォームのレコードソースも[Aテーブル]とされた方がよいでしょう。

    定数の参照及びその値を用いた計算に関しては、例えば

    ・[定数テーブル]から任意のフィールドの値を

     参照する DLookup 関数を用いた式を

     コントロールソースとする演算テキストボックスを

     フォームヘッダー上に配置する。

    ・上記のテキストボックスの値を用いた式を

     コントロールソースとする演算テキストボックスを

     詳細セクション上に配置する。

    といった形でもよいのではないでしょうか。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません