• 締切済み

アクセスの表形式のフォームにマスターよりデータを取得したい

よろしくお願いいたします。 SYAINCD|NAME|TEL|JOB| というテーブルがあるとします。(全て非連結にしました) このテーブルのフォームをウイザードを使い、表形式にて 作成しました。そこで何をしたいかといいますと SYAINCD|NAME| 001 |A | という社員マスターがありますので、そこから、先ほどの フォームのNAMEへデータ(A) を入れたいのです。そこで 教えていただきたいのは。 (1) フォームはできたのですが、SYAINCD にコードを入力すると   即、2行目ができてしまいます。これで正常なのでしょうか? (2) フォームでSYAINCD(3桁)を入力し終わったら起動する、以下の  ようなVBA を記述してみました。これでAをフォームに取得するつもりで。 Private Sub SYAINCD_LostFocus() Dim cn As ADODB.Connection Dim inrs1 As ADODB.Recordset Dim MYSQL As String Set cn = CurrentProject.Connection MYSQL = "SELECT NAME FROM SYAINMST WHERE SYAINCD = '" &         Me!SYAINCD & "';" Set inrs1 = New ADODB.Recordset inrs1.Open MYSQL, cn, adOpenKeyset, adLockReadOnly If inrs1.RecordCount <> 0 Then Me!NAME = inrs1!NAME Else Me!NAME = "該当者なし!!" End If inrs1.Close: Set inrs1 = Nothing cn.Close: Set cn = Nothing End Sub  結果、1行目のNAMEにはAが格納されましたが、2行目のNAMAにもAが 格納されてしまいました。  この場合1行目のNAMEのみAを格納することはできないのでしょう  か?  VBAの記述がおかしいのはなんとなく分かるのですが、対処法がわか らなくてこまっております。  それとも表形式のフォームでは不可能なことなのでしょうか?  例が分かりずらくて申し訳ありませんが、ご教授をお願いいたしま  す。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

ACCESSの場合、クエリをつくり、それをレコードソースにして、フォームの表の中身を作らないと、難しいのかなと思う。 全てVBA(手作業なし)という線で以下やってます。 (クエリを作成) 私のテストでは、社員3という名簿のようなテーブルがあって、住所についてのの地区(区分)フィールドに関東、東北とかはいっている。 関東の人だけ抜き出すクエリを作り、Q_社員3と言うクエリ名とした。 ADOX.Catalogを使うには「Microsoft ADO Ext2.7 for DDL and Security」への参照設定が必要。 ーーー Private Sub test02() On Error GoTo エラー Dim cat As New ADOX.Catalog Dim cmd As New ADODB.Command Dim mySQL As String Dim strName As String cat.ActiveConnection = CurrentProject.Connection strName = "Q_社員3" mySQL = "SELECT 社員3.* FROM 社員3 " mySQL = mySQL & "WHERE 地区 ='関東';" cmd.CommandText = mySQL cat.Views.Append strName, cmd DoCmd.OpenQuery strName db.Close: Set db = Nothing Exit Sub エラー: If Err.Number = -2147217816 Then MsgBox "aa" 'cat.Views.Delete strName 'Resume Else MsgBox Err.Number & " : " & Err.Description End If End Sub ======= (新規フォームの作成とテキストボックスにフィールドの内容を 表示) Sub CreateFormSample() Dim frm As Form Set frm = CreateForm frm.RecordSource = "Q_社員3" frm.DefaultView = 2 '帳票フォーム Dim ctlText1 As Control Set ctlText1 = CreateControl(frm.Name, acTextBox, , "", "", 1000, 100) ctlText1.ControlSource = "氏名" Dim ctlText2 As Control Set ctlText2 = CreateControl(frm.Name, acTextBox, , "", "", 1000, 200) ctlText2.ControlSource = "住所" DoCmd.OpenForm frm.Name End Sub ーー 結果 テキスト0 テキスト1 山田 三郎  東京都大田区 大島 義男 東京都品川区 植田 健 埼玉県川口市 近藤 一郎 千葉県 ーーーーーー フォームに、結果の行数x項目(フィールド)数のテキストボックスを設け、そこにクエリ結果のレコードを読んだフィールドの値を代入することも出来るの可も知れないが、ややこしくて。 非連結でフォームやレポートを扱うのはやりにくいと思います。 本質問の場合も既存のフォームにデータをセットできてない点がありますが、なかなかWEBでも情報が少なくて(本質問にも回答は無いし)苦労すると思います。

kentakun06
質問者

お礼

お礼が遅れまして申し訳ありませんでした。ご丁寧な回答ありがとうございました。大変参考になりました。

すると、全ての回答が全文表示されます。

関連するQ&A