Access基本 [質問Form] TSES>Top
エラー429 ActiveXコントロールが作成できない
 いろんな原因があるが、Access再インストールでなおる場合が多い。06.6以降W98/Me WinUpdate後に発生の時は
 Microsoft Data Access Components (MDAC) のバージョンが、Access と互換性ない場合。
Accessの開発ステップ
 1.テーブル作成 2.リレーションシップ作成 3.クエリー作成 4.フォーム、レポート作成
 フォームやレポートはテーブルやクエリーを利用する  
伝票や受注番号などを自動的に発行する、一度発行Noは削除しても再利用しない。
 [新規]ボタンで発番のサンプルプログラム、>Top「ダウンロード見積」
伝票など明細行を表示すると行順序が入替るのが困る。
 明細に行番号を付加する。サンプルプログラム>Top「ダウンロード」
印刷のダイアログを表示
 Docmd.RunCommand.acCmdPrint
デバッグのためerrorで必ず止まるようにしたい
 [VBコード]「ツール」「オプション」「全般」タグ、「エラートラップ」発生時に停止をチェック
コンボボックスのデータ値と表示の関係は?
 値は「連結列」、表示は「列幅」に対応する。
 列が「CD,品名」の場合、連結列=1で列幅=0にすれば、表示は品名ですが値は「CD」になる。
リストやコンボボックスのデータを利用したい
 ヘルプ「ItemsSelected」を参照。
 For varRow = 0 To .ListCount - 1
  .Column(列, varRow) '列=0〜.ColumnCount-1
 Next
リストボックスで複数選択したデータを利用したい
 For Each varIdx In ctl.ItemsSelected
  Debug.Print .ItemData(varIdx) ' 連結列の値
2つのコンボBOX-A,Bにおいて、Aで選択した値によりBのリスト内容を制限する。
 例えば、ソース内容はコンボA(CD,分類)、コンボB(ID,名称,CD)の様にCDで関連付ける。
 コンボBの「値集合ソース」のクエリービルダで「CDの抽出条件」に [forms].[フォーム名].[コンボA]を指定、
  コンボAのイベント(更新後)で コンボB.Requery を入力。
 ただし、コンボAの「連結列」が1(分類)の場合はRequeryの前にクエリーで指定。
  コンボB.RowSource = "SELECT ID,名称,CD FROM T名称 WHERE CD=" & コンボA.Column(0)
コンボボックス商品IDを入力した時、品名と単価を表示(推奨)
 DLookupよりもColumnプロパティを利用する、商品IDコンボ表示の列が「CD,商品名,単価」の場合
 商品ID_AfterUpdate()
   Me!商品名 = Me!商品ID.Column(1):Me!単価 = Me!商品ID.Column(2)
 非連結テキストの場合、「単価」プロパティの「コントロールソース」=商品ID.Column(2)
テキストボックス商品IDを入力した時、品名と単価を表示
  商品ID_AfterUpdate()
   Me.商品名 = DLookup("商品名", "T商品","商品ID="&商品ID):Me.単価 = DLookup("単価", ...
テキストボックスのコントロールソース計算結果をテーブル・フィールドに代入するにはどこで行えばいいか
 Form_BeforeUpdateイベントでは値が0になるので、cmd登録_Click()などで行うと良い。 
明細や一覧などの合計を求める
 テキストボックスのコントロールソースに、 =Sum([金額])
サブフォームの項目の値を参照する。
 メインフォームのテキストボックスのコントロールソースに、=[見積サブ].Form.[金額計]
フォームを開くとき、表示するレコードを指定する。
 特定レコード対象の場合、フォームのフィルタを指定して開く
 DoCmd.OpenForm "F見積", , , , , , Me!見積ID  ’検索した見積番号を引数として開く 
フォームを開くとき、特定のレコードへ移動する。
 全レコード対象の場合
 項目.setfocus ’カレントフィールド変更
 DoCmd.FindRecord ”検索キー”  ’データが見つからないと移動しない
 ’ループで移動する例(件数が多いと時間がかかる
 While 日付< Date
  DoCmd.GoToRecord , , acNext
 Wend
フォームの並びと同じレポートを出力(レポートプロパティの並び替えを変更する)
 
フォームのフィルターと同一条件でレポートを出力。
 DoCmd.OpenReport "R一覧表", acPreview, , Me.Filter
クエリーでテーブルに無い項目を使う。
 数量と単価のフィールドから「金額」を定義すると次のようになる。 金額: [数量]*[単価]
 日付から「年」だけのフィールドを定義。 年:Year([日付]) *「:」は半角コロン
変更を元に戻すでエラーになる。
 変更の有無を調べてから戻す。 If Me.Dirty Then Me.Undo 
伝票番号などを自動設定にする
 テーブル、フィールドのデータ型をオートナンバー型にすると入力時点では番号が表示されない。
 自動番号=DMax("伝票番号", "T受注")+1 ’受注テーブルの伝票番号の最大値から求める
 でも、削除した番号を再利用してしまう場合がある
コントロールソースの計算結果が正しく表示されない時がある
 テキストの変更後イベントで、 Me.Recalc  (ただし明細行では先頭行に移動してしまう)
 Me.Refreshはレコードの再表示
イベントの更新前と更新後の使い分け
 更新前処理は入力データのチェックなどを行う、キャンセルが出来る(次の項へ移動しない)
 レコード・フィールドの場合は、フィールド内容は更新されていない。
レポートの明細行数1〜Nを印刷したい
 テキストボックスを追加し、「コントロールソース」に =1 を入力、「集計実行」を’全体’を選択
独自のツールバーを設定する。
 新たにツール・バーを作る。
  1.表示、ツールバー、ユーザ設定、新規作成。「ツールバー名」ユーザ設定1
  2.[コマンド] タブ、分類を選択し、必要なコマンドをドラッグで「ユーザ設定1」に貼り付けます。
  3.ツールバー名称を変更する。ツールバーの名称をクリックし、[名前の変更]ボタン
 ドロップダウン・バーを作る
  1.表示、ツールバー、ユーザ設定、.[コマンド] タブ、分類の「新しいメニュー」
   ドラッグで「ユーザ設定1」に貼り付け
  2.必要なコマンドをドラッグで「新しいメニュー」のドロップダウン部分に貼り付ける
  3.ツールバー名称変更は名称を右クリックし「名前」を入力
 フォームやレポートにツールバーを割り当てる(表示する)。
  フォームプロパティ、その他、ツールバーに上記のバー名称を設定
メニューバーにするには。
 ツールバーの名称をクリックし、[プロパティ]ボタンで「ツールバー種類」を変更
標準的な「ファイルを開く」ダイアログボックスはないのですか。
 Windows環境・オブジェクト関連のテクニック
 http://www.moug.net/technic/acvba/technic.cgi?I02001
 「コモンダイアログ APIまたはGetOpenFileNameメソッド」を使用する。
 空耳工房 http://www.bea.hi-ho.ne.jp/my2project/   「VB」から「各種ダイアログ関連」
2000で「プロジェクト表示用にロックする」をしても2003ではコード表示される。
 2003で「プロジェクト表示用にロックする」を設定しなおす。00と03で別々の設定が保存される。
リンク AccessRoad アプライドナレッジQ&A