vb.net обновляет запись доступа с 2 пунктами Where - PullRequest
0 голосов
/ 11 мая 2018

Я получаю синтаксическую ошибку при попытке использовать 2 Где значения из моей базы данных для обновления идентификатора сотрудника "IddeEmpleado", в котором "Fecha" означает "Дата".Сотрудник уже включился, и я хочу сообщить, когда он отключается в той же строке, что и часы через час.

 Private Sub btnClockout_Click(sender As Object, e As EventArgs) Handles btnClockout.Click
    Dim ds As New DataSet()

    Dim connString As String


    Dim myConnection As OleDbConnection = New OleDbConnection
    connString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = ..\Bases de Datos\Horario.accdb"
    myConnection.ConnectionString = connString

    myConnection.Open()

    Dim cmd As OleDbCommand = New OleDbCommand("select * from Empleado where IdDeEmpleado like '%" + txtEmpId.Text + "%'", myConnection)
    Dim Adpt As New OleDbDataAdapter(cmd)

    If (Adpt.Fill(ds, "Empleado")) Then

        Dim con2 As New OleDb.OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = ..\Bases de Datos\Horario.accdb")



        Try
            Dim Finalizoturno As Object
            Finalizoturno = DateTimePicker1.Text

            con2.Open()

            Dim updateQuery As String = "Update EmpleadoHorario Set FinalizoTurno= '" & DateTimePicker1.Text & "' Where Fecha= '" & datePicker.Text & " ' AND IddeEmpleado = '" & txtEmpId.Text & "'"

            Dim cmd2 As New OleDbCommand(updateQuery, con2)

            cmd2.ExecuteNonQuery()





            MessageBox.Show("Salida de Turno Aceptada")

        Catch ex As Exception
            MessageBox.Show(ex.Message)

        Finally
            con2.Dispose()

            End Try
            con2.Close()

        Else

            MessageBox.Show("ID de Empleado no encontrado")




        End If
        myConnection.Close()

End Sub

1 Ответ

0 голосов
/ 11 мая 2018

Сначала и навсегда включите Option Strict в свойствах проекта на вкладке Compile.

Вы создаете ненужные вам объекты.DataSet и DataAdapter не обязательно должны просто получать счетчик.

Вы можете инициализировать ваше соединение в одну строку, передав строку соединения конструктору.

Не открывайте соединение до тех пор, пока оно вам не понадобится.

Первичный ключ никогда не дублируется, поэтому нет смысла использовать предложение Like в вашем запросе.Вы просто проверяете, существует ли идентификатор.Не извлекайте данные, когда все, что вам нужно, это счетчик.

Используйте параметры.Acces заботится не о названии параметра, а о порядке;поэтому убедитесь, что вы добавляете параметры в том же порядке, в котором они появляются в запросе.

Редко нужно объявлять переменную как Object.Финализотурно это дата, так что отклоните ее как таковую.Свойство Value объекта DateTimePicker возвращает дату, свойство Text возвращает строку.

`

Private Sub btnClockout_Click(sender As Object, e As EventArgs) Handles btnClockout.Click
    Dim myConnection As New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = ..\Bases de Datos\Horario.accdb")
    Dim updateQuery As String = "Update EmpleadoHorario Set FinalizoTurno= ? Where Fecha= ? AND IddeEmpleado = ?;"
    Dim cmd As New OleDbCommand(updateQuery, myConnection)
    Try
        cmd.Parameters.Add("Fecha1", OleDbType.Date).Value = DateTimePicker1.Value
        cmd.Parameters.Add("Fecha2", OleDbType.Date).Value = datePicker.Value
        cmd.Parameters.Add("ID", OleDbType.Integer).Value = CInt(txtEmpId.Text)
        myConnection.Open()
        Dim retVal As Integer = cmd.ExecuteNonQuery()
        myConnection.Close()
        If retVal = 1 Then
            MessageBox.Show("Salida de Turno Aceptada")
        Else               
            MessageBox.Show("ID de Empleado no encontrado")
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        cmd.Dispose()
        myConnection.Dispose()
    End Try
End Sub

`

...