La Web del Programador: Comunidad de Programadores
 
    Pregunta:  42226 - ABRIR REPORT DESDE VB Y B.D.ORACLE
Autor:  maria sanchez
tengo este código que sirve para pasar a un informe que tiene un subinforme no vinculado con el informe principal, las selection formula de los dos desde el programa.
si el fichero .rpt hace referencia a b.d. en access y sin ninguna contaseña de acceso, funciona correctamente.
Pero lo que quiero es que me muestre los dato del informe y que sean de una base de datos en oracle y que me pida por código de v.b. el usuario,contraseña, nombre de la b.d.. Lo que no se es la sentencia de codigo para que haga la conexión a la base de datos oracle.

Option Explicit
Dim rep As CRPEAuto.Report

Private Sub CmdPrueba_Click()
Dim Crystalapp As New CRPEAuto.Application
Dim xx As CRPEAuto.Window
Dim ww As View

Dim rep2 As Object

With Crystalapp

Set rep = .OpenReport("C:\SUBREPORT\INFORME.rpt")
Set rep2 = rep.OpenSubreport("SUBINFORME")

End With

With rep
'FORMULA PARA EL INFORME GENERAL

.RecordSelectionFormula = " {ARTICULOS.NOMBRE} like '" & TxtNombre & "'"
End With

With rep2
'FORMULA PARA EL SUBINFORME
.RecordSelectionFormula = " {PEDIDOS.CODIGO} like '" & TxtCodigo & "'"
End With

rep.Preview "TITULO DEL INFORME"
End Sub

agradecería que alguien me lo pudiera resolver.muchas gracias


  Respuesta:  Rafael H. Yzarra M.
Existen dos vertientes dentro de la respuesta que te envío:

PRIMERO: Si dispones del Software Crystal Report 8.0 (o superior), la codificación no sería necesaria, debido a que sólo tendrías que enlazar la Base de Datos ubicada en Oracle con el editor de reportes, a través del item del menú NUEVA BASE DE DATOS. Posteriormente, en el editor de código de VB, en el evento del objeto con el cual solicitas al programa el envío de datos desde la B. de D, debes de colocar:
.
.
.
CR.'Item que permite insertar una sentencia SQL al reporte'= 'Sentencia SQL'
CR.ReportSource='Cadena que ubica al archivo .rpt que contiene el_ reporte'
CR.PrintReport
.
.
.
SEGUNDO: De no disponer del editor de reportes, entonces, recurre al uso de un objeto de conexión ADODB, a fin de enlazar la aplicación de VB con la Base de Datos en Oracle. Lo anterior, se puede realizar así:

Paso 1: Declara los objetos previamente, inmediatamente después de Option Explicit:

Dim Rs as ADODB.Recordset
Dim Cn as ADODB.Connection
Dim CmdStr as String

Paso 2: Haz válida la presencia de dichos objetos en Form_Load():

----------------------------------
Set Rs = New ADODB.Recordset
Set Cn = New ADODB.Connection

Cn.Open " 'Cadena de conexión con la base de datos' "

Rs.ActiveConnection = Cn
------------------------------------

¿Cómo obtener dicha cadena de conexión? simplemente:

* Abre un ADODC del cuadro de objetos
* Introdúcete en la lista de las propiedades, en el item PERSONALIZADO
* Al accederlo, selecciona el Option Button 'Cadena de conexión'
* Sigue las instrucciones que te indican los cuadros de diálogos que aparecerán.

Seguidamente de obtener la cadena de conexión, llévala directamente al editor de código, y la colocas en donde se sugirió. A partir de ese momento, te encuentras conectada con la Base de Datos.

Posteriormente, utilizando la codificación adecuada, enlaza la B. de D. con el objeto CR. creado; posiblemente pueda ser:

Set CR.DataSource = ' Ubicación del reporte'

ººººººººººººººººººººººººººººººººººººººººººººººººººº
Espero que lo indicado ayude a solventar tu problema