Access SQLでデータの更新

SQL = “UPDATE ”
SQL = SQL & “dbo_stock_parts ”
SQL = SQL & “INNER JOIN ”
SQL = SQL & “job_product_parts_calc ON ”
SQL = SQL & “(dbo_stock_parts.HNO = job_product_parts_calc.HNO AND ”
SQL = SQL & “job_product_parts_calc.JNO = ” & Me!JNO & “) ”
SQL = SQL & “SET ”
SQL = SQL & “在庫数 = 在庫数 + job_product_parts_calc.計算数”

dbo_stock_partsテーブルには、JNO,HNO,在庫数フィールドがあり、job_product_parts_calcテーブル内には、JNO,HNO,計算数が存在する。

この2つのテーブルでHNOで一致しているものと、フォーム内のJNOが一致しているjob_product_parts_calc内の計算数で、dbo_stock_partsテーブルの在庫数を更新させるSQLになる。

実際に使っている例題は、この備忘録で、「VBA SQL」とでも検索すれば出てくる。

Access ADO レコードセットデータをフォームに入力

dbo_mst_productテーブルから、フォームの製品コード検索内容から、製品名コードで一致したものをフォームのテキストボックスへ入力するためのVBA

Private Sub btn_完全一致_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim stCri As String

Set cn = CurrentProject.Connection
rs.Open “dbo_mst_product”, cn, adOpenKeyset, adLockOptimistic

stCri = “製品名コード='” & Me.製品コード検索 & “‘”
rs.Find stCri

If rs.EOF Then
MsgBox (“検索データがありません。”)
Else
Me!PNO = rs!PNO
Me!受注製品コード = rs!製品名コード
Me!受注製品名 = rs!製品名
Me!受注製品型式 = rs!製品型式
Me!価格 = rs!価格
End If

製品コード検索 = Null

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub

Access フォームの再読込

アクセスのフォームに、SQLのViewなどで表示しているところに、非連結でデータ更新したあとに、再読み込みをしたい時がある。これがなかなか探しても出てこなかったので苦労をした。

結局

DoCmd.ShowAllRecords

を使えば再読込できた。

Access format カンマ等

Format関数の構文

Format([値],”[書式設定]”)

以下書式設定に入れる文字列です

行いたい事 : [書式設定]に入れるもの: 例
————————————————————————–
カンマ区切り : #,##0 : 1,234
¥マーク入り : \\#,##0 : \1,234
単位付き : #,##0\円 : 1,234円
小数点桁数の指定 : #,##0,0000 : 1,234.5670
小数点桁数の指定2 : #,##0,0### : 1,234.567
日付の書式 : YYYY/MM/DD HH:NN:SS : 2002/11/28 10:18:30
YYYYMMDDをYYYY/MM/DD : @@@@/@@/@@ : 20021128->2002/11/28
西暦を和暦 : GGGEE\年MM\月DD\日 : 2002/11/28->平成14年11月28日
和暦を西暦 : YYYY\年MM\月DD\日 : 平成14年11月28日->2002年11月28日
数値を曜日 : AAAA : 1->日曜日
四半期を返す : Q : 2002/01->1
郵便番号 : @@@-@@@@ : 2510871->251-0871
左に0を充填 : 00000 : 123->00123
左に半角スペースを充填 : @@@@@ : 123-> 123
全部大文字 : > : abc->ABC
全部小文字 : < : ABC->abc
曜日:aaa:2003/01/30 -> 木
カンマ区切りで0なら表示しない : #,### : 1234->1,234 0->(表示しない)

Access フォームからレコードをコピー

フォームで新規レコードにするときに、前のレコードをコピーできたらなーって思う事がある。その方法を記す。

フォームにボタンを設置してVBAで処理すればOK

Private Sub コマンド46_Click()
Dim F1, F2, F3, F4, F5

F1 = Me.システム番号
F2 = Me.日付
F3 = Me.受注番号
F4 = Me.得意先メーカー番号
F5 = Me.得意先メーカー名

DoCmd.GoToRecord , , acNewRec

Me.システム番号 = F1 + 1
Me.日付 = F2
Me.受注番号 = F3 + 1
Me.得意先メーカー番号 = F4
Me.得意先メーカー名 = F5
Me.受注製品コード = “JOY”  JOYを強制的に入力
Me.受注製品名 = “運賃”   運賃を強制的に入力

End Sub

Access 1番目コンボボックスから、2段目のコンボボックス抽出

アクセスを使っていると、結構この手法を使う時がある。

最初のコンボボックスで、カテゴリを選択すると、そのカテゴリから、第二のコンボボックス表示を抽出し表示させたい。

例題として、最初のコンボボックスを、カテゴリという名前に、次のコンボボックスの名前を、商品名とします。入力時のマスターデータとして下記のようなテーブルがあるとします。

ID カテゴリ 商品名

(1)フォームに2つのコンボボックスを設置して、コントロールに選択したデータをいれたいテーブルのフィールド名を選択します。
※もしくは、テーブル時点から、ルックアップウイザード等でコンボ形式になっている場合は、最初からフォームでもコンボボックスになっているので、コントロールの設定は必要ありません。今回は、非連結のコンボボックスを設置してから、テーブルのコントロールと紐づけした例を記載した。

(2)値集合ソースを選択して、そのコンボボックスに表示したいカテゴリのテーブルをクエリーにかけて表示できるようにします。
※並び替え等をやる事も、このクエリー段階で設定しておきます。

(3)商品名というコンボボックスを(1)の様にして設定します。
※(2)の手順で表示させたい値のテーブルのクエリーにて設定します。その時に、フォームのカテゴリの値により、商品名が抽出できるようにします。

[Forms]![商品選択画面]![カテゴリ]

(4)カテゴリのコンボボックスを選択後、商品名が抽出選択になるように、更新後処理として、VBAを設定しておきます。

Private Sub カテゴリ_AfterUpdate()

Me!商品名.Requery

End Sub

以上の設定で、最初のコンボボックスで選択したカテゴリ内の、商品名しか、次のコンボボックスには出なくなります。