Failed to Convertir Parameter Relación calidad/precio De una cadena a un DateTime (Visual Studio to Access Database)

Estoy tratando de crear un programa de Visual Studio que añadirá un nuevo registro en una base de datos de Access cuando se haga clic en un botón. La información que se introduce en las diferentes columnas de la base de datos de acceso se basa en las casillas de verificación. Ahora estoy recibiendo este error:

enter image description here

Inicialmente pensé que el error surgió de un tipo de datos seleccionado incorrectamente en mi base de datos, sin embargo, he cambiado los tipos como se muestra a continuación, y todavía hay errores.

enter image description here

Estoy perdido, porque pensé que había convertido correctamente las fechas a cadenas. Aquí está mi código de referencia. Gracias por la ayuda.

Private Sub InputInformation(sender As System.Object, e As System.EventArgs) Handles ImporttBUT.Click

        Dim strSql = "Insert Into [DataCollection] (
           
            [M/Y Of LOG],
            [TIME OF LOG],
            [USER],
            [STOCK NUMBER],
            [MISSED PART],
            [NOT IN EPICOR],
            [MISSED BUYOUT],
            [MISSED NON STOCK ITEM],
            [MISSED STOCK ITEM],
            [MISSED AUTOMATED],
            [MISSING PRINTS AFTER QUANTITY],
            [MISSED PRINT NOT SENT TO CHAD],
            OTHER,
            [ADDED MISSING DIMENSION],
            [FIXED DIMENSION]
            )
            Values ( @M_YLog, @TimeLog, @User, @StockNumber, @MissedPart, @NotEpicor, MissedBuyout, @MissedNonStock, @MissedStock, @MissedAutomated, @MissedPrints, @NotSent, @Other, @MissingDimension, @FixedDimension);"

        Using con As New OleDb.OleDbConnection(My.Settings.Database1ConnectionString),
            cmdSQL As New OleDbCommand(strSql, con)

            With cmdSQL.Parameters

                .Add("@M_YLog", OleDbType.VarChar, 100).Value = Me.MonthList2021.SelectedItem
                .Add("@TimeLog", OleDbType.VarChar, 100).Value = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
                .Add("@User", OleDbType.VarChar, 100).Value = UserName
                .Add("@StockNumber", OleDbType.Date, 100).Value = ""
                .Add("@MissedPart", OleDbType.VarChar, 100)
                If MissedPartCHKB.Checked Then
                    cmdSQL.Parameters("@MissedPart").Value = MissedPartCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedPart").Value = "NEATOL"
                End If
                .Add("@NotEpicor", OleDbType.VarChar, 100)
                If NotInEpicorCHKB.Checked Then
                    cmdSQL.Parameters("@NotEpicor").Value = NotInEpicorCHKB.Text
                Else
                    cmdSQL.Parameters("@NotEpicor").Value = "NEATOL"
                End If
                .Add("@MissedBuyout", OleDbType.VarChar, 100)
                If MissedBuyoutCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedBuyout").Value = MissedBuyoutCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedBuyout").Value = "NEATOL"
                End If
                .Add("@MissedNonStock", OleDbType.VarChar, 100)
                If NonStockCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedNonStock").Value = NonStockCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedNonStock").Value = "NEATOL"
                End If
                .Add("@MissedStock", OleDbType.VarChar, 100)
                If MissedSTKItemCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedStock").Value = MissedSTKItemCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedStock").Value = "NEATOL"
                End If
                .Add("@MissedAutomated", OleDbType.VarChar, 100)
                If MissedAutomatedPartCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedAutomated").Value = MissedAutomatedPartCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedAutomated").Value = "NEATOL"
                End If
                .Add("@MissedPrints", OleDbType.VarChar, 100)
                If MissingPrintAfterQTYCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedPrints").Value = MissingPrintAfterQTYCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedPrints").Value = "NEATOL"
                End If
                .Add("@NotSent", OleDbType.VarChar, 100)
                If MissedPrintsNOTSentChadCHKB.Checked = True Then
                    cmdSQL.Parameters("@NotSent").Value = MissedPrintsNOTSentChadCHKB.Text
                Else
                    cmdSQL.Parameters("@NotSent").Value = "NEATOL"
                End If
                .Add("@Other", OleDbType.VarChar, 100)
                If OtherCHKB.Checked = True Then
                    cmdSQL.Parameters("@Other").Value = OtherTXTB.Text
                Else
                    cmdSQL.Parameters("@Other").Value = "NEATOL"
                End If
                .Add("@MissingDimension", OleDbType.VarChar, 100)
                If AddedMissingDimCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissingDimension").Value = AddedMissingDimCHKB.Text
                Else
                    cmdSQL.Parameters("@MissingDimension").Value = "NEATOL"
                End If
                .Add("@FixedDimension", OleDbType.VarChar, 100)
                If FixedDimensionCHKB.Checked = True Then
                    cmdSQL.Parameters("@FixedDimension").Value = FixedDimensionCHKB.Text
                Else
                    cmdSQL.Parameters("@FixedDimension").Value = "NEATOL"
                End If
            End With
            con.Open()
            cmdSQL.ExecuteNonQuery()
        End Using
        ResetControls()
    End Sub
    Private Sub ResetControls()
        Dim lstChkBx As New List(Of CheckBox) From {MissedPartCHKB, MissedAutomatedPartCHKB, NotInEpicorCHKB, NonStockCHKB, MissedSTKItemCHKB, MissedBuyoutCHKB, MissedPrintsNOTSentChadCHKB, MissingPrintAfterQTYCHKB, AddedMissingDimCHKB, FixedDimensionCHKB, OtherCHKB}
        For Each chk As CheckBox In lstChkBx
            chk.Checked = False
        Next
        OtherTXTB.Text = ""
        ' eventually change the month list to automatically select based on the current date
        'If this is a ListBox
        MonthList2021.SelectedIndex = -1
    End Sub

