Necesito un ejemplo usando Crystal Report 8 (RDC) donde se haga conexión con base de datos Access protegida por password.
¡¡Es Urgente !! => => =>
¡¡Auxilio Expertos Ayudaaaaaaaaaaaaaaaaaa!!
| |||
Problemas con Crystal Report 8 (RDC) y Access Necesito un ejemplo usando Crystal Report 8 (RDC) donde se haga conexión con base de datos Access protegida por password. ¡¡Es Urgente !! => => => ¡¡Auxilio Expertos Ayudaaaaaaaaaaaaaaaaaa!! |
| |||
OK. Gracias por tu ayuda. Pero tengo dos preguntas que hacerte al respecto: 1.- El la línea donde escribes: "Global crxSubreportObject As SubreportObject", ese tipo de dato "SubreportObject" ... ¿dónde está definido? No entendí eso. 2.- Cuando dices "Te sugiero que lo hagas por archivos TTX", te confieso que no se que son archivos TTX ¿dónde crees que puedo leer algo al respecto? =============== Un amigo me pasó el siguiente ejemplo y lo probé con la DB que se instala con el paquete y funciona bien (no le he puesto password). Lo importante aquí son dos cosas: Una, que se puede crear reportes en tiempo de ejecución o al vuelo (no lo sabía), y dos, es que si no se tiene licencia al día, entonces aparece un mensajito muy fastidioso que te lo recordará hasta que aparezca la licencia. El Ejemplo: Dim Application As New CRAXDRT.Application Dim Report As New CRAXDRT.Report Dim ADOConnection As ADODB.Connection Dim ADOCommand As ADODB.Command Dim CRWizard As New CRStandardWizard Private Sub Form_Load() Screen.MousePointer = vbHourglass Set Application = CreateObject("CrystalRuntime.Application") 'Crea un nuevo informe vacio Set Report = Application.NewReport 'Abre una nueva conexión de datos Set ADOConnection = New ADODB.Connection ADOConnection.Open "Provider=MSDASQL;Persist Security Info=False;Data Source=Xtreme Sample Database;Mode=Read" 'Crea una nueva instancia de un objeto Command de ADO Set ADOCommand = New ADODB.Command Set ADOCommand.ActiveConnection = ADOConnection ADOCommand.CommandText = "Orders" ADOCommand.CommandType = adCmdTable 'añade el origen de datos (la tabla Pedidos de XTREME) al informe Report.Database.AddADOCommand ADOConnection, ADOCommand 'Añade el logo y el título del informe Dim ReportTitle As CRAXDRT.TextObject 'Esta linea asume que Crystal Reports está instalado en la ubicación por defecto 'en la unidad C: - buscará el logo de Xtreme aquí Report.Sections(1).AddPictureObject "C:\Archivos de Programa\Seagate Software\Crystal Reports\Samples\Databases\Xtreme.bmp", 1000, 75 Set ReportTitle = Report.Sections(1).AddTextObject("Detalles de pedidos de FedEx", 6000, 400) 'Da formato al título With ReportTitle .HorAlignment = crHorCenterAlign .LeftLineStyle = crLSSingleLine .RightLineStyle = crLSSingleLine .TopLineStyle = crLSSingleLine .BottomLineStyle = crLSSingleLine .HasDropShadow = True .Font.Size = 18 .Font.Bold = True .TextColor = &H808000 .Height = 500 .Width = 4500 End With 'Añade campos en la sección Detalles Report.Sections(3).AddFieldObject "{ado.Order ID}", 750, 5 Report.Sections(3).AddFieldObject "{ado.Order Date}", 3150, 5 Report.Sections(3).AddFieldObject "{ado.Order Amount}", 5500, 5 Report.Sections(3).AddFieldObject "{ado.Ship Via}", 8850, 5 'Da formato al monto del pedido para tener el símbolo monetario por página Report.Sections(3).ReportObjects(3).UseOneSymbolPe rPage = True 'Crea y da formato al Total General del Monto del pedido en el Pie de Informe Dim AmountTotal As CRAXDRT.FieldObject 'Creando una variable de objeto por separado evita profundizar en la jerarquía cuando se le aplica el formato Set AmountTotal = Report.Sections(4).AddSummaryFieldObject _ (Report.Sections(3).ReportObjects(3).Field.Name, crSTSum, 6000, 750) With AmountTotal .Width = 1500 .Font.Bold = True End With 'AmountTotal Report.RecordSelectionFormula = "{ado.Ship Via} = 'FedEx'" Screen.MousePointer = vbDefault If MsgBox("A base report has been created. Do you wish to customize it with the Report Creation Wizard?", vbYesNo, App.Title) = vbYes Then Set CRWizard.CrystalReport = Report CRWizard.DisplayReportWizard MsgBox "The modified report will now be displayed in Report Viewer" End If 'MsgBox("A base report has been created... CRViewer1.ReportSource = Report CRViewer1.ViewReport End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub Private Sub Form_Unload(Cancel As Integer) If MsgBox("Do you want to save this report as Sample.RPT?", vbYesNo, "Save Report") = vbYes Then Report.SaveAs App.Path & "\Sample.RPT", cr80FileFormat End If 'MsgBox("Do you want to save... End Sub ============= Gracias por los ejemplos y le meteré el ojo a ver que aprendo. Saludos y no te olvides lo de la definición de "SubreportObject" y lo de archivos TTX. |
| ||||
MMM lo del tipo de objeto quitalo es para subreportes si no los utilizas quitalo y si los utilizas va a faltar codigo si es asi me dices y te pongo el resto de codigo lo de TTX son archivos definidos por tabulaciones por asi decirlo al hacer el reporte usas estos para crearlos este archivo de texto contiene los campos y el tipo de aqui los jalas para tu reporte de esta manera no usas la BD. solo este archivo pero tal y como los pongas(el orden) asi debe de ir tu sentencia. |
| ||||
http://support.businessobjects.com/...pps_rdc.pdf.asp Aqui hay un ejemplo de como crear los TTX(desde VB) para no tener que escribirlos(luego uno se equivoca) puedes sacar uno por cada tabla que tengas ya despues copiar y pegar para hacer uno para tu consulta SQL. |
| |||
Bueno, gracias de todos modos, pero buscando por los títulos de los ejemplos no pude saber cual de ellos maneja esos TTX a que hace referencia. Si me dices cual es el ejemplo te lo agradezco. Saludos. |
| |||
Al menos en http://support.businessobjects.com/...pps_rdc.pdf.asp no se encuentra ese ejemplo ... quizás en otra parte. |
| |||
Bueno, ya lo tengo. Lo revisaré con la seguridad de que aprenderé muchas cosas. Espero no haberte creado muchas molestias, dándote las gracias por esta tremenda ayuda, me despido y hasta la próxima. Saludos. |
| |||
Sabes como crear los archivos TTX Hola recien me estoy iniciando con Crystal 8.5, ya e trabajado en otras versiones, lo que no se es crear archivos TTX, no sabes donde hay codigo sobre estos, te agradeceria mucho. Orlando |
| |||
Re: Problemas con Crystal Report 8 (RDC) y Access 'Añade campos en la sección Detalles Report.Sections(3).AddFieldObject "{ado.Order ID}", 750, 5 Report.Sections(3).AddFieldObject "{ado.Order Date}", 3150, 5 Report.Sections(3).AddFieldObject "{ado.Order Amount}", 5500, 5 Report.Sections(3).AddFieldObject "{ado.Ship Via}", 8850, 5 ============= Y alguna idea de poder asingar dinámicamente el valor Left de cada campo en el momento de su creacion ?. Aquí asignas 750,3150,550 y 8850. Yo estaba usando el valor Width de cada campo antes de crear el siguiente, pero me deja muchos espacios. Alguna idea ? Gracias 1 |
| |||
Respuesta: Problemas con Crystal Report 8 (RDC) y Access Cita: Mira amigo, yo tenía ese problema y lo solucioné de la siguiente manera, ojo que también funciona para un Control Data.Veo mucho blablabla... y nada efectivo. Dim cPass, Clave As String Clave = "abracadabra" cPass = ";PWD=" & Clave CrystalReport1.Connect = ";PWD=" & Clave CrystalReport1.Action = 1 Espero te funcione. Esto va depender de la versión del Motor Jet (esto es para el access 97 - Jet 3.51 , para otras versiones tienes que ponerlo el Provider ) LRD |
| |||
Respuesta: Problemas con Crystal Report 8 (RDC) y Access Cita:
Iniciado por Helio_77 Mira amigo, yo tenía ese problema y lo solucioné de la siguiente manera, ojo que también funciona para un Control Data. Veo mucho blablabla... y nada efectivo. Dim cPass, Clave As String Clave = "abracadabra" cPass = ";PWD=" & Clave CrystalReport1.Connect = ";PWD=" & Clave CrystalReport1.Action = 1 Espero te funcione. Esto va depender de la versión del Motor Jet (esto es para el access 97 - Jet 3.51 , para otras versiones tienes que ponerlo el Provider ) LRD Hola Helio_77 Tu Respuesta es Correcta por q lo probe Loq Te pido un favor Quiero Ver un Reporte q esta en cr 8 con sql 2000 desde otra maquina pero me manda el error clasico de "no sepuede abrir el Servidor SQL" A que se debe o como debo de enlazar para ver el reporte Te Agradezco de antemano Saludos Luis |
| |||
Respuesta: Problemas con Crystal Report 8 (RDC) y Access como hago en esta seccion sentencia = "tu sentencia SQL" Set rs = cn.Execute(sentencia) Para pasarle la llamada a un sp con parametros que devuelve un cursor, y que este cursos sería el recorset a pasar al reporte. Todo esto surgue porque quiero migrar los reportes echos con store procedure embebidos de oracle en el reporte crystal 8.5 a reportes con archivos TTX. Tengo solo ese problemita para resolver el problema. si coloco el selecte en la variable sentencia funciona genial pero quedaría quemado en el codigo y me parece una mamarrachada. Espero su ayuda ... Muchas Gracias!!!! Cita:
Iniciado por jrp01 'Ok primero tu BD de access la van a usar varios usuarios? 'si es asi te sugiero que cambies a algo mas grande SQL server, etc..... la conexion: Seleciona en proyecto->referencias: Microsoft ActiveX Data Objects XX.XX luego en un modulo: Public cn As New ADODB.Connection en el load de la forma: cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\tubase.mdb" & ";Persist Security Info=False;Jet OLEDB:Database Password=tu_pass" Si deseas validar usuarios eso otra cosa. Para crystal en Proyecto (en mi caso tengo Crystal 8.5 developer) en referencias: Crystal Report engine 8 Object Library (En micaso es 8 por mi version) Crystal Report Viewer Control Crystal Report 8.5 ActiveX Desingner Run time library Crystal Report 8.5 ActiveX Designer Desingn and Run time library Crystal Report Viewer control En una forma colocas el CRViewer Cuando mandes llamar imprimir por ej. un boton pon: ReportViewerFrm.Show 'suponiendo que asi se llama la forma donde esta el control. en el modulo (esto viene en la pagina de Crystal en los ejemplos): Global crxApplication As New CRAXDRT.Application ' Declare report object Global crxReport As CRAXDRT.Report ' Declare database objects Global crxDatabase As CRAXDRT.Database Global crxDatabaseTables As CRAXDRT.DatabaseTables Global crxDatabaseTable As CRAXDRT.DatabaseTable ' Declare the section objects Global crxSections As CRAXDRT.Sections Global crxSection As CRAXDRT.Section ' Declare the subreport objects Global crxSubreport As CRAXDRT.Report Global crxSubreportObject As SubreportObject ' Declare a Font Object. Global crxFont As IFontDisp ' Declare our Field Object. Global crxFieldObject As CRAXDRT.FieldObject Global crxTextObject As CRAXDRT.TextObject Public rs As New ADODB.Recordset En la forma con en control: en el Load: sentencia = "tu sentencia SQL" Set rs = cn.Execute(sentencia) Screen.MousePointer = vbHourglass Set crxReport = crxApplication.OpenReport(App.Path "\tu_reporte.Rpt") crxReport.DiscardSavedData Set crxDatabase = crxReport.Database Set crxDatabaseTables = crxDatabase.Tables crxReport.Database.SetDataSource rs CRViewer1.ReportSource = crxReport CRViewer1.EnableExportButton = True CRViewer1.DisplayGroupTree = False CRViewer1.ViewReport ReportViewerFrm.WindowState = vbMaximized CRViewer1.Zoom 100 Screen.MousePointer = vbDefault en el Resize de la forma: With CRViewer1 .Top = 0 .Left = 0 .Width = Me.ScaleWidth .Height = Me.ScaleHeight End With En el unload de la forma: Set crxReport = Nothing Set crxApplication = Nothing Set crxDatabase = Nothing Set crxDatabaseTable = Nothing Set crxDatabaseTables = Nothing Set crxSubreport = Nothing Set crxSubreportObject = Nothing Set CrSubreport = Nothing Set CrSubreport1 = Nothing Set CrSubreport2 = Nothing Me imagino que ya sabes crear reportes. Te sugiero que lo hagas por archivos TTX asi no dependes de la BD y no por ODBC. |