** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Insertar Valor Nulo en Fecha MariaDB
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoInsertar Valor Nulo en Fecha MariaDB

 Responder Responder
Autor
Mensaje
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 275
Enlace directo a este mensaje Tema: Insertar Valor Nulo en Fecha MariaDB
    Enviado: 17/Marzo/2023 a las 05:01
Buenas noches, revisando la página Mihura (http://www.accessaplicaciones.com/mysql.html), sobre como trabajar con MYSQL en el BackEnd, y mirando los videos de Juanjo, por cierto buenos maestros, me he querido adentrar en este mundo.

Me cree una BD en MariaDB, con una tabla de pruebas la cual tiene este código:
CREATE TABLE `bprueba` (
    `consecutivo` INT(11) NOT NULL AUTO_INCREMENT,
    `txtTexto` INT(11) NOT NULL,
    `txtFecha0` DATE NULL DEFAULT NULL,
    `txtFecha1` DATE NULL DEFAULT NULL,
    `txtHora0` TIME NULL DEFAULT NULL,
    `txtNumero0` INT(11) NULL DEFAULT NULL,
    `txtNumero1` INT(11) NULL DEFAULT NULL,
    `txtversion` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_spanish_ci',
    PRIMARY KEY (`consecutivo`) USING BTREE
)
COLLATE='utf8mb4_spanish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=21
;

Ahora bien la conecte mediante ADO gracias a MIHURA y a JUANJO, a un frontend con un formulario desconectado donde están los 8 campos, con la finalidad de aprender a INSERTAR información de los distintos tipos de datos, sin embargo me encuentro atascado para ingresar un valor NULL en el campo txtFecha0, ya que me salta el siguiente error.
" Error -2147217913 ([ma-3.1.17][10.11.2-MariaDB]Incorrect date value: '' for column `intram`.`bprueba`.`txtFecha0` at row 1) in procedure btnSave_Click mdlConectaMYSQL "

Sin embargo si en dicho campo tengo una fecha al insertar si me permite.

Aquí dejo el código. hay varias lineas comentadas ya que son las distintas pruebas que he hecho primero para lograr insertar la fecha cuando no es NULL y lo que he intentado sin resultado cuando es NULL.

Private Sub Comando20_Click()
On Error GoTo ErrorHandler
 
        
    Select Case MsgBox("¿Está seguro que quiere añadir el registro?", vbYesNo Or vbQuestion, "Atención")

        Case vbYes
        
            If ConexionSQL1 = False Then
                Call MsgBox("Se ha perdido la conexión con el servidor.", vbExclamation, "Atención")
                Exit Sub
            End If



'SQL = "insert into bprueba (txtTexto, txtFecha0, txtFecha1, txtHora0 txtNumero0, txtNumero1, version) VALUES ('" & Me.Texto1 & "', '" & Nz(Me.Texto2, 0) & "', " & IIf(IsNull(Me.Texto3), Null, Date) & ", " & IIf(IsNull(Me.Texto4), Null, Time) & ", '" & Val(Me.Texto5) & "', '" & Val(Me.Texto6) & "', '" & Me.Texto7 & "')"
           ' SQL = "insert into bprueba (txtTexto, txtFecha0, txtFecha1, txtHora0 txtNumero0, txtNumero1, version) VALUES ('" & Me.Texto1 & "', '" & Nz(Me.Texto2, 0) & "', " & Nz(Me.Texto3, Null) & ", " & Nz(Me.Texto4, Null) & ", '" & Nz(Me.Texto5, Null) & "', '" & Nz(Me.Texto6, Null) & "', '" & Nz(Me.Texto7, "") & "')"
           '  SQL = "insert into bprueba (txtTexto, txtversion) VALUES (" & Me.Texto1 & ", '" & Me.Texto2 & "')"
            ' SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Format(Me.Texto2, "yyyy/mm/dd") & "')" 'este si funciona'
              SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Nz(Format(Me.Texto2, "yyyy/mm/dd"), Null) & "')"
            ' SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Nz(Format(Me.Texto2, "yyyy/mm/dd"), " & 1900/01/01 & ") & "')"
            'SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (1, '2023/03/14')"
                                
            'Debug.Print sql
            CnRemota.Execute SQL
                
            MsgBox "Registro añadido al servidor", vbOKOnly Or vbInformation, "INFORMACIÓN"
            Exit Sub
        Case vbNo

    End Select

ExitProcedure:
    Err.Clear
    Exit Sub

ErrorHandler:
    Select Case Err.Number
        Case 0
        Case Else
            MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure " & "btnSave_Click" & " " & Application.VBE.ActiveCodePane.CodeModule.Name
            Resume ExitProcedure
    End Select
End Sub

De antemano muchas gracias por su colaboración
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 09:06
Aiss ... fechas, nulos, ... ¡sólo hacen que dar problemas!, da igual el lenguaje o BD que uses Ouch.

