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

アクセスで定数を利用したい。
アクセス初心者です。
フォームで取得した値を他のプロシージやクエリでも利用したいと思っています。
標準モジュールで
Public Sub 学年()

Dim nen As Integer
nen = Forms![F_start]![対象学年]

end sub

というのをつくってみましたがうまくいきません。"nen"というのを活用したいと思っています。
dim の代わりにpublic constを使ってみたりもしましたが,うまくできません。
また,nenを他のプロシージャで利用しようと思って,次のようなものもつくりましたが,うごきません。
Private Sub 学級編成1_Click()

Dim nen As Integer

Select Case nen

Case nen = 1
DoCmd.OpenQuery "Q_学級編成1"
Case nen = 2
DoCmd.OpenQuery "Q_学級編成2"
Case nen = 3
DoCmd.OpenQuery "Q_学級編成3"

End Select


End Sub

あとクエリの抽出条件にもつかいたいのですが・・・

ご指導よろしくお願いいたします。

A 回答 (5件)

初心者でしたね。


ちょっと難しい仕掛けかもしれませんので
以下参考レベルです。

DoCmd.OpenQuery "Q_学級編成1"
ですが、
1)クエリ名を変数nenで構成し指定
DoCmd.OpenQuery "Q_学級編成" & nen
2)クエリ名をフォームの項目名で構成し指定
DoCmd.OpenQuery "Q_学級編成" & Forms![F_start]![対象学年]
3)クエリをSQLで実行し条件式を変数nen
strSQL="select * from T_学級編成 where = xxxx" & nen
こんな感じにすれば学年が何年であろうとクエリ名を考慮しておけば
CASE文で各クエリを選ばなくてもできるように思います。

定数テーブル案についてですが、
何しようと変わらない値(ログインユーザ、システム日付、システムパス、レポート部数等の)保持に使いました。1レコードで。
自分が試したものと状況が同じなら、使ってみてもいいですが
実行結果をいろいろ確認してからにしてください。

別途フォームを作れば値変更も随時できますし、
DLOOKUP関数使えばこのテーブル1レコードのある項目値も取得できますから
なにかと便利ではありました。

★★★サンプル★★★
【T_学級編成テーブル】
学年,性別,氏名
【T_対象テーブル】・・・・・・・・・・・定数値のテーブル
対象学年,対象クラス
【Q_学級編成】
SELECT T_学級編成.学年, T_学級編成.性別, T_学級編成.氏名, T_対象.対象学年, T_対象.対象クラス
FROM T_学級編成, T_対象
WHERE (((T_学級編成.学年) Like [T_対象]![対象学年]));
    • good
    • 0

>nen = Forms![F_start]![対象学年]


こんなことしないで、直接Forms![F_start]![対象学年]を
使う。
Select Case Forms("F_start").Controls("対象学年")
    Case 1 '★ nen = 1ではない
    以下略
End Select
また、クエリの条件式に直接記述する。
SELECT ~ WHERE Gakunen = Forms![F_start]![対象学年]

勿論、フォームが開いていないとエラーになる。
    • good
    • 0
この回答へのお礼

ありがとうございます。勉強になります。

お礼日時:2010/08/24 17:35

標準モジュール以外ではどこでも使いたい値を保持する方法として、定数テーブルという1レコードだけのものを用意してやるとかあります。



フォーム起動中のそのクエリなら、フォームに非連結のコントロールを準備し変数nenをセットしてやるのはどうですか。

クエリをDOCMDでなくSQLで実行させればWHERE部分を変数使った文字列にできます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
>標準モジュール以外ではどこでも使いたい値を保持する方法として、定数テーブルという1レコードだけのものを用意してやるとかあります。
まさにこれをしたいです。
もしよろしければ,つくり方を教えてください。

お礼日時:2010/08/24 17:35

'--- 標準モジュール 宣言セクション----


 
  Public nen As Integer
 
'-----------------------------------
Function Gakunen() As Integer
  Gakunen = Forms![F_start]![対象学年]
End Function
'------------------------------------
クエリでは変数なんて知ったこっちゃ無い!
なので自前の関数にして

クエリの抽出欄に Gakunen()
とすれば・・・・                なのですが

そもそもクエリで使うだけなら Forms![F_start]![対象学年]  を抽出条件に入れれば
事足りるでしょうし
Select Case nen
Case nen = 1
  DoCmd.OpenQuery "Q_学級編成1"
  Case nen = 2
  DoCmd.OpenQuery "Q_学級編成2"
  Case nen = 3
  DoCmd.OpenQuery "Q_学級編成3"
End Select

Select Case Forms![F_start]![対象学年]
  Case  1
  DoCmd.OpenQuery "Q_学級編成1"
  Case  2
  DoCmd.OpenQuery "Q_学級編成2"
  Case  3
  DoCmd.OpenQuery "Q_学級編成3"
End Select
とすればF_startが閉じられてなければ変数も使わなくて済みそうですけど?

参考リンク  変数の適用範囲
http://support.microsoft.com/kb/141693/ja
    • good
    • 0
この回答へのお礼

ありがとうございました。
caseは私の記入ミスでした。
いろいろとすいませんでした。

お礼日時:2010/08/24 17:33

 


Dim nen As Integerを削除して、 
Publicステートメントで宣言セクションで宣言する
 

'--- 標準モジュール 宣言セクション----
 
  Public nen As Integer
 
'-----------------------------------
Public Sub 学年()
  nen = Forms![F_start]![対象学年]
end sub
'------------------------------------


因みに、nenは"定数"ではなくて"変数"です。 
以上です。
 

 

この回答への補足

ありがとうございます。勉強になります。
もしよろしかったら,ここで取得したnenをクエリーの抽出条件に入れるにはどうしたらよいか教えてください。単に抽出条件の欄にnenと入れるだけではうごきませんでした・・・
すいません。

補足日時:2010/08/24 15:20
    • good
    • 0

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