FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


フォーム上に、指定したテーブルデータを表示したい

今回のお悩みは、

コントロールの値を参照して、テーブルの値を求める
というのがあるんだけど・・・非連結のフォームのコントロール全部に表示させたい
場合はどうすればいいの・・・?

つまり・・・

非連結フォームのコントロールに、レコードデータを表示したい

そういうことですね。



以前 AccessClubで回答を試みて見事に玉砕した内容の
アップグレード版っぽいですが、がんばってみませう!

フィールドの値を参照して、テーブルの値を求めるでは
単一のコントロールに対してデータを表示するというものでしたが、
今回は全てのコントロールに対してレコードを表示させるというものです。

テーブルやクエリに連結されたフォームであれば、特に深く考えずに
レコードソースやコントロールソースを指定してあげればよいのですが、
今回は、非連結のフォームです。

それでは(無駄なコード満載かもしれませんが)がんばってみましょう (-_-☆キラーン

まずテーブル名(クエリ名)を Tbl_1 とします。
そして、フォーム名を Frm_A としましょう。
最後に、レコードを指定するのに利用するテキストボックスをTxt_Bとします。

なお、検索に利用する値(Txt_Bに入る値)は主キーのような唯一無二の値で
指定するものとします。

Frm_A上のコントロールが少なければ、
hatenaさんがからご教授いただいた内容で
Me.コントロール名 = DLookup("値を表示させたいフィールド名", "Tbl_1", _
"検索対象フィールド名 = " & Me.Txt_B)
という方法が非常にスマートな書き方だと思います。

でも、仮にコントロールが20個・30個とある場合、
その全てのコントロールに対して1つ1つ書くのは大変な作業になります。

そこでGenzoは考えました (☆_☆)ギラッ!!
(いや・・・自分でなくても・・・みんな考えることだと思いますが・・・(-。-) ボソッ)

テーブルのフィールド名利用して、コントロールに値を入れてしまえば・・・便利じゃん!!(-_-☆キラーン

そんなわけで、今回のコードを利用するにあたり重要な事として、
Tbl_1で使われているフィールド名とFrm_Aで作成されている
コントロール名が一致している必要があるということになります。
これは注意しておいてください。 (@_@)/

ではコードを記載してみませう。

仮にTxt_Bの更新後処理に記述したとします。
(フォーム上のボタンを押した場合などでもよいと思いますけど…(^^ゞ)
Private Sub Txt_B_AfterUpdate()

Dim RS As DAO.Recordset
Dim FldObj As Field 'テーブルのフィールド用変数。

If Nz(Me.Txt_B,"")="" Then Exit Sub 'Txt_Bが空白の場合は終了

Set RS = CurrentDb.OpenRecordset _
("SELECT * From Tbl_1 WHERE 検索対象フィールド = '" _
& Me.Txt_B & "'", dbOpenSnapshot) 

IF Not RS.EOF Then
'レコードが存在する場合

For Each FldObj In RS.Fields
'レコードセット全フィールドをループ処理させる

Select Case FldObj.Name 'フィールドによる条件分岐

Case "不必要なフィールド名"
'何にもしないので空欄
      
Case Else
'必要なフィールドの場合
Me.Controls(FldObj.Name).Value = RS.Fields(FldObj.Name).Value
'フィールドと同じ名前のコントロールに値を入れる処理 
    
End Select

Next FldObj 'ココまでを、ループ処理
End If

RS.Close: Set RS = Nothing

End Sub
コメントを書きまくったので、ちょっと見づらいかもしれませんが
こんな感じでどうでしょう。 かなりスマートじゃないですか? (-ーゞフッ

8~10行目のレコードセットの仕方は、hatenaさんから教えてもらったものですね・・・(;^_^A アセアセ。
(SQLで指定する方が、検索するより処理が速くなるとのこと。重宝したい方法です。)

条件に適合するレコードのフィールド全てを抽出したレコードセットを開いています。
今回は検索対象を文字列にしているので ' ' で囲む形になっています。

12行目のIf Not RS.EOF Thenですが、レコードセットをした時点でEOF(End Of File)でなければ…
となるので、逆に読み取ると、レコードが存在する場合…となってくれてます。

後は15行目からのFor Each文でレコードセットの全フィールドに対して
ループ処理を行っています。

18行目以降のSelectケース内で不必要なフィールドが複数ある場合には、
下記の例のようにカンマで区切って、必要な分記述すれば大丈夫なはず・・・
Case "不必要なフィールド名1", "不必要なフィールド名2"
どうですか・・・これならフィールドが100個あろうが200個あろうが
全部まかなえそうです! 今回、ちょっと力作です!

梅干(小)の種サイズの脳がフル回転ですよ! ヘ(゚◇、゚)ノ~

これなら、少しは使えそうかな~~・・・

え?そんな無駄な非連結フォームは作らない??(゚◇゚;)

そうですか・・・(T‐T) 今回もやっぱりだめだめですか・・・orz

それでも、今回のお悩みは解決したと、無理やりにでもさせていただきます。。

ではでは・・・(・・)/ シュタ 。。。タタタッ。ヘ(;・・)ノ
↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


コメントの投稿

非公開コメント

Author's Profile ~自己紹介~

Genzo

Author:Genzo
PCは一応自作できるレベル。
ワード・エクセルなら基本的に
扱えるレベル。
プログラム・・・?ん?
VBA・・・?ん?ん??
それって美味しいですか?


~ 当ブログについて ~

~ Mail2Genzo  ~

Calender&Search かれんだーと検索

11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

Access2Genzo内で検索

Category ~かてごりー~

Comments Tree ~こめんとつりー~


Link ~りんく~

ブロとも申請フォーム

Counter ~かうんた~

Since 2010/08/01:

Online:

タグクラウド

最新トラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。