ACCESSでバーコードをスキャンして登録更新する簡単なサンプル
ACCESSでバーコード値等をスキャンや入力して、テーブルに登録、検索、更新する方法。
テーブルの内容
フォーム
- テーブルのBar値に登録が無い場合、フォームに入力された値と、今日の日付を登録
- フォームに入力された値を、テーブルのFillingDateから検索し、登録された日付を表示
- フォームに入力された値を、テーブルのFillingDateから検索し、FillingDateにボタンが押された日付で更新
ソース
aOption Compare Database
'① Start -------------------------------------------------------------------
Private Sub Button1_Click()
If Bar1.Value = "" Or IsNull(Bar1.Value) Then
MsgBox "入力してください。"
Exit Sub
End If
Dim sql_con As New ADODB.Connection
Dim sql_rs As New ADODB.Recordset
Dim sql_cmd As New ADODB.Command
Dim sql_prm As New ADODB.Parameter
Set sql_con = CurrentProject.Connection
'既存チェック
Dim sql As String
sql = ""
sql = "SELECT COUNT(*) FROM [Data] WHERE Bar = :Bar1"
sql_cmd.CommandText = sql
Set sql_prm = sql_cmd.CreateParameter(":Bar1", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters(":Bar1").Value = Bar1.Value 'バーコード値
sql_cmd.ActiveConnection = sql_con
Set sql_rs = sql_cmd.Execute
If (sql_rs.Fields(0) = 0) Then
'登録
Set sql_cmd = Nothing
Set sql_prm = Nothing
Set sql_cmd = New ADODB.Command
Set sql_prm = New ADODB.Parameter
sql_cmd.ActiveConnection = sql_con
sql = "INSERT INTO [Data]" & vbCrLf
sql = sql & "(" & vbCrLf
sql = sql & " [Bar]" & vbCrLf
sql = sql & " ,[FillingDate]" & vbCrLf
sql = sql & ")" & vbCrLf
sql = sql & "VALUES(" & vbCrLf
sql = sql & " ?" & vbCrLf
sql = sql & " ,?" & vbCrLf
sql = sql & ")"
sql_cmd.CommandText = sql
Set sql_prm = sql_cmd.CreateParameter(":Bar", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
Set sql_prm = sql_cmd.CreateParameter(":FillingDate", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters(":Bar").Value = Bar1.Value 'バーコード値
sql_cmd.Parameters(":FillingDate").Value = Format(Now, "yyyyMMdd") '今日の日付
sql_cmd.Execute
MsgBox "登録しました。"
Else
'登録済み
MsgBox "既に登録済みです"
End If
End Sub
'① End -------------------------------------------------------------------
'② Start -------------------------------------------------------------------
Private Sub Button2_Click()
If Bar2.Value = "" Or IsNull(Bar2.Value) Then
MsgBox "入力してください。"
Exit Sub
End If
Dim sql_con As New ADODB.Connection
Dim sql_rs As New ADODB.Recordset
Dim sql_cmd As New ADODB.Command
Dim sql_prm As New ADODB.Parameter
Set sql_con = CurrentProject.Connection
'既存チェック
Dim sql As String
sql = ""
sql = "SELECT * FROM [Data] WHERE Bar = ? ORDER BY [FillingDate] DESC"
sql_cmd.CommandText = sql
Set sql_prm = sql_cmd.CreateParameter(":Bar1", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters(":Bar1").Value = Bar2.Value 'バーコード値
sql_cmd.ActiveConnection = sql_con
Set sql_rs = sql_cmd.Execute
If (sql_rs.EOF = False) Then
MsgBox "充填日:" & sql_rs.Fields("FillingDate").Value
Else
MsgBox "登録されていません。"
End If
End Sub
'② End -------------------------------------------------------------------
'③ Start -------------------------------------------------------------------
Private Sub Button3_Click()
If Bar3.Value = "" Or IsNull(Bar3.Value) Then
MsgBox "入力してください。"
Exit Sub
End If
Dim sql_con As New ADODB.Connection
Dim sql_rs As New ADODB.Recordset
Dim sql_cmd As New ADODB.Command
Dim sql_prm As New ADODB.Parameter
Set sql_con = CurrentProject.Connection
'既存チェック
Dim sql As String
sql = ""
sql = "SELECT COUNT(*) FROM [Data] WHERE Bar = :Bar1"
sql_cmd.CommandText = sql
Set sql_prm = sql_cmd.CreateParameter(":Bar1", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters(":Bar1").Value = Bar3.Value 'バーコード値
sql_cmd.ActiveConnection = sql_con
Set sql_rs = sql_cmd.Execute
If (sql_rs.Fields(0) = 1) Then
'更新
Set sql_cmd = Nothing
Set sql_prm = Nothing
Set sql_cmd = New ADODB.Command
Set sql_prm = New ADODB.Parameter
sql_cmd.ActiveConnection = sql_con
sql = "UPDATE [Data] SET [FillingDate] = ? WHERE [Bar] = ?"
sql_cmd.CommandText = sql
Set sql_prm = sql_cmd.CreateParameter(":FillingDate", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
Set sql_prm = sql_cmd.CreateParameter(":Bar1", adBSTR, adParamInput)
sql_cmd.Parameters.Append sql_prm
sql_cmd.Parameters(":FillingDate").Value = Format(Now, "yyyyMMdd") '今日の日付を登録
sql_cmd.Parameters(":Bar1").Value = Bar3.Value
sql_cmd.Execute
MsgBox "更新しました"
Else
MsgBox "登録されていません。"
End If
End Sub
登録された結果
登録された[Bar]値に空白があるのは、最初、入力された値(スキャン値)が何も入力されたかった場合(Null)や、空白値が入力された場合をサンプルだったので考慮しませんでしたが、後からソース内でリジェクトするように追加しました。
If If Bar3.Value = "" Or IsNull(Bar3.Value) Then MsgBox "入力してください。"
Exit Sub
End If