Imprimir página | Cerrar ventana

Recorrer los datos de una tabla

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=83563
Fecha de impresión: 19/Julio/2019 a las 17:24


Tema: Recorrer los datos de una tabla
Publicado por: 01loko
Asunto: Recorrer los datos de una tabla
Fecha de publicación: 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.



Respuestas:
Publicado por: pitxiku
Fecha de publicación: 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.


Publicado por: jilo
Fecha de publicación: 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


Publicado por: 01loko
Fecha de publicación: 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.


Publicado por: jilo
Fecha de publicación: 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



-------------
Espero te sirva !!!!!!
Iñaki


Publicado por: pitxiku
Fecha de publicación: 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, ....


Publicado por: 01loko
Fecha de publicación: 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.



Imprimir página | Cerrar ventana