Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: ebolo en Jueves 27 de Noviembre de 2003, 20:38
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Jueves 27 de Noviembre de 2003, 20:38
Hola. Quiero lanzar desde un programa de VB un informe que tengo ya hecho en una base de datos de access. Sé trabajar con las tablas, pero eso no sé como hacerlo. ¿Es posible hacerlo?, si se puede cómo. Gracias anticipadas.
Saludos
Título: Re: Informe de Access con Visual?
Publicado por: Brroz en Viernes 28 de Noviembre de 2003, 08:58
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Viernes 28 de Noviembre de 2003, 10:38
Muchas gracis Brroz. Cuando pones: "Con respecto a lo de tener varias tablas como origen de registro para tu informe, utiliza como origen de registro para el informe (propiedad RowSource) una consulta de access o instrucción SQL." ¿Cómo debo poner la propiedad RowSource?. Con la instrucciones SQL no tengo problemas.
He encontrado otro código que también me lanza el informe pero sin filtrarlo, es decir que me pone todos los datos que obtiene de una consulta sin filtrar y yo quiero de los que me salen unos determinados. No sé si me he explicado bien. Saludos y muchas gracias.
Título: Re: Informe de Access con Visual?
Publicado por: Brroz en Viernes 28 de Noviembre de 2003, 14:47
Hola ebolo.
Para filtrar datos, asigna al parámetro 'Filtro' una cadena tal cual lo harias con SQL pero sin la palabra 'WHERE'. Por Ejemplo:
Campo1='Valor1' AND Campo2>=8888
Lo de RowSource venía a cuento de indicarle a Gerard cómo usar varias tablas. Me refería a la propiedad 'Origen de la fila' de los informes de Access.
Chao.
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Viernes 28 de Noviembre de 2003, 17:41
Muchas gracias de nuevo Brroz. He decidico usar el código que pusiste porque me parece más completo. He modificado este mensaje porque creía haberlo conseguido. Lo del filtro lo entiendo, pero no hay manera. Aún poniéndole la cadena del filtro me sigue sacando todos los valores de la consulta. Lo que hago es lo siguiente: Tengo un informe "InfPrueba" que saca sus datos de una consulta "ConPrueba" con varias tablas relacionadas. Yo quiero obtener el informe con los datos de los campos "Albarán"=1 y "Empresa"=1 de la consulta "ConPrueba", y pongo lo siguiente: Filtro = "Albarán = 1 and Empresa = 1" ó Filtro = "Tabla.Albarán=1 and Tabla.Empresa=1" Call Imprimir (InfPrueba, filtro, true) porque está en un módulo la función public para lanzar el informe.
No sé donde fallo, con los 2 filtros me sale lo mismo. Llevo 2 dáis con ello y estoy que me subo por las paredes; sólo me falta eso para acabar sino acaba conmigo.
Saludos y gracias.
Título: Informe de Access con Visual?
Publicado por: ebolo en Viernes 28 de Noviembre de 2003, 20:43
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:
Título: Re: Informe de Access con Visual?
Publicado por: EL Loco en Lunes 26 de Enero de 2004, 03:00
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
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Lunes 26 de Enero de 2004, 14:35
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.
Título: Re: Informe de Access con Visual?
Publicado por: EL Loco en Martes 27 de Enero de 2004, 01:47
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
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
Título: Re: Informe de Access con Visual?
Publicado por: Brroz en Martes 27 de Enero de 2004, 09:16
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 PERSONAL
WHERE 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 PERSONAL
WHERE [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.
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Martes 27 de Enero de 2004, 09:33
EDITO: ya veo que se adelantado Brroz, que sabe mucho más que yo.
Hola de nuevo. Yo lo uso tanto con wXP como con w2000 y access97 y me funciona sin problemas; NO necesito tener abierto el access para que me muestre el informe. Eso me ocurría al principio y por eso le añadí: ---------------- Set ObjAccess = CreateObject("access.application.8") '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" ---------------- Has probado a ponerle el 9 en vez de 10.
En cuanto a la Referencia del proyecto, yo creo que no depende del s.o. y SÍ del access que vayas a usar; pero en ésto no estoy seguro.
En cuanto a la consulta debes pasarle, si la fecha de nacimiento es campo Fecha, pues así:" [Fecha Nacimiento]=#" & format(TuvariableFechanacimiento,"dd/mm/yyyy") & "#" . Le sobra el "Select .........". Es decir al filtro se le pasa sólo el campo de la consulta por el que se quiere discriminar y su valor. Lo que puedes hacer para ver el filtro como te debe pasar al informe, es hacerte la consulta en access, ponerle en el diseño, el valor del criterio del campo con el que quieres discriminar la consulta, grabarla y lanzar el informe. Luego en el informe vas a propiedades y miras como está el filtro; y según esté es como se lo debes pasar.
Saludos y suerte. PD: yo no soy ningún experto, Si alguien del foro puede aclarar las dudas que han surgido creo que todos les estaremos agradecidos.
Título: Re: Informe de Access con Visual?
Publicado por: ebolo en Martes 27 de Enero de 2004, 11:12
Hola de nuevo. Te dejo adjunto un ejemplo para que te funcione con wXP y access2000. Mirar el leeme.txt antes. Me ha funcionado sin problemas; usa un método papa ver visualización por pantalla y otro para imprimir el informe. Es la única forma que le he hecho funcionar bien. Saludos.
Título: Re: Informe de Access con Visual?
Publicado por: EL Loco en Miércoles 28 de Enero de 2004, 00:18
:ph34r: Holas gente!!
Comento 1 par de cosas la sentencia select que puse es a modo de EJEMPLO lo que si tuve que hazer Brroz es cambiar la sentencia que usaba para el datagrid que es T-SQL y usar el sql de access
Voy a revisar de nuevo el codigo que paso Ebolo a ver que encuentro
Ebolo si pongo el Object Library 9 no me funciona porque yo tengo el 10 no tengo idea porque pero en fin , creo que nada tiene que ver con que sea accsess 97 o 2000 sino con que libreria tengas instalada.
Brroz lo de crear la consulta ya lo habia hecho y apartir de ahi cree el informe de accsess , y sin las lineas de ebolo no me funciona!
Una ultima cosa de momento solucione uno de los problemas que tenia de la siguiente manera
1) creo un comando en el data environment , Dynamico y que devuelva un RS 2) Creo 1 datareport y lo vinculo al Comando 3) Como no se porque motivo no me lo filtra opte por cerrarlo y abrirlo con cada sentencia select que necesito cuando le doy al boton Imprimir