Imprimir página | Cerrar ventana

uso no valido de NULL error 94

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85092
Fecha de impresión: 19/Abril/2024 a las 00:36


Tema: uso no valido de NULL error 94
Publicado por: javifergavilan
Asunto: uso no valido de NULL error 94
Fecha de publicación: 25/Marzo/2020 a las 14:38
Ejecuto este código y me da error de 94 uso no valido de NULL , en Rojo pongo donde me da el Error...
¿ Como puedo solucionarlo ?


Private Sub Comando11_Click()
'borramos los datos de las tablas destino
borrar
Dim campo As Object
' creamos el objeto recorset con los datos de la tabla twptelefonicadestino
Dim rsttwptelefonica As DAO.Recordset
' creamos el objeto recorset con los datos de la tabla twpumedestino
Dim rsttwpume As DAO.Recordset
' creamos el objeto recorset con los datos de la tabla twptelefonicadestino
Dim rsttwptelefonicafiltrado As DAO.Recordset
' creamos el objeto recorset con los datos de la tabla twpumedestino
Dim rsttwpumefiltrado As DAO.Recordset
' creamos el objeto recorset con los datos de la tabla twptelefonicadestino
Dim rsttwptelefonicadestino As DAO.Recordset
' creamos el objeto recorset con los datos de la tabla twpumedestino
Dim rsttwpumedestino As DAO.Recordset
' consulta SQL
Dim strSQLtwptelefonica As String
' consulta SQL
Dim strSQLtwpume As String
' consulta SQL
Dim strSQLtwptelefonicafiltrado As String
' consulta SQL
Dim strSQLtwpumefiltrado As String
' consulta SQL
Dim strSQLtwptelefonicadestino As String
' consulta SQL
Dim strSQLtwpumedestino As String
' valores nombre del campo y valor del campo
Dim nombrecampo As String
Dim valorcampo As String
' creamos la consulta de los datos que queremos recuperar
strSQLtwptelefonica = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [GFA nominal], [Última configuración] FROM TWPTELEFONICA"
' creamos la consulta de los datos que queremos recuperar
strSQLtwpume = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [GFA nominal],[Última configuración] FROM TWP WHERE Estado = " & " '" & "En servicio" & "' "
'"SELECT * FROM ALTASBAJAS  WHERE Identificador = " & " '" & datos & "'" & " And id_alta = " & datos1 & ";"

' creamos la consulta de los datos que queremos recuperar
strSQLtwpumedestino = "SELECT * FROM TWPUMEDESTINO"
' creamos la consulta de los datos que queremos recuperar
strSQLtwptelefonicadestino = "SELECT * FROM TWPTELEFONICADESTINO"
' rellenamos el recorset con la consulta de sql de la tabla twptelefonica
Set rsttwptelefonica = CurrentDb.OpenRecordset(strSQLtwptelefonica)
' rellenamos el recorset con la consulta de sql de la tabla twptume
Set rsttwpume = CurrentDb.OpenRecordset(strSQLtwpume)
' rellenamos el recorset con la consulta de sql de la tabla twpumedestino
Set rsttwpumedestino = CurrentDb.OpenRecordset(strSQLtwpumedestino)
' rellenamos el recorset con la consulta de sql de la tabla twpumedestino
Set rsttwptelefonicadestino = CurrentDb.OpenRecordset(strSQLtwptelefonicadestino)
' borramos los registros antiguos de la tabla twptelefonicadestino
Do Until rsttwptelefonica.EOF
' creamos la consulta de los datos que queremos recuperar
strSQLtwpumefiltrado = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [GFA nominal],[Última configuración] FROM TWP WHERE Identificador = " & " '" & rsttwptelefonica(0) & "'"
Set rsttwpumefiltrado = CurrentDb.OpenRecordset(strSQLtwpumefiltrado)
If rsttwpumefiltrado.EOF = True Then
''''''''''''''''''''''''''''''''''''''''''''''
'''' copiar a telefonica destino '''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
rsttwptelefonicadestino.AddNew
For Each campo In rsttwptelefonica.Fields
' cambiamos los valores de un recorset a otro
nombrecampo = campo.Name
valorcampo = campo
rsttwptelefonicadestino(nombrecampo) = valorcampo
Next
rsttwptelefonicadestino.Update
''''''''''''''''''''''''''''''''''''''''''''''
'''''''' fin copiar telefonica destino '''''''
''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
'''' editar ume destino '''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
rsttwpumedestino.AddNew
rsttwpumedestino("Identificador") = rsttwptelefonica(0)
rsttwpumedestino("Estado") = "0"
rsttwpumedestino("Número de serie") = "0"
rsttwpumedestino("Uso") = "0"
rsttwpumedestino("GFA nominal") = "0"
rsttwpumedestino("Última configuración") = "01/01/1999"
rsttwpumedestino.Update
''''''''''''''''''''''''''''''''''''''''''''''
'''''''' fin editar ume destino '''''''
''''''''''''''''''''''''''''''''''''''''''''''
Else
    If rsttwpumefiltrado(1) = rsttwptelefonica(1) And rsttwpumefiltrado(2) = rsttwptelefonica(2) And rsttwpumefiltrado(3) = rsttwptelefonica(3) And rsttwpumefiltrado(4) = rsttwptelefonica(4) And rsttwpumefiltrado(5) = rsttwptelefonica(5) Then
    ' no hacer nada
    'MsgBox ("ok")
    ElseIf rsttwpumefiltrado(1) <> rsttwptelefonica(1) Or rsttwpumefiltrado(2) <> rsttwptelefonica(2) Or rsttwpumefiltrado(3) <> rsttwptelefonica(3) Or rsttwpumefiltrado(4) <> rsttwptelefonica(4) Or rsttwpumefiltrado(5) <> rsttwptelefonica(5) Then
    ''''''''''''''''''''''''''''''''''''''''''''''
    '''' copiar a telefonica destino '''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''
    rsttwptelefonicadestino.AddNew
    For Each campo In rsttwptelefonica.Fields
    ' cambiamos los valores de un recorset a otro
    nombrecampo = campo.Name
    valorcampo = campo
    rsttwptelefonicadestino(nombrecampo) = valorcampo
    Next
    rsttwptelefonicadestino.Update
    ''''''''''''''''''''''''''''''''''''''''''''''
    '''''''' fin copiar telefonica destino '''''''
    ''''''''''''''''''''''''''''''''''''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''
    '''' copiar ume destino '''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''
    rsttwpumedestino.AddNew
    For Each campo In rsttwpumefiltrado.Fields
    ' cambiamos los valores de un recorset a otro
     nombrecampo = campo.Name
     valorcampo = campo
    rsttwpumedestino(nombrecampo) = valorcampo
    Next
    rsttwpumedestino.Update
    ''''''''''''''''''''''''''''''''''''''''''''''
    '''''''' fin copiar ume destino '''''''
    ''''''''''''''''''''''''''''''''''''''''''''''
    End If
End If
rsttwpumefiltrado.Close
Set rsttwpumefiltrado = Nothing
rsttwptelefonica.MoveNext
Loop
Do Until rsttwpume.EOF
' creamos la consulta de los datos que queremos recuperar
strSQLtwptelefonicafiltrado = "SELECT Identificador, Estado, [Número de serie], Uso, [GFA nominal],[Última configuración] FROM TWPTELEFONICA WHERE Identificador = " & " '" & rsttwpume(0) & "'"
Set rsttwptelefonicafiltrado = CurrentDb.OpenRecordset(strSQLtwptelefonicafiltrado)
If rsttwptelefonicafiltrado.EOF = True Then
''''''''''''''''''''''''''''''''''''''''''''''
'''' copiar a ume destino '''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
rsttwpumedestino.AddNew
For Each campo In rsttwpume.Fields
' cambiamos los valores de un recorset a otro
nombrecampo = campo.Name
valorcampo = campo
rsttwpumedestino(nombrecampo) = valorcampo
Next
rsttwpumedestino.Update
''''''''''''''''''''''''''''''''''''''''''''''
'''''''' fin copiar ume destino '''''''
''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
'''' editar telefonica destino '''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
rsttwptelefonicadestino.AddNew
rsttwptelefonicadestino("Identificador") = rsttwpume(0)
rsttwptelefonicadestino("Estado") = "0"
rsttwptelefonicadestino("Número de serie") = "0"
rsttwptelefonicadestino("Uso") = "0"
rsttwptelefonicadestino("GFA nominal") = "0"
rsttwptelefonicadestino("Última configuración") = "01/01/1999"
rsttwptelefonicadestino.Update
''''''''''''''''''''''''''''''''''''''''''''''
'''''''' fin editar telefonica destino '''''''
''''''''''''''''''''''''''''''''''''''''''''''
End If
rsttwptelefonicafiltrado.Close
Set rsttwptelefonicafiltrado = Nothing
rsttwpume.MoveNext
Loop
rsttwptelefonica.Close
Set rsttwptelefonica = Nothing
rsttwpume.Close
Set rsttwpume = Nothing
rsttwptelefonicadestino.Close
Set rsttwptelefonicadestino = Nothing
rsttwpumedestino.Close
Set rsttwpumedestino = Nothing
Subformulario_TWPUMEDESTINO.Requery
Subformulario_TWPTELEFONICADESTINO.Requery

End Sub

Gracias



Respuestas:
Publicado por: xavi
Fecha de publicación: 25/Marzo/2020 a las 17:00
Hola,

¿Porque está este mensaje en Access y otros sistemas? ¿Cuál es el otro sistema?

Para la duda concreta, campo es un Field del recordset (definido como Object... pero ese es otro tema) mientras que valorcampo es un String. Lo que pretendes es traspasar el valor del campo a la variable valorcampo. Para ello debes utilizar la propiedad Value de campo

valorcampo = campo.Value

Ojo, ese error se da más de una vez.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: javifergavilan
Fecha de publicación: 25/Marzo/2020 a las 17:05
Buenos dias:

Gracias por las respuesta, Si es Access ... Pongo lo que me dices pero sigue saliento el mismo error...

Un saludo.


Publicado por: xavi
Fecha de publicación: 25/Marzo/2020 a las 17:19
Pues a lo mejor resulta que el campo tiene un valor nulo.

Prueba cambiando las 2 lineas por esta

rsttwptelefonicadestino(nombrecampo).value = rsttwptelefonica(nombrecampo).value

Y si sigue fallando, evalúa nulos y convierte al valor adecuado.

Un saludo

PD. te he movido el hilo al foro adecuado.



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: javifergavilan
Fecha de publicación: 25/Marzo/2020 a las 19:02
Buenas tardes:

Con eso solucionado !!!!! , Muchísimas gracias.

Un saludo.



Imprimir página | Cerrar ventana