Personalmente, si un campo es nulo no lo incluyo en la INSERT, y si lo tengo que poner le pongo el valor "" cosa que ya has hecho tú.

Un saludo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 275
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 17:45
Mihura gracias por contestar. Tengo dos problemas es que la tabla donde realmente voy a guardar la información en alguna ocasiones la fecha, el texto o los valores serán NULOS.

En cuanto a las comillas "", el sistema no me permite ingresarlos por el error que coloque en el post inicial. y es este

" Error -2147217913 ([ma-3.1.17][10.11.2-MariaDB]Incorrect date value: '' for column `intram`.`bprueba`.`txtFecha0` at row 1) in procedure btnSave_Click mdlConectaMYSQL "

Lo intente colocando '0000-00-00', '1900/01/01' y nada de nada. NO se la verdad como logarlo
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 17:50
No le des valor ... haz el INSERT sin ese campo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 275
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 18:38
Perdona la ignorancia, pero es que alguna veces si necesito hacer el INSERT y en otras no, Y como se ejecuta desde un boton de comando no sabría como hacerlo
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 18:54
Yo lo suelo hacer 'fuera' de la SQL, aunque se podría hacer dentro usando SiInm.

Así, en pseudocódigo:

XSELECT = "": XVALUE = ""
IF Fecha TieneValor then
XSELECT = ", CampoFecha"
        XVALUE =   ", ValorFechaDebidamenteFormateado"
End IF

SQL = "INSERT INTO Tabla (Campo1, Campo2" & XSELECT & ")" & _
         " VALUES (Valor1, Valor2" & XVALUES & ")"


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 275
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 18:56
Listo voy a probar ya comentaré como me fue.

Listo ya lo probé as{i y me funciona.

Private Sub Comando20_Click()
Dim txtLaFecha As String
On Error GoTo ErrorHandler
 
        
    Select Case MsgBox("¿Está seguro que quiere añadir el registro?", vbYesNo Or vbQuestion, "Atención")

        Case vbYes
        
            If ConexionSQL1 = False Then
                Call MsgBox("Se ha perdido la conexión con el servidor.", vbExclamation, "Atención")
                Exit Sub
            End If
            
txtLaFecha = IIf(IsNull(Me.Texto2), "1900/01/01", Me.Texto2)




'SQL = "insert into bprueba (txtTexto, txtFecha0, txtFecha1, txtHora0 txtNumero0, txtNumero1, version) VALUES ('" & Me.Texto1 & "', '" & Nz(Me.Texto2, 0) & "', " & IIf(IsNull(Me.Texto3), Null, Date) & ", " & IIf(IsNull(Me.Texto4), Null, Time) & ", '" & Val(Me.Texto5) & "', '" & Val(Me.Texto6) & "', '" & Me.Texto7 & "')"
           ' SQL = "insert into bprueba (txtTexto, txtFecha0, txtFecha1, txtHora0 txtNumero0, txtNumero1, version) VALUES ('" & Me.Texto1 & "', '" & Nz(Me.Texto2, 0) & "', " & Nz(Me.Texto3, Null) & ", " & Nz(Me.Texto4, Null) & ", '" & Nz(Me.Texto5, Null) & "', '" & Nz(Me.Texto6, Null) & "', '" & Nz(Me.Texto7, "") & "')"
           '  SQL = "insert into bprueba (txtTexto, txtversion) VALUES (" & Me.Texto1 & ", '" & Me.Texto2 & "')"
             SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Format(txtLaFecha, "yyyy/mm/dd") & "')" 'este si funciona'
            '  SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Nz(Format(Me.Texto2, "yyyy/mm/dd"), Null) & "')"
            ' SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (" & Me.Texto1 & ", '" & Nz(Format(Me.Texto2, "yyyy/mm/dd"), " & 1900/01/01 & ") & "')"
            'SQL = "insert into bprueba (txtTexto, txtFecha0) VALUES (1, '2023/03/14')"
                                
            'Debug.Print sql
            CnRemota.Execute SQL
                
            MsgBox "Registro añadido al servidor", vbOKOnly Or vbInformation, "INFORMACIÓN"
            Exit Sub
        Case vbNo

    End Select

ExitProcedure:
    Err.Clear
    Exit Sub

ErrorHandler:
    Select Case Err.Number
        Case 0
        Case Else
            MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure " & "btnSave_Click" & " " & Application.VBE.ActiveCodePane.CodeModule.Name
            Resume ExitProcedure
    End Select
End Sub

Como ud dijo por fuera de la SQL, ahora a seguir con los numéricos, y los textos, para luego ir al formulario verdadero donde tengo como 60 campos de todos los tipos a ver como lo implemento.  Gracias MIhura. Se puede cerrar el hilo




Editado por jebcarlos - 17/Marzo/2023 a las 19:09
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable