Foros del Web » Programación para mayores de 30 ;) » Programación General »

Crystal Report 8 y VB 6.

Estas en el tema de Crystal Report 8 y VB 6. en el foro de Programación General en Foros del Web. Estoy utilizando Crystal Report 8 y Visual Basic 6 en un sistema que he desarrollado. El problema que tengo es que mi sistema me permite ...

  #1 (permalink)  
Antiguo 29/03/2005, 07:46
 
Fecha de Ingreso: noviembre-2004
Mensajes: 8
Antigüedad: 20 años
Puntos: 0
Crystal Report 8 y VB 6.

Estoy utilizando Crystal Report 8 y Visual Basic 6 en un sistema que he desarrollado.

El problema que tengo es que mi sistema me permite cambiarme de base de datos en tiempo de ejecucion sin problemas, sin embargo no puedo hacer lo mismo con los informes generados con el Crystal Report.

Que es lo que debo hacer para que mis informes de Crystal Report cambien de base de datos en tiempo de ejecución.

Les comento que mi sistema no tiene incluidos los reportes de crystal report en el proyecto, sino que abre directamente el archivo original.

Saludos y agradezco cualquier respuesta que me hagan llegar.
  #2 (permalink)  
Antiguo 29/03/2005, 08:38
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Usa RDC y los reportes los generas con archivos TTX de esa manera no dependes de una base de datos para generarlos.
  #3 (permalink)  
Antiguo 29/03/2005, 10:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Reportes Crystal Report

Prueba con esto, me funcionó usando Crystal Report 9 y solo agregando un control CRViewer9

Option Explicit
Dim m_Application As New CRAXDDRT.Application
Dim m_Report As CRAXDDRT.Report
Dim FileReport As String

Dim CPProp As CRAXDRT.ConnectionProperty
Dim DBTabl As CRAXDRT.DatabaseTable


Private Sub Form_Load()
FileReport = App.Path & "\Reporte.rpt"
Set m_Report = Nothing
Set m_Report = m_Application.OpenReport(FileReport, 1)
Set DBTabl = m_Report.Database.Tables(1)
DBTabl.Location = DirDataBase

CRViewer1.ReportSource = m_Report
CRViewer1.Zoom 1
CRViewer1.ViewReport
End Sub

Espero que te sirva
  #4 (permalink)  
Antiguo 02/04/2005, 00:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
hola bebita

queria ver s me puedes explicar un poquito los pasos

Option Explicit
Dim m_Application As New CRAXDDRT.Application 'aplicacion crystal
Dim m_Report As CRAXDDRT.Report' reporte
Dim FileReport As String' ruta etc

Dim CPProp As CRAXDRT.ConnectionProperty
Dim DBTabl As CRAXDRT.DatabaseTable


Private Sub Form_Load()
FileReport = App.Path & "\Reporte.rpt"
Set m_Report = Nothing
Set m_Report = m_Application.OpenReport(FileReport, 1)
Set DBTabl = m_Report.Database.Tables(1)
DBTabl.Location = DirDataBase

CRViewer1.ReportSource = m_Report
CRViewer1.Zoom 1
CRViewer1.ViewReport
End Sub

Espero que te sirva [/QUOTE]
  #5 (permalink)  
Antiguo 04/04/2005, 15:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Reporte Crystal Report

Hola xochitemol, aqui te explico el codigo, espero me puedas entender
a mi tambien me costo entender que es lo que exactamente hacia

Primero que todo, esta es una forma de enlazar un reporte que ya tienes hecho con el crystal report sin necesidad de incluirlo en tu proyecto visual basic
Funciona usando Crystal Report 9 y agregando un control CRViewer9

No se te olvide, debes agregar las referencias:
Crystal Reports 9 ActiveX Designer Design and Runtime Library (CRAXDDRT.DLL)
Crystal Report Viewer Control 9
y el Control: Crystal Report Viewer Control 9 (CRViewer9)

En un form Agregas el CRViewer9, que en este caso se llama CRViewer1

Código:
Option Explicit
Dim m_Application As New CRAXDDRT.Application 'Crea  una nueva instancia de la aplicacion  
Dim m_Report As CRAXDDRT.Report 	      'Declara  una variable tipo Reporte 
Dim FileReport As String	'Declara la variable que tendra el nombre del reporte

Dim CPProp As CRAXDRT.ConnectionProperty      'Declara una Variable para manipular las propiedadedes de conexion a la base de datos (User ID, Password,...)	
Dim DBTabl As CRAXDRT.DatabaseTable	      'Declara una variable 
para manipular las tablas de la base de datos

Private Sub Form_Load() 
	FileReport = App.Path & "\Reporte.rpt" 'Asignas el reporte que quieres mostrar
	Set m_Report = Nothing
	Set m_Report = m_Application.OpenReport(FileReport, 1)  
	'Abre el reporte  asignado en FileReport
	'el valor 1 indica que abriras el reporte como una copia temporal 
	'en este caso podras abrir el reporte simultaneamente tantas veces quieras
	'Si lo dejas en blanco o indica el valor 0 entonces el reporte se abrira en forma exclusiva
	'es decir, mas nadie podra visualizarlo hasta que cierres el reporte

	Set DBTabl = m_Report.Database.Tables(1)   	    'Obtiene la primera Tabla del reporte
	DBTabl.Location = DirDataBase                         'Establece la nueva ubicacion de la Base de Datos
	
	CRViewer1.ReportSource = m_Report	'Le asignas a control CRViewer1 el reporte que personalizamos
	CRViewer1.Zoom 1                           'Poner el zoom del reporte a tamaño real
	CRViewer1.ViewReport                      'Mostrar el reporte
End Sub

No me habia dado cuenta pero la linea, Dim CPProp As CRAXDRT.ConnectionProperty, no cumple niguna función pero se pudiera utilizar de esta forma:

Reemplaza estas lineas
Código:
Set DBTabl = m_Report.Database.Tables(1)   	    'Obtiene la primera Tabla del reporte
DBTabl.Location = DirDataBase                       'Establece la nueva ubicacion de la Base de Datos
y coloca estas
Código:
Set CPProp = DBTabl.ConnectionProperties("Database Name")  'Obtenemos el nombre de la base de datos
CPProp.Value = FileReport 				  'Le asignas la nueva ubicacion de la base de datos

Espero que te ayude
  #6 (permalink)  
Antiguo 04/04/2005, 21:12
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias bebita por haberme contestado y haberte tomado tu tiempo para hacerlo y sabes me gustaria ser tu amigo soy del estamo de Tlaxcala mexico.

ok por si te interesa mi msn es : [email protected] normalmente entro como a las 10 de la noche.

ok otra pregunta espero no sea mucha molestia

si creo mi reporte en Crystal report 9.0 se supone que asigno la ruta de la base de datos (ACCEES ) hasta aqui todo bien pero que pasaria si cambio la ruta fisica de la base de datos me seguira funcionando el reporte por ejemplo

1.- supongamos que cuando creo el reporte la ruta es c:\sistema\base
2.- creo mi reporte y lo guardo en c:\sistema\reportes
3.- se me ocurre pasar la carpeta sistema a la unidad D:
4.- el reporte seguira funcionando o que pasaria con en caso de ser una respuesta negativa como puedo pasarle al reporte la ruta de la base por ejemplo en visual seria asi :

dim ruta as string
ruta=(app.path & "\sistema\base\base.mdb")
como podria pasar esta cadena a crystal report y como inserto los campos en crystal

se que es mucho pedirte y que tal vez pienses que es abuso de confianza pero si me ayudaras te lo agradeceria muchoooooooooooooo
  #7 (permalink)  
Antiguo 05/04/2005, 07:21
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Si quieres evitar eso crea el reporte en base a archivos TTX crystal 10 trae una herramient que los crea no se si el 9 tambien, de esta manera yo he cambiado de access a SQLServer a Interbase y mis reportes no les he movido nada.
  #8 (permalink)  
Antiguo 05/04/2005, 12:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Crystal Report

Hola xochitemol, no te entendi muy bien lo que preguntas, pero te digo algo
por lo general, cuando trabajo con bases de datos tipo Access
siempre las guardo en una ruta donde este mi proyecto visual Basic,
al igual que los reportes que hago con el Crystal Report.

Asi siempre puedo hacer referencia a ellos asi:

FileReporte=App.Path & "\Reportes\Reporte1.rpt"
FileBaseDatos=App.Path & "\Datos\Basedatos.mdb"

y si el proyecto esta en c:\sistema\ y lo muevo a d:\sistema o donde quieras
nunca tendras errores.

Le asignas al reporte la ruta de la Base de datos con esto
DBTabl.Location = FileBaseDatos

o tambien asi:
DBTabl.Location =App.Path & "\Datos\Basedatos.mdb"

  #9 (permalink)  
Antiguo 05/04/2005, 13:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola Jorge, quisiera saber si Crystal Report 9 tiene esa herramienta
que crea el reporte en base a archivos TTX, quiero saber más del tema
Tengo varios informes que tienen datos en SQLServer y cuando me cambio de servidor
no se como cambiar el origen de los datos a traves de Visual Basic.

Otra cosa, puedes decirme donde puedo bajarme la version 10 ???

De antemano, muchas gracias
  #10 (permalink)  
Antiguo 05/04/2005, 22:52
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
hola bebita se que te molesto otra vez pero por que crees que al pasarle el recordset me muestre el siguiente mensaje : el sudindice esta fuera del intervalo aqui te mando el codigo.

Option Explicit
Dim crapp As CRAXDRT.Application
Dim reporte As CRAXDRT.Report
Dim rs As ADODB.Recordset
Private Sub Command1_Click()
Set crapp = New CRAXDRT.Application
Set reporte = crapp.OpenReport(App.Path & "\reportes\reporte1.rpt")
conexion 'rutina para la conexion con la base
Set rs = New ADODB.Recordset
rs.Open "SELECT *FROM Usysdatosper WHERE nombre='patricia'", cn, adOpenDynamic, adLockReadOnly
reporte.Database.SetDataSource rs, 3, 1'aqui es donde me muestra el error
CRV.ViewReport
Set reporte = Nothing
End Sub
Private Sub Form_Load()
'conexion
End Sub

espero me contestes
  #11 (permalink)  
Antiguo 06/04/2005, 11:28
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola otra vez
Ya revise el codigo que hiciste

En esta linea tienes un error:
Código:
rs.Open "SELECT *FROM Usysdatosper WHERE nombre='patricia'", cn, adOpenDynamic, adLockReadOnly
el * esta pegado de la palabra FROM

y despues de esta linea
Código:
 
reporte.Database.SetDataSource rs, 3, 1  'aqui es donde me muestra el error
debes agregar esta otra para poder asignarle al control el reporte
CRV.ReportSource = reporte


Otra cosa, si el reporte tiene datos guardados los muestra,
y debes presionar el boton actualizar para mostrar los datos que enviaste
en el recordset.

Averigua como se actualiza el reporte sin presionar ese boton y me dices
  #12 (permalink)  
Antiguo 07/04/2005, 23:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias Bebita

hola bebita muchas gracias me ayudo bastanate el problema que localizaste ahora sabes se que tal vez suene que quiero que me resuelvas el problema pero te aseguro que no mira supuestamente el recordset quedo algo asi:

rs.Open "SELECT * FROM Usysdatosper", cn, adOpenDynamic, adLockReadOnly

se supone que tengo 5 registros en la base de datos y en el reporte solo me muestra el primer registro, ya comprobe el recordset y si me trae los 5 registros pero en el reporte solo me muestra uno el codigo quedo algo asi

Private Sub Command1_Click()
Set crapp = New CRAXDRT.Application
Set reporte = crapp.OpenReport(App.Path & "\reportes\reporte1.rpt")

Set rs = New ADODB.Recordset
conexion
'rs.Open "SELECT * FROM Usysdatosper WHERE nombre='" & Text1 & "'", cn, adOpenDynamic, adLockReadOnly
rs.Open "SELECT * FROM Usysdatosper", cn, adOpenDynamic, adLockReadOnly
If rs.EOF Then
MsgBox ""
Else
reporte.Database.SetDataSource rs, 3, 1
CRV.ReportSource = reporte
CRV.ViewReport
Set reporte = Nothing
Exit Sub
End If


y en el reporte tengo los siguientes campos

nombre
carrera
semestre

que esta pasandoooooooooooooooooooooooooooooooooooooooooooo oooo
no lo se he intentado toda la noche por ahora son 5:00 A.M. y tengo que ir a descansar para mañana ir a trabajar adios cuidate y suerte
  #13 (permalink)  
Antiguo 08/04/2005, 07:10
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Cuando guardaste el reporte quitaste la verificafion en File->Save Data with Report?

Y Bebecita te agregue a mi MSN pero no te has conectado
  #14 (permalink)  
Antiguo 08/04/2005, 12:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Es verdad lo que dice jrp01. Recuerda lo que te dije, ya probaste eso???

Cita:
Iniciado por Bebecita

Otra cosa, si el reporte tiene datos guardados los muestra,
y debes presionar el boton actualizar para mostrar los datos que enviaste
en el recordset.

Averigua como se actualiza el reporte sin presionar ese boton y me dices
  #15 (permalink)  
Antiguo 08/04/2005, 12:49
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Bebecita estas en el Messnger?
  #16 (permalink)  
Antiguo 08/04/2005, 22:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
hola compañeros lo que pasa es uqe entro a la red como a las 10 de la noche ya que en el dia trabajo en una empresa. y gracias por su respuesta. seguire trabajando en esta pus. jrp01 me podrias pasar un ejemplo completo de como crear los archivos TTX y como usarlos
  #17 (permalink)  
Antiguo 08/04/2005, 22:54
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
repito el msn [email protected]
  #18 (permalink)  
Antiguo 13/04/2005, 22:36
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
hola bebita que creses ya me funciona pero el problema es que al pasar el recordset solo me muestra el primer registro cuando en la base de datos tengo 6 registros,comprobe el recordset y si me trae los 6 registros el codigo quedo algo asi

Option Explicit
Dim crapp As New CRAXDRT.Application
Dim reporte As CRAXDRT.Report
Dim rs As ADODB.Recordset
Dim Recset As ADODB.Recordset
Dim FileReport As String
Private Sub Command1_Click()
Set crapp = New CRAXDRT.Application
Set reporte = crapp.OpenReport(App.Path & "\reportes\reporte1.rpt")

Set rs = New ADODB.Recordset
conexion 'modulo para la conexion con la base de datos
rs.Open "SELECT * FROM Usysdatosper WHERE nombre='" & Text1 & "'", cn, adOpenDynamic, adLockReadOnly
'rs.Open "SELECT * FROM Usysdatosper", cn, adOpenDynamic, adLockReadOnly
If rs.EOF Then
MsgBox ""
Else
reporte.Database.SetDataSource rs, 3, 1
CRV.ReportSource = reporte
CRV.ViewReport
Set reporte = Nothing
Exit Sub
End If
End Sub
  #19 (permalink)  
Antiguo 14/04/2005, 07:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 8 meses
Puntos: 0
Creo que lo que pasa con tu reporte es que esta mostrando los datos que se guardaron con el reporte.

Prueba con esto:

Antes de esta linea:
CRV.ReportSource = reporte


Agrega esta otra:
reporte.DiscardSavedData

y me dices si ya te funciona.
  #20 (permalink)  
Antiguo 14/04/2005, 22:41
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
no sirve a ver como podermos hacer para que te pase todo el codigo ?
  #21 (permalink)  
Antiguo 15/04/2005, 07:09
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Los registros los muestras en Detalle del reporte?
  #22 (permalink)  
Antiguo 16/04/2005, 23:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias creo resolver el problema

el codigo quedo algo asi:


Private Sub Command4_Click()
Dim CrApp As CRAXDRT.Application
Dim Reporte As CRAXDRT.Report
Dim Conn As ADODB.Connection
Dim Recset As ADODB.Recordset

