夏の最中に頭を抱えていたADOとAccessのフォームを結びつけるメソッドです。 手順はいたって簡単。まず下記のように表示したいレコードのフィールド数と見合ったテキストボックスコントロールを持ったフォームを作成します。
![]() |
テキストボックスの名前を txt0から始めて、連続番号を振ります。 txt0,txt1,txt2,txt3......って感じですね。 ラベルコントロールの方も同じです。 FormのLoad時にCaption(標題)をかえてあげればいいので 扱いやすいよう、lbl0,lbl1,lbl2......... と名前付けをします。 Accessにはコントロール配列がありません。 でも、こうするとコントロール配列チックな扱いが出来て、 コードの記述も楽だからです。 なぜtxtの番号を0から始めるかって? FieldsコレクションのIndex番号が0から始まるから。 それぞれのコントロールオブジェクトの番号、FieldsのIndex番号。 これらをそろえるとコードの中での扱いが驚くほど簡単になります。 |
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
cn.CursorLocation = adUseClient
rs.Open "m_ビデオ", cn, adOpenStatic, adLockOptimistic, adCmdTableDirect
Set Me.Recordset = rs
For i = 0 To rs.Fields.Count - 1
Me.Controls("txt" & Format(i, "0")).ControlSource = rs.Fields(i).Name
Me.Controls("lbl" & Format(i, "0")).Caption = rs.Fields(i).Name
Next
rs.Close
Set rs = Nothing
Set cn = Nothing
End Sub
出来てみるとなんともあっけない.....
For...Next文の中でテキストボックスコントロールに値をセットし、ラベルに標題をつけていますから、サブフォームコントロールのSourceObjectと同じく、Recordsetをダイナミックに変更できます。
Server側カーソルを使うときはテーブルをダイレクトに指定せず、SQL文にしてあげてください。(エラーになります)
もしくはオプション値を変えるとか。
抽出や検索は元来Client側カーソルでするものですから問題はありません。
ローカルで使うなら、これで事足りてしまいます。
たとえば、WorkFileを1つにして、ここに全てのデータを編集するフォームをいくつか作っておいて
1つのファイルのみでローカルにある全てのファイル中のテーブルを更新するとか。
C/Sシステムのときは頭が痛いですね・・・夜中しか使えない!?
Server側カーソルを使うときは「編集確定」「新規入力確定」などなどボタンを配置してADOをぶん回す、というセオリーどおりの作りこみになってきます。書き慣れるとそんなに苦ではなくなりますし。最終的にはServer側カーソルを用いてさまざまなデータベースのRecordを編集したり更新したりするのがADOを使う目的なので、ま、それも勉強のうちだと思って頑張りましょう。
いずれにしても何をどう活かすか、ってところですね♪