ダウンロード
テーブル一覧
ログイン
フォーム
VBAコード
メインメニュー
フォーム
VBAコード
入出庫処理
フォーム
VBAコード
入出庫履歴
フォーム
クエリ
VBAコード
在庫検索
クエリ
VBAコード
安全在庫
フォーム
クエリ
VBAコード
在庫転送
フォーム
VBAコード
単位変換
フォーム
VBAコード
インポートとテーブルクリア
フォーム
VBAコード
マスタ
BOM構成
フォーム
VBAコード
エラーログ
その他
ハッシュ値
参照設定
バーコード
完成したら
標準モジュールVBAコード
在庫管理システムでしようしているデータベースへの読み書きを記しておきます。
読み込み
次のようなテーブル(T_社員)があり、今「社員・鈴木一郎の社員コードを取得したい」とします。
ID | 社員コード | 社員 | 所属 |
1 | 10000 | 山田太郎 | 管理部 |
2 | 10001 | 鈴木一郎 | 製造部 |
3 | 10002 | 在庫花子 | 営業部 |
SQLとしては下記を使用します。
sql = "SELECT * FROM (テーブル名) WHERE (フィールド名)= '(パラメータ名)'"
具体的には
sql = "SELECT * FROM T_社員 WHERE 社員 = '鈴木一郎'"
これを汎用的にします。
sql = "SELECT * FROM " & strTable & " WHERE " & strField1 & "= '" & strParameter & "'"
パラメータ(strParameter)をシングルクォーテーション(’)で囲います。
文字列の連結には&を用います。
データベースから読み出す処理を関数(Function)にします。
Public Function ReadDatabase(ByVal strTable As String, ByVal strField1 As String, ByVal strParameter As String, ByVal strField2 As String) As String
On Error Resume Next
Dim sql As String
Dim rst As DAO.Recordset
sql = "SELECT * FROM " & strTable & " WHERE " & strField1 & "= '" & strParameter & "'"
Set rst = CurrentDb.OpenRecordset(sql)
ReadDatabase = rst.Fields(strField2)
If IsNull(ReadDatabase) = True Then ReadDatabase = "" 'Nullだった場合の処理
rst.Close
Set rst = Nothing
End Function
上の関数の中で、引数strField2は読み出したい「社員コード」を入力します。
まず、確認のためにポップアップさせます
msgbox ReadDatabase("T_社員","社員","鈴木一郎","社員コード")
上記のように社員コード10001が表示されればOKです。VBAコード例を示します。
社員コードは数値ですので、文字列を数値に変換するValを使用します。
例ではInteger(厳密にはVal()はLong型なのでVal()をInt()で囲む)としていますが、数値の範囲によってはLongやSingleで宣言します。文字列ならStringです。
Dim int社員名 as Integer
int社員名 = Val(ReadDatabase("T_社員","社員","鈴木一郎","社員コード"))
書き込み
入出庫処理での例をまず示します。
AddNewは新しいレコードに書き込むことを意味します。既存のレコードのデータを書き換えるなら、ここにEditを用います。(他にもDeleteがあります)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("T_入出庫処理", dbOpenTable)
With rst
.AddNew
.Fields("日付") = Me.txt_日付
.Fields("品目コード") = Me.cmb_品目
'~省略~
.Update
.Close
End With
Set rst = Nothing
下記が基本形です。
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset((テーブル名), dbOpenTable)
rst.AddNew
rst.Fields(フィールド名)=(書き込みデータ)
rst.Update
Updateを忘れるとデータベースへ記録されません。
最後はCloseとNothingで閉じます。
rst.Close
Set rst = Nothing
上記例は
rst.AddNew
rst.Fields("日付") = Me.txt_日付
rst.Fields("品目コード") = Me.cmb_品目
'~省略~
rst.Update
rst.Close
rstが冒頭に付くコードが連続しますので、With~End Withステートメントで囲むと見やすいですし、コーディングも楽です。
書き込みも関数化できそうですが、引数が固定にならないため、ParamArray()を使わざるを得ませんのでやめました。