Imprimir página | Cerrar ventana

Anexar registros con "documentos adjuntos" a 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=84803
Fecha de impresión: 27/Marzo/2026 a las 02:21


Tema: Anexar registros con "documentos adjuntos" a tabla
Publicado por: Amex
Asunto: Anexar registros con "documentos adjuntos" a tabla
Fecha de publicación: 08/Noviembre/2019 a las 10:31
Buenos días. Necesito ayuda sobre como anexar registros que cuenten con campo de documentos adjuntos desde una consulta a una tabla. Me explico:

Cuento con una tabla y una consulta que tienen los mismos campos. Mi deseo es anexar los registros de la consulta a la tabla. Para ello en vba hago lo siguiente: 

Dim rst1 As DAO.Recordset, rst2 As DAO.Recordset

Set rst1 = CurrentDb.OpenRecordset("CNuevasIncidencias")
Set rst2 = CurrentDb.OpenRecordset("TIncidencias")
    
Do While Not rst1.EOF
        
rst2.AddNew
...
rst2!Documentosadjuntos = rst1!Documentosadjuntos
rst2!TIncidencias_Documentosadjuntos_FileData = rst1!TIncidencias_Documentosadjuntos_FileData
rst2!Expr1 = rst1!Expr1
rst2!TIncidencias_Documentosadjuntos_FileName = rst1!TIncidencias_Documentosadjuntos_FileName
rst2!Expr2 = rst1!Expr2
rst2!TIncidencias_Documentosadjuntos_FileType = rst1!TIncidencias_Documentosadjuntos_FileType
rst2!Expr3 = rst1!Expr3
...
rst2.update
rst1.movenext
DoEvents
Loop
rst1.Close
rst2.Close

Set rst1 = Nothing
Set rst2 = Nothing


Se produce el siguiente error: "Se ha producido el error '64224' en tiempo de ejecucción: Error en el método 'Collect' de objeto 'Recordset2'"

¿Alguien sabe como resolverlo?

Muchas gracias.







Respuestas:
Publicado por: pitxiku
Fecha de publicación: 08/Noviembre/2019 a las 11:07
Tienes que usar objetos RecordSet2:

- https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/recordset2-object-dao


Publicado por: Amex
Fecha de publicación: 08/Noviembre/2019 a las 12:49
me sigue dando el mismo error


Publicado por: prga
Fecha de publicación: 08/Noviembre/2019 a las 17:16
Hola.
Sin entrar en consideraciones sobre los campos multivalor/datos adjuntos, el siguiente código parece que los "copia":

Dim subrst1 As DAO.Recordset2
Dim subrst2 As DAO.Recordset2
Dim mcampo1 As DAO.Field2
Dim mcampo2 As DAO.Field2
Dim rst1 As DAO.Recordset, rst2 As DAO.Recordset

Set rst1 = CurrentDb.OpenRecordset("CNuevasIncidencias")
Set rst2 = CurrentDb.OpenRecordset("TIncidencias")

Do While Not rst1.EOF
        
rst2.AddNew
''''' aquí todos los campos que no sean multivalor

'+++++actualización campo multivalor++++++
Set mcampo1 = rst1("Documentosadjuntos")
Set mcampo2 = rst2("Documentosadjuntos")
 If mcampo1.IsComplex Then
   Set subrst1 = mcampo1.Value
   Set subrst2 = mcampo2.Value
            If Not (subrst1.BOF And subrst1.EOF) Then
                subrst1.MoveFirst
               Do Until subrst1.EOF
                subrst2.AddNew
                subrst2.Fields("filedata") = subrst1.Fields("filedata")
                subrst2.Fields("filename") = subrst1.Fields("filename")
                subrst2.Update
                subrst1.MoveNext
                Loop
            End If
 End If
'++++fin campo multivalor


rst2.update
rst1.movenext
DoEvents
Loop

Está puesto a título de ejemplo y tiene falta de depurar, optimizar etc etc.
Espero que sirva de ayuda para resolver la duda
Ya comentas.
Un saludo a todos


Publicado por: Amex
Fecha de publicación: 11/Noviembre/2019 a las 08:38
Genial! Haciéndolo de la manera que has indicado funciona bien.

Cuando dices que tiene falta de depurar, etc. ¿A qué te refieres?

Un saludo y muchas gracias por la ayuda.


Publicado por: prga
Fecha de publicación: 11/Noviembre/2019 a las 11:22
Hola.
Que el código está hecho con un solo ejemplo y tal como lo escribí..
Parece ser que funciona, pero el código escrito por primera y con un sólo caso "siempre"  es susceptible de mejoras. También falta un gestor de errores y si investigas un poco verás que el recodset de los adjuntos tiene también los siguientes campos: FileFlags, FileTimeStamp, FileType y FileURL que se supone harán falta en algunos casos.
Con la prueba hecha con DAO, si no existen, dan errores en el copiado , pero con ADO no. Pero la solución se pedía con DAO
Así es que.....
Espero haber aclarado la duda.
Un saludo



Imprimir página | Cerrar ventana