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 |