Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pasar al siguiente registro

1,731 views
Skip to first unread message

Rafa

unread,
Apr 20, 2009, 6:06:10 AM4/20/09
to
Buenos días y saludos a todos.

Tengo un formulario conectado a una tabla. En el formulario tengo un botón y
al pulsar llamo a un procedimiento en el que intento recorrer la tabla para
actualizar un campo en cada registro. Por lo tanto necesito un bucle para
recorrer la tabla pasando de registro a registro. El final lo debería
detectar al llegar al final de la tabla.

Mis preguntas son:
¿Como paso del registro actual al siguiente mediante código?
Utilizando "Me" puedo leer los valores de los campos que se muestran en el
formulario Me.ETIQUETA. ¿Cómo podría llegar a la tabla que está detrás del
formulario? Supongo que este es el camino ¿no?

¿Cómo detecto el final de la tabla para parar el bucle?


Emilio

unread,
Apr 20, 2009, 6:10:32 AM4/20/09
to
--------------------------------------------------------------------------
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
--------------------------------------------------------------------------
Hola!

dependerá de lo que necesites hacer en el registro y como lo estés haciendo,
hay varios métodos, pero si das mas datos seguro que iremos mas encaminados.

Saludos a tod@s
Emilio [MS-MVP Access 2006/9]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Rafa" <Ra...@discussions.microsoft.com> escribió en el mensaje
news:27144FAD-17FA-45DF...@microsoft.com...

Rafa

unread,
Apr 20, 2009, 7:10:16 AM4/20/09
to
Gracias.
--
Un saludo.


"jmmiralles" escribió:

> Hola Rafa
> como dice Emilio, pasa más datos, por ejemplo, versión de access, ¿cómo se
> llama la tabla que quieres recorrer?, ¿cómo se llama el campo que quieres
> modificar?, ¿qué condiciones tiene que cumplir para modificar el campo? etc
>
> Saludos desde un lugar de la Mancha.
>
>
> "Rafa" escribió:

jmmiralles

unread,
Apr 20, 2009, 6:47:02 AM4/20/09
to
Hola Rafa
como dice Emilio, pasa más datos, por ejemplo, versión de access, ¿cómo se
llama la tabla que quieres recorrer?, ¿cómo se llama el campo que quieres
modificar?, ¿qué condiciones tiene que cumplir para modificar el campo? etc

Saludos desde un lugar de la Mancha.


"Rafa" escribió:

> Buenos días y saludos a todos.

Rafa

unread,
Apr 20, 2009, 7:09:01 AM4/20/09
to
Tengo una tabla que se llama "indiceArchivoTecnico". Cada entrada de la tabla
es un documento en una carpeta. En el registro de la tabla tenemos un campo
denominado "tamañoDelArchivo". La idea es actualizar este campo con el tamaño
del archivo.

Tengo un formulario en el que he incluido un botón para ejecutar un
procedimiento que recorra la tabla y actualice el valor del campo
"tamañoDelArchivo". El código que lee el tamaño del archivo ya lo tengo y me
funciona con el registro activo en el formulario. Mi problema es montar un
bucle que pase por todos los registros. ¿Es necesario crear un recordset o se
puede uno mover por los registro de una tabla de otra forma cuando estás en
un formulario conectado a la tabla?

Emilio

unread,
Apr 20, 2009, 7:28:21 AM4/20/09
to
--------------------------------------------------------------------------
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
--------------------------------------------------------------------------
Hola!
ese código es el que convendría conocer para saber a que atenerse, te puedes
mover entre registros con DoCmd.GotoRecord

Consulta la ayuda para los detalles, de todos modos no se si ese será el
mejor método, todo dependerá de lo que quieras hacer.

Saludos a tod@s
Emilio [MS-MVP Access 2006/9]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Rafa" <Ra...@discussions.microsoft.com> escribió en el mensaje

news:B50A8687-E7FB-425E...@microsoft.com...

Rafa

unread,
Apr 20, 2009, 8:08:01 AM4/20/09
to
Te adjunto el código. Como puedes ver es un borrador.

Se pretende que "LeerArchivos" itere por toda la tabla.

Private Sub LeerArchivos_Click()
Call LeeArchivos
End Sub

Public Sub LeeArchivos()
Dim Path As String
Dim NombreArchivo As String
Dim PathCompleto As String
Dim TamañoFichero As Long
Dim objRs As DAO.Recordset

'Recordset para la tabla
'Set objRs = New ADODB.Recordset
'objRs.ActiveConnection = CurrentProject.Connection
'objRs.Source = "SELECT * FROM InidiceArchivoTécnico"
'objRs.CursorType = adOpenStatic
'objRs.LockType = adLockOptimistic
'objRs.Open


Path = strPathPorDefecto & Me.ETIQUETA & "\"
NombreArchivo = Me.ETIQUETA & ".pdf"
PathCompleto = Path & NombreArchivo

TamañoFichero = PasarDeBytesAMegas(LeerTamañoArchivo(PathCompleto))

'Set objRs = Me.Recordset
'Debug.Print objRs.Fields.Item(0) ' Both statements print
'Debug.Print objRs(0) ' the Value of Item(0).


MsgBox ("Tamaño del archivo " & TamañoFichero & " Mb")

Tamaño = TamañoFichero
Set objRs = Me.Recordset
objRs.Edit
objRs.Update


'Cerrar el recordset y liberar memoria
'objRs.Close
'Set objRs = Nothing

End Sub

Public Function LeerTamañoArchivo(ByVal PathCompleto) As Long
' Devuelve el tamaño del archivo en bytes
' El Path puede utilizar nombres de servidor \\sdatos\....

Dim objSistemaDeFicheros
Dim Fichero
Dim TamañoFichero

Set objSistemaDeFicheros = CreateObject("Scripting.FileSystemObject")
Set Fichero = objSistemaDeFicheros.GetFile(PathCompleto)
TamañoFichero = Fichero.Size
LeerTamañoArchivo = Fichero.Size

End Function

Public Function PasarDeBytesAMegas(ByVal TamañoBytes As Long) As Long
'Pasa un entero que expresa una cantidad en bytes a megas
Dim NuevoValor As Long

NuevoValor = (TamañoBytes / 1024) / 1024

PasarDeBytesAMegas = NuevoValor

End Function


Emilio

unread,
Apr 20, 2009, 8:54:53 AM4/20/09
to
--------------------------------------------------------------------------
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
--------------------------------------------------------------------------
Hola!
para saber si has llegado al final, puedes utilizar la ¿propiedad? EOF del
Recordsetclone del formulario

En cuanto a libros, hace mucho que no veo uno que me guste, si es VBA lo que
quieres, tienes en www.olaz.net el mejor curso en castellano que puedas
encontrar, está aún inconcluso, pero es mas que suficiente para profundizar
en la materia.

Saludos a tod@s
Emilio [MS-MVP Access 2006/9]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Rafa" <Ra...@discussions.microsoft.com> escribió en el mensaje

news:5D8B8091-E96D-4814...@microsoft.com...
> Gracias Emilio.
>
> He localizado en la ayuda el DoCmd.GotoRecord y con esta línea
> DoCmd.GoToRecord acDataForm, "Formulario1", acNext, 1
>
> me puedo desplazar al siguiente registro.
>
> Tengo que abusar de vuestra paciencia y preguntaros dos cosas mas:
>
> 1º Como detecto que he llegado al final para parar el bucle.
> 2º Que me recomiendas para aprender a parte de la ayuda. Conoces algún
> libro
> que te parezca bueno.
>
>


Rafa

unread,
Apr 20, 2009, 8:41:01 AM4/20/09
to

jmmiralles

unread,
Apr 20, 2009, 12:15:02 PM4/20/09
to
Hola Rafa

Puedes utilizar el siguiente bucle:


Do While Not Me.RecordsetClone.EOF

[Tu sentencia o expresión]

Loop


Que lo que viene a decir es: "Mientras no estes por debajo del último
registro sigue iterando."

While...te pide que se cumpla una condicion verdadera.
EOF.....te indica que está por debajo del último registro.
Not......Significa No.

Con respecto al libro, coincido con Emilio, mira lo de Eduardo Olaz, aunque
también tienes "Access (versión) Progamación con VBA"

Saludos desde un lugar de la Mancha.

"Rafa" escribió:

> Gracias Emilio.

Rafa

unread,
Apr 20, 2009, 12:35:03 PM4/20/09
to
Fantastico, estaba mitando lo del RecordsetClone, pero ya me lo has dado hecho.

Muchras gracias.

Rafa

unread,
Apr 20, 2009, 2:41:02 PM4/20/09
to
Private Sub LeerArchivos_Click()
Call LeeArchivos
End Sub

Public Sub LeeArchivos()
Dim Path As String
Dim NombreArchivo As String
Dim PathCompleto As String
Dim TamañoFichero As Long
Dim objRs As DAO.Recordset


Set objRs = Me.RecordsetClone
Do While Not Me.RecordsetClone.EOF


Path = strPathPorDefecto & Me.ETIQUETA & "\"
NombreArchivo = Me.ETIQUETA & ".pdf"
PathCompleto = Path & NombreArchivo

TamañoFichero = PasarDeBytesAMegas(LeerTamañoArchivo(PathCompleto))

Tamaño = TamañoFichero

Me.Bookmark = objRs.Bookmark
Set objRs = Me.RecordsetClone
objRs.MoveNext
Loop

jmmiralles

unread,
Apr 20, 2009, 2:41:02 PM4/20/09
to
De nada por la parte que me toca.....

"Rafa" escribió:

0 new messages