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が使用出来ないので注意。

2010年6月11日金曜日

Access 2003 ランタイムでのセキュリティ警告を非表示にする方法

Access 2003 ランタイム環境では、
セキュリティーレベルを変更することができません。
Access 2003 ランタイムのみの実行環境では
始めにランタイムをインストール後

セキュリティーレベル変更専用のmdbファイルを開発環境にて
作成し、ランタイムがインストールされている端末で
実行後するとセキュリティーレベルの変更ダイアログ
が表示されレベル'低'へ変更が可能になる。

mdb実行後以降は、セキュリティー警告は表示されなくなる。



---------------------------------
セキュリティーレベル変更mdbの内容
---------------------------------

' [ツール] メニューの [参照設定] で
'"Microsoft Office 11.0 Object Library" を参照します。
'"Microsoft Access 11.0 Object Library"ではなく
'"Microsoft Office 11.0 Object Library"
'(間違えやすいので注意)

Dim cBars As Office.CommandBars
Dim cBarCtl As Office.CommandBarControl

Set cBars = Application.CommandBars

' [マクロ] の [セキュリティ] ボタンの ID (識別子)
' '3627' をセットします。
Set cBarCtl = cBars.FindControl(msoControlButton, 3627)

' セットしたコマンドバー コントロールを表示します。
cBarCtl.Execute

2010年5月31日月曜日

フォーム・レポートにフィールドリストを表示させる

・マウス操作
フォームをデザインで開き
表示(V) → フィールド リスト(L)



・ショートカット
フォームをデザインで開き
F8

メッセージ 544、レベル 16、状態 1、行 1 IDENTITY_INSERT が OFF に設定されているときは、テーブル 'M商品' の 商品CD 列に明示的な値を挿入できません。 の対処

SET IDENTITY_INSERT TableA.dbo.M商品 ON
GO
--INSERT可能状態



DELETE FROM TableA.dbo.M商品
GO
--必要に応じてテーブルのリセット



INSERT INTO TableA.dbo.M商品
(
商品CD
)
SELECT
商品CD
FROM TableB.dbo.M商品
--任意のSQL文



SET IDENTITY_INSERT TableA.dbo.M商品 OFF
GO
--INSERT不可能状態に戻す事!!