2010年7月30日金曜日

サブフォームの任意の明細行にSetFocusする方法

レコードセットのBookmarkプロパティを使用すると
何番目のレコードかが取得出来、サブフォームの
Bookmarkに代入する事で任意のレコードを
アクティブにする事が可能となる。
------------
使用例 Start
------------
Dim varBookMark As Variant

' フラグ初期化
intNullCheck = 0

SqlMain = ""
SqlMain = SqlMain & " SELECT *"
SqlMain = SqlMain & " FROM 得意先単価
'ブックマークプロパティ使用の為のレコードセット
Call recOpenSearch(CnnMain, SqlMain, RecMain)
If Not RecMain.EOF Then
  RecMain.MoveFirst
  Do Until RecMain.EOF
    '単価と適用日がセットで入力されているかをチェック
    If Nz(RecMain!変更単価, 0) <> 0 Then
      If Nz(RecMain!適用日, "") = "" Then
        varBookMark = RecMain.Bookmark ' ブックマークの値を変数へ
        intNullCheck = 1 ' 適用日未入力
      End If
    End If
    RecMain.MoveNext
  Loop
End If
Call recClose(RecMain)

If intNullCheck = 1 Then
  Call MsgBox("適用日が入力されていません ", vbInformation, "警告")
  Me.sub得意先単価.SetFocus 'サブフォーム内のコントロールへのSetFocusは一旦全体に
  Me.sub得意先単価.Form.Bookmark = varBookMark 'BookMarkの値を代入
  Me.sub得意先単価.Form.txt予約変更日.SetFocus '任意のコントロールへSetFocus
  Exit Function
End If

Public Sub recOpenSearch(ByRef Cnn As ADODB.Connection, ByVal Sql As String, ByRef rec As ADODB.Recordset)
  Dim cmd As New ADODB.Command

  cmd.CommandType = adCmdText
  cmd.CommandText = Sql
  cmd.ActiveConnection = Cnn

  With rec
    .CursorLocation = adUseServer
    .CursorType = adOpenStatic 'adOpenStaticでないとBookMarkは使用不可
    .LockType = adLockPessimistic
    .Open cmd
  End With
End Sub
------------
使用例 End
------------
Accessプロジェクトでは、CursorTypeをadOpenStaticに設定しないと
Bookmarkが使用出来ないので注意。

0 件のコメント:

コメントを投稿