Programación General > Visual Basic 6.0 e inferiores

 Re: Informe de Access con Visual?

<< < (2/3) > >>

ebolo:
Por fin. Ahora sí.
Me faltaba un espacio; Todo el día con dolor de cabeza por culpa un espacio.
Gracias, as, as, as muchas.
Saludos.
:bravo:
Me falta otro emoticono dándose con un martillo a la cabeza, pero a falta de pan buenas son tortas :brickwall:

EL Loco:

--- Cita de: "Brroz" ---http://foros.solocodigo.com/viewthread.php?tid=4804
--- Fin de la cita ---
:lightsabre:

Hola, por lo que he visto hay bastante movimiento por el foro
estoy necesitando informacion sobre impresion desde visual y a estas alturas
me da exactamente igual el medio que sea

trabajo con vb 6.0 , access 2000, Data environment y comandos
conozco sql server, por ahora el unico problema que tengo es a la hora de imprimir ya que no es el simple arrastrar comando al datareport
dado las consultas de sql

si sabes o tienes algun documento sobre el tema , te lo agradecere

gracias

ebolo:
Hola, te dejo un doc donde está el código de vb para lanzar un iforme de acces desde vb, aportado por Brroz y que yo completé sñolo un poco.
Saludos.

EL Loco:
Hola, Primero antes que nada gracias por la brevedad

2) Por amor de dios los Indetados PLEASE!!
3) Tuve que modificar un par de cosas y funciono
Pero!!!!
en mi caso es VB 6 SP 5 con Access 2000
ojo al dato, si es XP el SO  la referencia es Microsoft Access 10 Object library
aparte hay un tema lindo, NO MUESTRA EL INFORME sino que abre el ACCESS salvo que el ACCESS abierto de antemano, en ese caso muestra el informe sin problemas

Otro problema que tuve fue que no me permite hacer una consulta por mes
a decir por ej listar los cumpleaños del mes de setiembre donde la sentencia seria
mas o menos asi
SELECT * FROM PERSONAL WHERE [Fecha Nacimiento] like '%%/09/%%%%'

solo que yo ya tengo diseñada 1 consulta en acces donde le paso el mes por parametros pero tampoco funciona
AAAAAAAaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhh

Esto de los reportes me va a dejar maás loco todavia

A continuacion adjunto el codigo modificado
---------------------------------------------------------------------------------------
Option Explicit
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Public Function Imprimir(ByVal Formato As String, ByVal Filtro As String _
, Optional ByVal VistaPrevia As Boolean) As Boolean

' No se si es 1 tare de XP pero hay que tener el Acces Abierto
' si no esta abierto lo abre pero no carga el informe
' IMPORTANTE AGREGAR REFERENCIA Microsoft Access 8.0 Object library O SUPERIOR
' SE LLAMA ASI:
' Imprimir("Tu_informe_de_access", consulta2, True)
'Donde:
'    -" Tu_informe_de_access", es el nombre que le has dado al informe y que pasa 'como "Formato" al módulo.
'    -  consulta2, es el Filtro que le pasamos al módulo que lo usará para abrir el informe.
'    -  True o false, por si queremos vista previa ó no.


On Error GoTo Error_Imprimir

Dim sngMouseP As Single
sngMouseP = Screen.MousePointer
Screen.MousePointer = 11
DoEvents

Dim dbW, ObjAccess As Object

'(Estos 2 pasos siguientes se los añado yo porque sino no me abría la base de datos)
'Creamos el objeto

Set ObjAccess = CreateObject("access.application.10")
' CAMBIAR EL 10 POR LA VERSION Microsoft Access Object library QUE SE USE
'Si la base de datos fuera de access 2000 tendríamos que poner un 9, en vez de 8( que es para access 97).
'Abrimos la B.D. que nos interesa

'ObjAccess.OpenCurrentDatabase "BaseDeDatos.mdb" ' Da ERROR 7866 con esta linea

ObjAccess.OpenCurrentDatabase app.path & "\Tiradentes2.mdb"

Set dbW = GetObject(App.Path & "\Tiradentes2.mdb")

If VistaPrevia Then ShowWindow dbW.hWndAccessApp, 3

On Error Resume Next
dbW.UserControl = False
On Error GoTo Error_Imprimir
Dim int1 As Integer

If VistaPrevia Then int1 = 2 '2 = acViewPreview , 0 = acViewNormal

If dbW.Reports.Count = 0 Then
    dbW.DoCmd.OpenReport Formato, int1, , Filtro   'muy importante esta línea que se 'ponga como está, en el orden: "Formato", "int1" que es la vistaprevia, " " espacio en 'blanco,y  "Filtro" que es la consulta que le pasamos al módulo.
Else
    Dim lng1 As Long
    For lng1 = 0 To dbW.Reports.Count - 1
        If dbW.Reports(lng1).Name = Formato Then
            dbW.Reports(Formato).Filter = Filtro
            GoTo Exit_Fn
        End If
    Next lng1
    dbW.DoCmd.OpenReport Formato, int1, , Filtro
End If

Exit_Fn:
Imprimir = True

Salir_Imprimir:
On Error Resume Next
If Not VistaPrevia Then
    dbW.Quit
Else
    dbW.DoCmd.Maximize
    dbW.UserControl = True
End If
Set dbW = Nothing
Screen.MousePointer = sngMouseP
Exit Function

Error_Imprimir:
MsgBox "Fallo al imprimir informe '" & Formato & "'" & String(2, vbCrLf) _
& "(" & Err.Number & ") " & Err.Description, vbCritical, "Imprimir"
VistaPrevia = False
Resume Salir_Imprimir

End Function

-----------------------------------------------------------------------------------

Brroz:
En este código no es necesario agregar referencia de ningún tipo.

Con Set dbW = GetObject(App.Path & "\Tiradentes2.mdb") obtenemos la referencia necesaria a la base de datos (si es que existe, claro) en el objeto dbW, si la base de datos no está abierta, se crea una nueva instancia de la aplicación. Las variables de objeto están declaradas como object.
El 'CreateObject' y el 'OpenCurrentDatabase' sobran...

El código original esta probado satisfactoriamente con access97, pero recuerdo que a Gerard no se le abría la vista previa del informe (no sé como
lo solucionó al final), usaba wXp.

El bucle que comprueba si en los informes abiertos de la bd ya existe uno con igual nombre del que deseamos abrir, es necesario para el correcto funcionamiento del filtro (El valor de dbW.Reports.Count no indica el número de informes en la bd, como pudiera parecer, sino que muestra el número de informes abiertos en ese momento).

Loco:
referente a que no te funcione el SQL que indicas, te diré que es lógico...
Prueba una sentencia como esta:

--- Código: Text --- SELECT * FROM PERSONALWHERE Month([Fecha Nacimiento]) = 9  El uso que haces del carácter comodín % es incorrecto, en todo caso debería ser algo así como:

--- Código: Text --- SELECT * FROM PERSONALWHERE [Fecha Nacimiento] like '%/09/%'  
El funcionamiento de los parámetros que se hubieran definido en la consulta o en el filtro del informe también está comprobado con access97.

Abur.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa