Insertar Valor Nulo en Fecha MariaDB
Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y Otros sistemas
Descripción del foro: Proyectos ADP & Sql Server, Mysql& Access, MSDE
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86632
Fecha de impresión: 26/Marzo/2026 a las 15:42
Tema: Insertar Valor Nulo en Fecha MariaDB
Publicado por: jebcarlos
Asunto: Insertar Valor Nulo en Fecha MariaDB
Fecha de publicación: 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
|
Respuestas:
Publicado por: Mihura
Fecha de publicación: 17/Marzo/2023 a las 09:06
Aiss ... fechas, nulos, ... ¡sólo hacen que dar problemas!, da igual el lenguaje o BD que uses .
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.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: jebcarlos
Fecha de publicación: 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
|
Publicado por: Mihura
Fecha de publicación: 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.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: jebcarlos
Fecha de publicación: 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
|
Publicado por: Mihura
Fecha de publicación: 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.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: jebcarlos
Fecha de publicación: 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
|
|