首页 > 解决方案 > 如何在具有 MS 访问权限的 vb.net 中修复我的程序的更新查询

问题描述

首先这是我的代码:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            'Variables

            Dim PatientNo As Integer = CInt(ID_TextBox.Text)
            Dim updatedDate As DateTime = DateTimePicker1.Value

            dbcon.Open()

            'If Selected "Cleared"

            If ComboBox1.SelectedIndex = 0 Then
                query = "UPDATE Swab SET isActive = 'FALSE', NextSwab = 'NULL' WHERE PatientNo = '" & PatientNo & "'"
                Dim cmd As OleDbCommand = New OleDbCommand(query, dbcon)
                Dim dbada As New OleDbDataAdapter(cmd)
                cmd.ExecuteNonQuery()


                'If Selected "Positive"

            ElseIf ComboBox1.SelectedIndex = 1 Then
                updatedDate = updatedDate.AddDays(7)
                query = "UPDATE Swab SET DateOfSpecimenCollection = '" & DateTimePicker1.Value & "', NextSwab = '" & updatedDate & "' WHERE PatientNo = '" & PatientNo & "'"
                Dim cmd As OleDbCommand = New OleDbCommand(query, dbcon)
                Dim dbada As New OleDbDataAdapter(cmd)
                cmd.ExecuteNonQuery()

            End If

            dbcon.Close()
        Catch ex As Exception

            MessageBox.Show(ex.ToString)

        End Try

    End Sub

“拭子”表

|PatientNo|FirstName|isActive|DateOfSpecimenCollection| NextSwab |
     1       Aldrin    TRUE          15/07/20           22/07/20
     2       Joshua    FALSE         15/07/20             NULL
     3       James     TRUE          15/07/20           22/07/20

我的程序

在此处输入图像描述 请注意,AutoID 是 PatientNo 的主键

我想做的是,当活动患者是时Cleared,它会将他的状态从Swab数据库更新为Swab.isActive = 'FALSE'和他的Swab.NextSwab = 'NULL',但是如果活动患者是,Positive那么它将他的状态从Swab数据库更新为Swab.DateOfSpecimenCollection = DateAndTimePicker1.ValueSwab.NextSwab = DateAndTimePicker1.Value + 7days

例如Aldrin,存在于 2020 年 6 月 30 日创建的记录中。如果他以患者状态为阳性进入系统,那么他将isActive = TRUE在系统中保留他的,他的DateOfSpecimenCollection = DateAndTimePicker1.Value并将NextSwab = DateAndTimePicker1.Value + 7Days被更新。但是,如果他被清除,那么他的isActive意志是错误的,他NextSwab将什么也不显示或NULL

(这是一个测试程序,这就是上表简短的原因)。

标签: vb.netms-access

解决方案


假定 isActive 是一个是/否字段。不要在撇号之间加上 True 或 False。True 和 False 是表示 -1 和 0 的常量。在 SQL 中可以使用 0 或 -1 代替。如果您真的希望字段为空,也不要将 Null 放在撇号之间,否则会保存单词“Null”。仅当字段为文本类型时才使用撇号分隔符。

query = "UPDATE Swab SET isActive = FALSE, NextSwab = NULL WHERE PatientNo = '" & PatientNo & "'"

推荐阅读