Access - Componer recordset con variables.

   
Vista:

Componer recordset con variables.

Publicado por Josu (3 intervenciones) el 06/03/2013 08:48:29
Buenas, tengo el código copiado abajo con el que en access 2000 consigo abrir una plantilla de word, detectar mediante un recorset los marcadores del documento e insertar campos.
El fallo es que, en lugar de insertar el valor del campo que deseo, me inserta el nombre del recorset. Algo estoy haciendo mal al asignar el valor de la variable. Agradecería toda ayuda posible para este humilde peón del software. Muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Private Sub Comando170_Click()
On Error GoTo Err_Comando170_Click
 
Dim strPlantilla As String
Dim strSQL1 As String
Dim strSQL2 As String
Dim strMensaje As String
Dim appWord As Word.Application
Dim wordDoc As Word.Document
Dim strCampoA As Object
Dim strCampoB As Object
Dim strMarcador As String
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
 
'IDENTIFICAMOS NOMBRE DE LA PLANTILLA EN FUNCION DEL VALOR DEL COMBO
strPlantilla = DLookup("[PLANTILLA_TAREA]", "PRL_ER_tbl_procedimientos_TAREAS", "[TAREA_PROCEDIMIENTO_ID]=" & Me![TAREA])
 
strMensaje = "Has seleccionado la plantilla: " & vbCrLf & vbCrLf & strPlantilla
 
MsgBox strMensaje, vbInformation + vbOKOnly, "Título cuadro mensaje"
 
Set appWord = New Word.Application
 
        With appWord
            .Visible = True
            .WindowState = wdWindowStateMaximize
        End With
 
Set wordDoc = appWord.Documents.Add(CurrentProject.Path & "\Prevencion\PLANTILLAS\" & strPlantilla)
 
strSQL1 = "SELECT * FROM PRL_ER_tbl_procedimientos_TAREAS "
        strSQL1 = strSQL1 & "INNER JOIN PRL_ER_tbl_procedimientos_tareas_MARCADORES "
        strSQL1 = strSQL1 & "ON PRL_ER_tbl_procedimientos_TAREAS.[TAREA_PROCEDIMIENTO_ID] = PRL_ER_tbl_procedimientos_tareas_MARCADORES.[TAREA_PROCEDIMIENTO_ID] "
        strSQL1 = strSQL1 & "WHERE PRL_ER_tbl_procedimientos_TAREAS.[TAREA_PROCEDIMIENTO_ID]= " & Me![TAREA]
 
        Set rst1 = CurrentDb.OpenRecordset(strSQL1)
 
strSQL2 = "SELECT EMPLEADOS.*, PRL_IS_tbl_INCIDENCIAS_SALUD.* FROM PRL_IS_tbl_INCIDENCIAS_SALUD "
        strSQL2 = strSQL2 & "INNER JOIN EMPLEADOS "
        strSQL2 = strSQL2 & "ON PRL_IS_tbl_INCIDENCIAS_SALUD.[DNI] = EMPLEADOS.[DNI] "
        strSQL2 = strSQL2 & "WHERE PRL_IS_tbl_INCIDENCIAS_SALUD.[IDINCIDENCIA]= " & Me![IDINCIDENCIA]
 
        Set rst2 = CurrentDb.OpenRecordset(strSQL2)
 
 
    If Not (rst1.EOF And rst1.BOF) Then
        Do
'***********************************************************************************************************           
 'NO FUNCIONA EL RECORDSET!! No logro referenciar bien el valor del rst2 mediante una variable
***********************************************************************************************************
            Set strCampoA = rst1!CAMPO_TABLA
            Set strCampoB = rst2.Fields(strCampoA)
            strMarcador = rst1!MARCADOR_DOC
                wordDoc.Bookmarks(strMarcador).Range.Text = strCampoB
            rst1.MoveNext
        Loop Until rst1.EOF
    End If
 
 
strPlantilla = ""
Set rst1 = Nothing
Set rst2 = Nothing
Set appWord = Nothing
Set wordDoc = Nothing
 
Exit_Comando170_Click:
    Exit Sub
 
Err_Comando170_Click:
    MsgBox Err.Description
    Resume Exit_Comando170_Click
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto

Componer recordset con variables.

Publicado por Norberto (432 intervenciones) el 06/03/2013 14:25:45
Hola.

Entiendo que el fallo está aquí:

1
2
3
4
Set strCampoA = rst1!CAMPO_TABLA
Set strCampoB = rst2.Fields(strCampoA)
strMarcador = rst1!MARCADOR_DOC
wordDoc.Bookmarks(strMarcador).Range.Text = strCampoB


Lo primero que no entiendo es por qué defines strCampoA y strCampoB como objetos y les pasas el campo entero (Set) y no como strings y les asignas su contenido (Let). ¿Has probado a definirlas como string y asignarlas así:?

1
2
3
4
strCampoA = rst1!CAMPO_TABLA
strCampoB = rst2.Fields(strCampoA)
strMarcador = rst1!MARCADOR_DOC
wordDoc.Bookmarks(strMarcador).Range.Text = strCampoB


Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Componer recordset con variables.

Publicado por Josu (3 intervenciones) el 07/03/2013 09:53:25
Cierto... he hecho varias modificaciones tratando de encontrar el fallo pero originalmente strCampo era una única variable tipo string, pero no he utilizado Let... lo he probado como sigue, pero tampoco va.

1
2
3
strCampo = rst2.Fields(rst1!CAMPO_TABLA)
            strMarcador = rst1!MARCADOR_DOC
                wordDoc.Bookmarks(strMarcador).Range.Text = strCampo


También he probado esta otra variante pero nada:
1
2
3
strCampo = rst1!CAMPO_TABLA
            strMarcador = rst1!MARCADOR_DOC
                wordDoc.Bookmarks(strMarcador).Range.Text = rst2.Fields(strCampo)


Esta última opción me da el error "Item not found in this collection"... o sea, no encuentra el campo que le indica la variable en el Recordset

Gracias por tu ayuda Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto

Componer recordset con variables.

Publicado por Norberto (432 intervenciones) el 07/03/2013 19:28:52
Hola de nuevo.

Lo del Let va implícito en una asignación de valor a una variable "no de objeto". En las versiones precolombinas de Basic se asignaba con Let a = 5. Posteriormente se eliminó la obligación de poner el Let pero me he referido a ello para indicar que no usamos Set. ¡Por Tutatis! ¡Qué liada me/te estoy pegando!

Al grano.

Lo que no nos has contado y por tanto yo he deducido es qué tiene cada una de las dos tablas.

Entiendo que en la primera el CAMPO_TABLA tiene el nombre del campo de la segunda tabla que contiene el valor para el marcador. O sea que si en rst1!CAMPO_TABLA tiene, para un registro, "EDAD", asignamos el contenido del campo EDAD de la segunda tabla al marcador, si CAMPO_TABLA tiene el valor "POBLACION", asignamos al marcador el contenido del campo POBLACION de la segunda, etc. Si no es así, corrígeme.

También podías poner un stop antes del worddoc.bookmarks... y cuando se pare, en la ventana de inmediato pones un ? strCampoA, strCampoB, strMarcador, tanto con las dos primeras variables definidas como objeto como definidas como string, y nos haces un llama-cuelga, perdón copia-pega.

Ya me contarás.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Componer recordset con variables.

Publicado por Josu (3 intervenciones) el 11/03/2013 08:15:10
Buenas de nuevo.... Gracias por tu ayuda

Efectivamente. el primer rst (rst1) captura los datos que necesito del expediente que tengo abierto.
El segudo rst (rst2), captura los nombres de los marcadores y de la plantilla seleccionada, y los campos de del rst1 que contienen la información que corresponde a cada marcador.

He probado de amas maneras y me salen vacías las variables strCampo A y B, que indican el nombre del campo que han de insertarse en el marcador. Al ejecutar el código, el mensaje es "Item not found".

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto

Componer recordset con variables.

Publicado por Norberto (432 intervenciones) el 12/03/2013 15:41:00
Hola.

Si, como comentas, las variables te salen vacías puede que el problema esté en los recordsets. ¿Porqué no creas sendas consultas usando el contenido de strSQL1 y strSQL2, las abres y echas una ojeada a ver que tienen?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar