Automatizar histórico de actualizaciones - Problema con campos vacíos
Publicado por Jesús Manuel (134 intervenciones) el 25/02/2013 09:04:03
Muy buenas:
Tengo una BD con dos tablas (clientes e historico) y un formulario (CLIENTES).
En la tabla historico se insertan los registros de la tabla clientes cuando se ha modificado algún dato desde el formulario CLIENTES.
El problema es que si algún campo de un registro esta en blanco, no se copia el registro en la tabla historico y no puedo forzar que todos los campos sean obligatorios porque siempre me puede faltar alguno de los datos.
El código que tengo asociado al formulario es el siguiente:
Private Sub Form_BeforeUpdate(Cancel As Integer)
' Hace una copia en la tabla HISTORIAL del registro que se actualiza
If NewRecord = False Then
HacerHistorial Me.ID_Cliente, "Actualizar"
Else
If Nz(Me.ID_Cliente, 0) = 0 Then
MsgBox "ID de registro no válida"
End If
End If
End Sub
' Creamos unha función que creara una cadena de código SQL para copiar los registros de la tabla CLIENTES en la tabla HISTORIAL antes de actualizarlos
Private Sub HacerHistorial(ID As Long, OP As String)
Dim CadenaSQL As String
CadenaSQL = "INSERT INTO HISTORICO (ID_Cliente, Nombre, Apellidos, NIF, Telefono, Email, Tipo, Fecha_Actualizacion) VALUES (" & ID & ", '" & _
DLookup("Nombre", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Apellidos", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("NIF", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Telefono", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Email", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
OP & "', #" & _
Now & "#)"
CurrentDb.Execute CadenaSQL
End Sub
' Hace una copia en la tabla HISTORIAL del registro que se elimina
Private Sub Form_Delete(Cancel As Integer)
HacerHistorial Me.ID_Cliente, "Eliminar"
End Sub
He comprobado que al crear la cadena SQL, cuando un campo esta vacío, en la cadena aparece el siguiente texto: ... VALUES (1,'Ramón', 'López', '33222444Z', ", '[email protected]', 'Actualizar', #25/02/2013 8:30:30#)
También he probado a usar la función Nz pero el resultado no varia del texto anterior cuando se crea la cadena SQL, si no incluyo el valueifnull.
Tenéis alguna idea de como puedo "forzar" una cadena de texto de tamaño 0 ????
Tengo una BD con dos tablas (clientes e historico) y un formulario (CLIENTES).
En la tabla historico se insertan los registros de la tabla clientes cuando se ha modificado algún dato desde el formulario CLIENTES.
El problema es que si algún campo de un registro esta en blanco, no se copia el registro en la tabla historico y no puedo forzar que todos los campos sean obligatorios porque siempre me puede faltar alguno de los datos.
El código que tengo asociado al formulario es el siguiente:
Private Sub Form_BeforeUpdate(Cancel As Integer)
' Hace una copia en la tabla HISTORIAL del registro que se actualiza
If NewRecord = False Then
HacerHistorial Me.ID_Cliente, "Actualizar"
Else
If Nz(Me.ID_Cliente, 0) = 0 Then
MsgBox "ID de registro no válida"
End If
End If
End Sub
' Creamos unha función que creara una cadena de código SQL para copiar los registros de la tabla CLIENTES en la tabla HISTORIAL antes de actualizarlos
Private Sub HacerHistorial(ID As Long, OP As String)
Dim CadenaSQL As String
CadenaSQL = "INSERT INTO HISTORICO (ID_Cliente, Nombre, Apellidos, NIF, Telefono, Email, Tipo, Fecha_Actualizacion) VALUES (" & ID & ", '" & _
DLookup("Nombre", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Apellidos", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("NIF", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Telefono", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
DLookup("Email", "CLIENTES", "ID_Cliente =" & ID) & "', '" & _
OP & "', #" & _
Now & "#)"
CurrentDb.Execute CadenaSQL
End Sub
' Hace una copia en la tabla HISTORIAL del registro que se elimina
Private Sub Form_Delete(Cancel As Integer)
HacerHistorial Me.ID_Cliente, "Eliminar"
End Sub
He comprobado que al crear la cadena SQL, cuando un campo esta vacío, en la cadena aparece el siguiente texto: ... VALUES (1,'Ramón', 'López', '33222444Z', ", '[email protected]', 'Actualizar', #25/02/2013 8:30:30#)
También he probado a usar la función Nz pero el resultado no varia del texto anterior cuando se crea la cadena SQL, si no incluyo el valueifnull.
Tenéis alguna idea de como puedo "forzar" una cadena de texto de tamaño 0 ????
Valora esta pregunta


0