Translate

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

ACCESSでバーコード値等をスキャンや入力して、テーブルに登録、検索、更新する方法。




テーブルの内容


Bar = バーコード値等
FillingDate = スキャンした日付 (登録ボタンを押した日付)

フォーム


  1. テーブルのBar値に登録が無い場合、フォームに入力された値と、今日の日付を登録
  2. フォームに入力された値を、テーブルのFillingDateから検索し、登録された日付を表示
  3. フォームに入力された値を、テーブルの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

このブログの人気の投稿

VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

PostgreSQL 11 でpg_dumpallを使ってバックアップしたデータをリストアするとき文字化けの対処法

ACCESSのVBAを実行するとACCESSが強制終了する事がある

VBSでマクロの実行時に警告を非表示にする方法

ACCESSのVBAでADOを利用したバインド変数を利用したデータベース連携方法

pgAdmin 4が遅いのは仕方がない | PostgreSQL things.

ASP.NETのでクライアント証明書を使ったログイン認証を行う方法

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365