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?
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...
"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ó:
Saludos desde un lugar de la Mancha.
"Rafa" escribió:
> Buenos días y saludos a todos.
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?
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...
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
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.
>
>
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.
Muchras gracias.
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
"Rafa" escribió: