電子書籍の厳選無料作品が豊富!

アクセス2000で、試験結果の管理をしようと思っています。
試験によって合格点が違うので、合否結果はフラグ(1=合格、2=不合格)で管理しています。

フォームにボタンを作って、ボタンをクリックしたら合格者(あるいは不合格者)
だけを表示する形にしたのですが、受験日と合否のフラグの両方を条件として、
データの抽出を行いたいのですが、ボタンのコードビルダはどのようにしたら良いのでしょうか?ちなみに、ボタンを作った時の関連付けは受験日となっているのでコードは下記のようになっています。

Private Sub 抽出採用日_Click()
On Error GoTo Err_抽出採用日_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "対象者"
stLinkCriteria = "[受験日]=" & "#" & Me![受験日] & "#"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_抽出採用日_Click:
Exit Sub
Err_抽出採用日_Click:
MsgBox Err.Description
Resume Exit_抽出採用日_Click
End Sub

A 回答 (3件)

stLinkCriteria = "[受験日]=" & "#" & Me![受験日] & "#"



を、
stLinkCriteria = "[受験日]=" & "#" & FORMAT$(Me![受験日],"yyyy/mm/dd") & "# AND [合否結果] = " & Me.[合否結果]
のようにするとOKだと思います。

ちなみに、[受験日]をFORMAT関数で補強してあるのは、
Accessが01/03/05のようなデータを英語読みにして、2005/01/03だと思ってしまうのを防ぐためです。

実際にやって確かめたわけではないです。不明点とかあったら補足してくださいナ。
    • good
    • 0
この回答へのお礼

いや~。本当にありがとうございました。構文の中の & やら # などの意味は
よくわからないのですが、ご指導いただいたとおりにやってみたら、うまくいき
ました。
ありがとうございました。

お礼日時:2001/05/15 17:37

クエリーだけで対応可能です。


簡単なのはクエリーを作成して条件にフォーム名![受験日]やフォーム名![合否結果]としておきましょう。
これをクエリーを開くかフォームを開くか(この時は作成したクエリーを基にしたフォームを作る)すれば問題なし。

合否結果は1か2をラジオボタン等のイベントから隠しフィールドへ格納すればよいでしょう。

クエリーが分からないのであればテーブル構成等を提示願います。
    • good
    • 0

 アクセスのフォームはほとんど利用したことがないので、何とも言えないんですが、参考程度で見て下さい。


 通常アクセスやオラクルといった SQL 言語系のデータベースでは QUERY(クエリー) と呼ばれるモノがあります。コレは SQL 言語を登録しておく機能なんですが、このクエリーを使えば簡単に実現できると思います(更新できるかはよく分かりませんが…)。

 本格的なRDBを目指すなら、まず以下のテーブルを仮定します。

テーブル名/項目
生徒テーブル/生徒ID・生徒名
教科テーブル/教科ID・教科名
テストテーブル/テストID・テスト日付・教科ID・テスト名・合格点
テスト成績テーブル/テストID・生徒ID・点数

で、クエリーを用意します(SQL で記述しますね)
------------------------------------------------------------------
SELECT
テストテーブル.テスト日付,
テストテーブル.テスト名,
教科テーブル.教科名,
生徒テーブル.氏名,
テスト成績テーブル.成績,
IIf((([テストテーブル].[合格点])<=[テスト成績テーブル.成績]),"合格","不合格")
AS 合否
FROM
生徒テーブル INNER JOIN (
教科テーブル INNER JOIN (
テストテーブル INNER JOIN テスト成績テーブル ON
テストテーブル.テストID = テスト成績テーブル.テストID) ON
教科テーブル.教科ID = テストテーブル.教科ID)
ON 生徒テーブル.生徒ID = テスト成績テーブル.生徒ID
WHERE
(([テストテーブル.テスト日付]=[日付])) AND
([テストテーブル].[合格点]<=[テスト成績テーブル.成績])
ORDER BY
テストテーブル.テスト日付, テスト成績テーブル.成績 DESC;
------------------------------------------------------------------
 こんな感じですかね。これでクエリーを開くと最初に日付の入力を求めてきますので、欲しい日付を入力すると、その一覧が出てきます。
(データ用意する暇なかったんで、ほとんど検証してないですが(^^;)

もっと簡単にするなら…
------------------------------------------------------------------
テストテーブル:テスト名・教科名・テスト日付・生徒名・点数・合格点
クエリー
SELECT
テストテーブル.テスト名,
テストテーブル.教科名,
テストテーブル.テスト日付,
テストテーブル.生徒名,
テストテーブル.点数,
 テストテーブル.合格点
FROM
テストテーブル
WHERE
[テストテーブル.点数] >= [テストテーブル.合格点]
ORDER BY
テストテーブル.点数 DESC
------------------------------------------------------------------
これは直書きなんで自信なしですが(^^;

 データベースの基本は、データ管理と表示部を分けることです。また本来は、同じ意味を持つデータを持たないようにするのがセオリーです。その事から行くと、2番目の解は違反してますがね。
 とにかく、一度クエリーを試してみてはいかがでしょうか?
    • good
    • 0

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


おすすめ情報