過去ログ

                                Page     588
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼A、BのフォームをCのフォームに表示さ...  よっしー 04/3/29(月) 17:56
   ┗Re:A、BのフォームをCのフォームに表示さ...  クロ 04/3/30(火) 18:22
      ┗Re:A、BのフォームをCのフォームに表示...  よっしー 04/4/5(月) 10:46

 ───────────────────────────────────────
 ■題名 : A、BのフォームをCのフォームに表示さ...
 ■名前 : よっしー
 ■日付 : 04/3/29(月) 17:56
 -------------------------------------------------------------------------
   こんにちは。よっしーです。
(Aのフォームにはコマンドボタンが
「追加」「編集」「複製」があります)

Aのフォームに
生徒ID 氏名 学年 クラス 出席番号
----   ---- ----  ----  ----

となっており、コマンドボタン「詳細」
を押下するとBのフォームが開きます。
Bのフォームに
生徒ID 氏名 電話番号  携帯番号 住所 
----   ---- ----    ----   ----
となっています。AもBもテーブルから
データをひっぱています。
Cのフォームはコマンドボタン「追加」
「編集」「複製」を押下すると開きます。
「追加」を押下すると単純にCのフォームを
開きます。
生徒ID 氏名 学年 クラス 出席番号
----   ---- ---- ----  ----
電話番号 携帯番号 住所 
----   ----   ----
Aのフォームで何れかのレコードを選択して
「編集」を押下するとCのフォームに例えば
青木君のAとBのフォームに表示されていた
データが表示されるようにしたいのです。
Cのフォームは非連結のテキストボックスで
つくってあります。
どのようにしてAとB(のフォームが引っ張
ってきてる)のそれぞれのテーブルからCの
フォームに表示させる事ができるのでしょうか?
どなたか分かるからご教授お願いいたします。

 ───────────────────────────────────────  ■題名 : Re:A、BのフォームをCのフォームに表示さ...  ■名前 : クロ  ■日付 : 04/3/30(火) 18:22  -------------------------------------------------------------------------
   こんにちは、チョット長いけど...

Aフォームのヘッダーに不可視のテキストボックス(名前をtxt生徒ID_Selectとします)を
配置してください。
※通常のテキストボックスでプロパティで「可視」を「いいえ」にしてください。
  前回の投稿の件もこれで対応できそうなので後述します。

Aフォームの各フィールド(生徒ID・氏名・学年・クラス・出席番号)のクリック時の
イベントに
Me.txt生徒ID_Select = Me.生徒ID
を記述してください

これで各フィールドをクリックしたときにヘッダーの不可視テキストボックス
「txt生徒ID_Select」に当該レコードの生徒IDが値が代入されます。


DAOを使用しますので「参照設定」でMicrosoft DAO 3.* Object Library にチェックを
入れてください。

Aフォームの「編集」コマンドボタンのクリック時のイベントに
If Len(Nz(Me.txt生徒ID_Select, "")) = 0 Then
  MsgBox "このレコードには生徒IDが未設定です。" & vbCrLf & _
        "Cフォームを開くことは出来ません。", vbCritical, "警告"
Else
  DoCmd.OpenForm "Cフォーム", acNormal
End If
として

Cフォームの開くときのイベントに

  Dim dbs As DAO.Database
  Dim rs As DAO.Recordset
  Dim strSQL As String
  
  Set dbs = CurrentDb
  
  strSQL = "SELECT Aテーブル.生徒ID, Aテーブル.氏名, Aテーブル.学年, Aテーブル.クラス, Aテーブル.出席番号," & _
         " Bテーブル.携帯番号, Bテーブル.電話番号, Bテーブル.住所" & _
         " FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.生徒ID = Bテーブル.生徒ID" & _
         " WHERE Aテーブル.生徒ID = '" & Forms!Aテーブル.txt生徒ID_Select & "'"


  Set rs = dbs.OpenRecordset(strSQL, dbOpenDynaset)
  

    Me.生徒ID = rs![生徒ID]
    Me.氏名 = rs![氏名]
    Me.学年 = rs![学年]
    Me.クラス = rs![クラス]
    Me.出席番号 = rs![出席番号]
    Me.携帯番号 = rs![携帯番号]
    Me.電話番号 = rs![電話番号]
    Me.住所 = rs![住所]

これでいけると思います。

※前回投稿の解決案
前述の不可視のテキストボックス「txt生徒ID_Select」を使い
Aフォームの「詳細」ボタンに
If Len(Nz(Me.txt生徒ID_Select, "")) = 0 Then
  MsgBox "このレコードには生徒IDが未設定です。" & vbCrLf & _
        "Bフォームを開くことは出来ません。", vbCritical, "警告"
Else
  DoCmd.OpenForm "Bフォーム", acNormal, , , , , Me.txt生徒ID_Select
End If
として
Bフォームを開くときのイベントに
Me.生徒ID.SetFocus
DoCmd.FindRecord OpenArgs, acEntire, , acDown, , acCurrent
とすれば、希望のことが出来るかと思います。

 ───────────────────────────────────────  ■題名 : Re:A、BのフォームをCのフォームに表示...  ■名前 : よっしー  ■日付 : 04/4/5(月) 10:46  -------------------------------------------------------------------------
   クロさん、大変遅くなってすいませんでした。
できました。
ありがとうございます。
今後ともよろしくおねがいします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 588