¡Gracias por la ayuda!

Pregunta hecha hace 3 años, 4 meses, 28 días - Por apiartisan


3 Respuestas:

  • Siempre debe almacenar la fecha y el tiempo como Fecha, no como texto o cualquier otra cosa, no hay excepciones.

    Por lo tanto, cambie el tipo de datos a DateTime e intente:

    .Add("@TimeLog", OleDbType.Date).Value = DateTime.Now
    

    Respondida el Dec 17, 2020 a las 13:41 - por debugdragon

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo se debe a que estás tratando de insertar un valor de tipo DateTime en una columna que está definida como tipo de datos Date en tu base de datos de Access.

    En tu query de inserción, estás asignando un valor de tipo DateTime a la columna [STOCK NUMBER]:

    vb
    .Add("@StockNumber", OleDbType.Date, 100).Value = ""
    

    Para solucionar este error, necesitas asegurarte de asignar un valor válido a la columna [STOCK NUMBER] que esté en el formato correcto de Date. Si este campo es opcional y puede estar vacío, puedes asignarle un valor nulo en lugar de una cadena vacía.

    Por ejemplo, podrías modificar esa línea de la siguiente manera para asignar un valor nulo:

    vb
    .Add("@StockNumber", OleDbType.Date).Value = DBNull.Value
    

    Además, revisa todas las otras asignaciones de parámetros en tu código para asegurarte de que estás asignando los tipos de datos correctos a cada columna en tu consulta de inserción.

    Espero que esta corrección te ayude a resolver el problema. Si necesitas más ayuda, ¡estaré aquí para ayudarte!

    Respondida el Dec 18, 2020 a las 13:43 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo se debe a que estás intentando insertar una cadena en un campo de fecha y hora. El campo [M/Y Of LOG] está definido como Fecha/Hora, pero estás intentando insertar el valor de MonthList2021.SelectedItem que es una cadena.

    Para resolver este problema, debes convertir la cadena a un valor de fecha y hora antes de insertarla. Puedes utilizar la función CDate() para convertir una cadena a un valor de fecha y hora.

    Aquí tienes el código corregido:

    vb
    cmdSQL.Parameters("@M_YLog").Value = CDate(Me.MonthList2021.SelectedItem)
    

    También debes asegurarte de que el tipo de datos del parámetro @M_YLog es Fecha y hora.

    Respondida el Dec 18, 2020 a las 13:48 - por Gemini

    Votos positivos: 0 | Votos negativos: 0