'Crea el reporte y lo abre desde el RPT
Set CrApp = New CRAXDRT.Application
Set Reporte = CrApp.OpenReport(App.Path & "\reportes\Reporte5.rpt")
Set Conn = New ADODB.Connection
conexion 'modulo de conexion a la base de datos
'Obtiene los datos de la tabla
Set Recset = New ADODB.Recordset
Recset.Open "Select * from registrar where nombre='" & Text1 & "'", cn, adOpenDynamic
Reporte.Database.SetDataSource Recset, 3, 1
'Establece el reporte a mostrar del control Viewer
CRV.ReportSource = Reporte
CRV.ViewReport
'Elimina la instancia del reporte para eliminar el bloqueo del archivo RPT
Set Reporte = Nothing

End Sub


*************************
aqui esta el modulo de la conexion
***************************
Option Explicit
Public cn As ADODB.Connection
Sub conexion() 'establezco conexion xon base de datos
Dim ruta As String
On Error GoTo errores
ruta = App.Path & "\RBDC\BDC.mde"
'If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=" & ruta & ";" & _
"Jet OLEDB:Database password=cossies "
cn.Open
errores:
If Err.Number = -2147467259 Then
MsgBox "Error fatal la base de datos no existe", vbCritical
Exit Sub
End If
End Sub



perdon se me olvidaba el reporte usa archivos TTX, gracias a bebita por los consejos y ayuda. a Jrp01 por el consejo de archivos ttx

Última edición por xochitemol; 16/04/2005 a las 23:08 Razón: modificar contenido
  #23 (permalink)  
Antiguo 18/04/2005, 22:13
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
hola me preguntaba como puedes sacar datos tipo fecha con archivos ttx mira crep un archivo ttx y le paso el recopdset pero no me muestra los datos de tipo fecha en el reporte el dato que obtengo lo tomo como date o string y ninguna de las dos formas.
de antemano muchas gracias por la respuesta
  #24 (permalink)  
Antiguo 18/04/2005, 22:17
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
a ver si me pueden ayuda

hola amigos queria ver como puedo mostrar datos tipo fecha en un reporte creado en TTx, ok lo que pasa es que creo un reporte en TTX y le paso un recordset pero los datos que son tipo fecha no los muestra he intentado ller el dato como texto pero a un asi no se puede espero me ayuden
  #25 (permalink)  
Antiguo 19/04/2005, 07:42
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Como tienes definido el campo debe ser argo asi:
micampo datetime
en el TTX
  #26 (permalink)  
Antiguo 19/04/2005, 13:33
 
Fecha de Ingreso: abril-2005
Mensajes: 27
Antigüedad: 19 años, 7 meses
Puntos: 0
me hariais un gran favor si me dijerais si se pueden meter dos informes en uno sin que el primero interfiera en el segundo si no me he explicado bien decidlo y os lo intentare explicar mejor
gracias anticipadas
¿se me nota que soy un novatillo?
  #27 (permalink)  
Antiguo 19/04/2005, 22:16
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
ok de hecho el tipo de dato en el reporte es strin pero tambien lo intento ller como date y no funciona
  #28 (permalink)  
Antiguo 19/04/2005, 22:20
 
Fecha de Ingreso: diciembre-2004
Mensajes: 79
Antigüedad: 19 años, 11 meses
Puntos: 0
de hecho al crear el reporte no me acepta mas que el tipo de datos DATE
  #29 (permalink)  
Antiguo 20/04/2005, 07:07
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años, 6 meses
Puntos: 0
Este es un ejemplo de TTX que tengo
Código:
idvehiculo	short		1
kilometraje	number		1.00
cantidad	number		1.00
cantidad2	number		1.00
cantidad3	number		1.00
cantidad4	number		1.00
monto	number		1.00
prouctividad	number		1.00
Fecha	datetime		Jan 5, 1994 1:23:45 PM
Fecha2	datetime		Jan 5, 1994 1:23:45 PM
Fecha3	datetime		Jan 5, 1994 1:23:45 PM
  #30 (permalink)  
Antiguo 20/04/2005, 11:13
 
Fecha de Ingreso: abril-2005
Mensajes: 1
Antigüedad: 19 años, 7 meses
Puntos: 0
Hola a todos ¿Alguien me podria ayudar?

Necesito saber como utilizar imagenes dinamicas en crystal reports 9.0, es decir poder cambiar una imagen en tiempo de ejecución en crystal reports dependiendo de la compañia que ejecute el reporte...

Gracias y saludos a todos..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.