** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Recorrer los datos de una tabla
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRecorrer los datos de una tabla

 Responder Responder
Autor
Mensaje
01loko Ver desplegable
Asiduo
Asiduo


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 475
Enlace directo a este mensaje Tema: Recorrer los datos de una tabla
    Enviado: 18/Marzo/2018 a las 13:24
Tabla con multiples productos, intento aclararla un poco y  los campos (todos texto ?¿, aunque sea precio) los exporto a otra con el mismo nombre, pero cuando es texto, cuando es numero, cuando es contador.. etc.
aqui llega la pregunta, si pongo algocomo:

Dim rs As DAO.Recordset
Dim ms As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("productos")
If rs.RecordCount > 0 Then
Do While Not rs.EOF
If IsNull(rs!) Then rs! = Nz(rs!, "0")

todos los rs! (recordset) nulos los convierte a "0" y el resto los deja bien?

PD: tengo el teclado como una maraca, el espacio va cuando le da la gana, hasta ellunes tengo que aguantar,perdonsi se junta alguna palabra
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1076
Enlace directo a este mensaje Enviado: 18/Marzo/2018 a las 17:15
En un principio no hará nada, porque no estás diciendo que vas a editar el registro, rs.Edit.

Por otro lado, si ya sabes que es nulo, no necesitas el Nz, ni usar otra vez el valor del campo (que ya sabes que es nulo):

If IsNull(rs!ElCampo) Then
  rs.Edit
  rs!ElCampo = "0"
  rs.Update
End If

Por otro lado, ¿por qué no usas una consulta de datos anexados? Pasas todos los registros de una tacada, y usas Nz para pasar el valor que quieras cuando en el origen sea nulo.
Arriba
jilo Ver desplegable
Colaborador
Colaborador


Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 900
Enlace directo a este mensaje Enviado: 18/Marzo/2018 a las 19:25
Hola
COmo complemento a Pitxiku antes de if rs.RecordCount yo pondría un rs.movefirst para aseguararte que empiezasdesde el primero y pasas todos los registros. A tener en cuenta que sí no hay registros rs.movefirst te dará error.
Aun que una consulta de actualización lo arreglarias de una pasada

Espero te sirva !!!!!!
Iñaki
Arriba
01loko Ver desplegable
Asiduo
Asiduo


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 475
Enlace directo a este mensaje Enviado: 18/Marzo/2018 a las 20:23
pero pasaria por todos los campos?
rs!* ( o similar)
o tengo pque personalizar cada uno
rs!nombrecampo
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
jilo Ver desplegable
Colaborador
Colaborador


Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 900
Enlace directo a este mensaje Enviado: 19/Marzo/2018 a las 12:29
Hola 01Loko,
Te dejo una funcion que hice para mi que debia de recorrer todos los registros y todos los campos de una tabla. Todos los campoe eran fechas y tenia que ver cual era la mayor de todos los campos. Adaptala a tus necesidades

Sub BuscarFechaMasAlta
 Dim cadena As String, RecReg As DAO.Recordset, x As Integer, fechaCalculada As Date
   cadena = "Select * From tabla1"
   Set RecReg = CurrentDb.OpenRecordset(cadena)
   With RecReg
      .MoveFirst
      Do While Not .EOF
         fechaCalculada = ![fecha1]
         For x = 0 To .Fields.Count - 1
            If IsDate(.Fields(x)) Then If fechaCalculada < .Fields(x) Then fechaCalculada = .Fields(x)
         Next x
         MsgBox "El Registro " & ![ID] & " tiene la fecha mas alta con " & fechaCalculada
         .MoveNext
      Loop
   End With
   RecReg.Close: Set RecReg = Nothing
End Sub



Editado por jilo - 19/Marzo/2018 a las 12:30
Espero te sirva !!!!!!
Iñaki
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1076
Enlace directo a este mensaje Enviado: 19/Marzo/2018 a las 20:04
Si usas un Recordset, tienes que indicar cada campo que quieres actualizar. No puedes decirle algo como:

Rs.Edit
Rs!* = Nz(Rs!*, "0")
Rs.Update

Por eso lo de usar una consulta de actualización, en un único paso te lo haces:

UPDATE productos
SET Campo1=Nz(Campo1, "0"),
Campo2=Nz(Campo2, "0"),
...;

Editado para agregar: Además, en la consulta de actualización podrás indicar valores distintos para los campos de texto, números, ....


Editado por pitxiku - 19/Marzo/2018 a las 20:05
Arriba
01loko Ver desplegable
Asiduo
Asiduo


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 475
Enlace directo a este mensaje Enviado: 23/Marzo/2018 a las 21:16
esta semana estoy un poco liado, pero me cada claro :
En un recordset no puedo utilizar comodines
Aunque, el proyecto lo tengo parado ahora mismo, supongo que utilizare una consulta para ir actualizando cada tabla.
Gracias a todos por la paciencia

Se puede cerrar el hilo
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable