| MSDE FunClub |
|
最終更新日 : 2000/11/24 |
|
Microsoft Data Engine FunClub
|
Since 2000.11.24
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) |
|
【第23章494p 〜 496p掲載】 |
【例題12番】
ADOプログラムによる
連結フォームの作成
パラメータ付きストアドプロシージャが返すレコードセットに連結
患者番号の検索範囲を入力し、検索ボタンを押してください
検索結果のレコードセットはADOプログラムによって作成します

検索連結ボタンのVBAプログラム
'
'************************************************************
' 【検索の実行】
' レコード検索を行うストアドプロシージャをレコードセットとする
'************************************************************
'
Private Sub Search_Click()
Dim r$, s$, e$
'検索対象の患者ID番号の取得
s$ = "1"
e$ = "999"
If Not IsNull(Me![St]) Then s$ = Me![St]
If Not IsNull(Me![Ed]) Then e$ = Me![Ed]
'今までのレコードセットの連結を解除する
Discon Me
'ADOの接続
'現在のAccessプロジェクトの接続を取得する
Dim cn As ADODB.Connection
Set cn = CurrentProject.Connection
'ADOレコードセットを作成する
Dim rs As New ADODB.Recordset
'レコードセットのプロパティを設定する
rs.CursorLocation = adUseServer
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
'レコードソースの定義
'パラメータ付きストアドプロシージャの実行です
r$ = "EXEC PROC_医師患者2 @st=" & s$ & " , " & _
"@ed=" & e$
rs.Open r$, cn, , , adCmdText
MsgBox r$, , "レコードソースの定義式"
'フォームのレコードセットに代入する
Set Me.Recordset = rs
'再同期コマンドの定義
Me.ResyncCommand = "Resync_医師患者 @no = ?"
'固有のテーブルの定義
Me.UniqueTable = "患者"
'テキストボックスの連結先フィールド名の設定
'テキストボックスの名前が列名に一致している
Me![患者番号].ControlSource = "患者番号"
Me![患者姓].ControlSource = "患者姓"
Me![患者名].ControlSource = "患者名"
Me![医師番号].ControlSource = "医師番号"
Me![医師氏名].ControlSource = "医師氏名"
Me![医師電話].ControlSource = "医師電話"
'念のためクエリーの実行
Me.Requery
'検索が失敗したときは連結を解除する
If (Me.Recordset.RecordCount = 0) Then
MsgBox "レコードの検索に失敗しました", , "失敗です"
Discon Me
End If
End Sub
'
'**********************************
' フォームのレコードセットを解除
'**********************************
'
Sub Discon(fm As Form)
If Not (fm.Recordset Is Nothing) Then
fm![患者番号].ControlSource = ""
fm![患者姓].ControlSource = ""
fm![患者名].ControlSource = ""
fm![医師番号].ControlSource = ""
fm![医師氏名].ControlSource = ""
fm![医師電話].ControlSource = ""
fm.RecordSource = ""
End If
End Sub