You are on page 1of 12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lo+nuevo

VisualBasic6

ASP.NET
Lenguajes.NET

<Xaml/>
Cmoen.NET

Foros

HTML/Scripts
ADO.NET

Windows

Colaboraciones

el Guille, la Web del Visual Basic, C#, .NET y ms...

Formasdeconexinaunabase
dedatos,utilizandoCrystal
Report.NET

Fecha:18/Oct/2005(17/10/05)
Autor:Lic.GiovanniAntonioCuadraReyes

Lasofertas
delGuille
para
alojamiento
(hosting)de
sitiosweb,
seguramente
losmejores
preciosdel

AmericanCollegeITManager
Email: giovanni_cuadra@hotmail.com
gcuadra@americancollege.edu.ni

!!!TecnologadelaProgramacin!!!
Managua,Nicaragua.

Introduccin
CrystalReporthasidounodelosdiseadoresdereportesporexcelenciamsutilizadoanivelmundial,sinoes
el mejor diseador de reportes, se encuentra entre los mejores. Pues su fcil uso y desempeo a logrado
presentarsedeformaconsecutivaenversionesdeMicrosoftVisualStudio.NETenlosrecientesaos.
La primera vez que utilice una versin de Crystal Report fue en Visual Basic 3.0, ya hace unos 10 aos. Me
sorprendi mucho solo el hecho que mostrara los datos mediante una presentacin preliminar, el uso de
formulasyunaqueotrautilidadprediseadaquetenaunnicoobjetivo,eldesimplificarunpocomsalgunas
http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

1/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

tareasdeprogramacinyalmismotiempoenrobustecereldiseador.
Recuerdoqueaproximadamenteenelaode1997enestemismositioescribmiprimerartculobasadoenla
propiedad SelectionFormula, un simple correo enviado a mi buen amigo el Guille donde explicaba el uso de
dichapropiedadydequeformasedeberadeimplementardentrodeVisualBasic.
Ha pasado mucho tiempo desde que por primera vez utilice la versin de Crystal Report 4.5 Pro, despus de
esaversinllegaronnuevasgeneracionesdeCrystalReport,talescomola5.0quelautilicemuypocotiempo
por la sencilla razn que casi en seguida salieron la 6.0 y la 7.0. Pero la versin 7.0 fue sustancialmente
mejoradatantoasqueduremuchotiempoenpasarmeala8.5,yaquetenaalgunasdefectosensuformade
distribucinynecesitabadescubrirlosantesdeutilizarla,recuerdoquemuchossecomplicaronenesaversin,
luego vino la 9.0 y actualmente la versin de .NET, luego la versin 10 y la versin 11 el cual quizs la
estemosutilizandodentrodeunosmeses.
Este artculo esta basado en exponer dos formas de conexin para consultar e imprimir datos desde recursos
compartidosonocompartidos.

ConectandounatabladebasesdedatosmedianteunDatasetconCrystal
Rerport.NET
Eneldiseador,apareceunelmendeproyectoslaopcinagregarunnuevoelemento.Seejecutaestaopcin
yacontinuacinsevisualizaunapantallaelcualsolicitaelnombredelcomponenteainsertarenelproyecto.A
continuacinmuestroelmenparaejecutarlaopcin:

Lafigura1.0Muestralaopcinparainsertarelementosnuevosaunproyecto.

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

2/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lafigura2.0MuestralaplantillaDataSet

Una vez insertado en el proyecto, ser necesario crear una conexin con la base de datos y luego desde el
explorador de servidores de la consola, se deber arrastrar la tabla o las tablas, dependiendo de los datos
desplegadosenelreporte.Acontinuacinmuestrolaformadeconexinalabasededatosyelarrastredela
tabladeejemploalDataSet.

Lafigura3.0Muestraelpaneldelexploradordeservidores

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

3/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lafigura4.0Muestralaspropiedadesdeconexinalabasededatos

Lafigura5.0MuestralatabladentrodelDataset

A como la figura anterior lo muestra, una vez hecha la conexin solo se requiere arrastrar y soltar la tabla
sobre el panel del Dataset, el cual es el medio de diseo para el reporte. Una vez completado el proceso
anteriorserequiereinsertarunaplantilladeCrystalReportparaelaborarelreporte.Acontinuacinmuestroel
asistenteparainsertarlaplantilla:

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

4/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lafigura6.0Muestralaplantillaparaelreporte

Unavezinsertadoelarchivodelreporte,lonicoquefaltaporhaceresconectarelreporteconelDatasetdel
proyecto.Acontinuacinmuestroelprocesoquesedebederealizar.

Lafigura7.0Muestraelmecanismoquesedeberealizarparaconectarelreportconelobjetodeconexin.

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

5/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lafigura8.0MuestraelDatabaseExpertelcualpermiteseleccionarlaformadeconexin.

Una vez aceptada la forma de conexin ser necesario el paso final en la construccin del reporte, la cual es
arrastrar y colocar los campos que se utilizaran dentro del mismo. A continuacin muestro una figura con el
proceso.

Lafigura9.0Muestraelreporteenformadediseo.

ConectandounatabladebasesdedatosdirectamentealServidor
Adiferenciadelaformaanterior,conestasehacelaconexindirectamentealservidordelabasededatos,no
aunesquemacomoelcasodelDataset.Loqueaqudifiereesendoscosas,laprimeraesquesetieneque
utilizardelDatabaseExpertdeCrystalReport,eltipodeconexinOLEDBADOylasegundacosadiferentees
la forma de ejecutar el reporte al pasar toda su informacin de conexin. A continuacin muestro los pasos
paraconectaralservidor,encuantoalprocesodeldiseodelreportesonlosmismosqueelanterior.

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

6/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Lafigura10Muestraeltipodeconexinseleccionada.

ImplementandounasolucinconVisualBasic.NET
A continuacin muestro un ejemplo muy sencillo utilizando dos tipos de reportes, el primero conectado a un
origendeunaesquemadedatosyelsegundodirectamentealservidorendondeseencuentralabasededatos.
Lossiguientesrequisitossernnecesarios:
Microsoft VisualBasic.NET2003

MicrosoftWindowsXPosuperior
MicrosoftSQLServer2000
ComputadorPentiumosuperior
MemoriaRAM128osuperior
MonitorVGAde15osuperior
LaclaseclsPrintReportcontienetresmtodosparapoderejecutarunreportedeCrystalReport,cadaunocon
sus diferencias, ventajas, desventajas, as como tambin sus similitudes. A continuacin muestro el cdigo
fuente:
ImportsCrystalDecisions.ReportSource
ImportsCrystalDecisions.Shared
ImportsCrystalDecisions.CrystalReports.Engine
ImportsCrystalDecisions.CrystalReports
ImportsCrystalDecisions.Windows
ImportsCrystalDecisions.Windows.Forms
ImportsSystem.Windows.Forms

PublicClassReport
ImplementsIPrintReport
DimDidPreviouslyConnectAsBoolean=False
PublicSubPrintPreview(ByValFileReportAsString,ByValDataSourceAsSystem.Data.DataSet,_
OptionalByValFilterAsString="")ImplementsIPrintReport.PrintPreview
DimfrmCRNetAsNewfrmCRNET
DimfrmStatusMessageAsNewfrmStatus
DimIsConnectingAsBoolean=True
DimcrNicasoftStandarReportAsNewReportDocument

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

7/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET
IfNotDidPreviouslyConnectThen
frmStatusMessage.Show("Estableciendoconexin...")
EndIf
WhileIsConnecting
Try
Cursor.Current=Cursors.WaitCursor
WithfrmCRNet
WithcrNicasoftStandarReport
.Load(FileReport)
.SetDataSource(DataSource)
EndWith
.crWinNet.ReportSource=crNicasoftStandarReport
IfNotFilter=""Then
.crWinNet.SelectionFormula=Filter
EndIf
.crWinNet.Refresh()
.Show()
IsConnecting=False
DidPreviouslyConnect=True
frmStatusMessage.Close()
EndWith
CatchexAsException
MsgBox(ex.Message,MsgBoxStyle.Critical)
Cursor.Current=Cursors.Default
frmStatusMessage.Close()
frmCRNet.Close()
ExitWhile
ExitTry
ExitSub

EndTry
EndWhile
EndSub
PublicSubPrint(ByValFileReportAsString,ByValDataSourceAsSystem.Data.DataSet,_
OptionalByValFilterAsString="")ImplementsIPrintReport.Print
DimfrmCRNetAsNewfrmCRNET
DimfrmStatusMessageAsNewfrmStatus
DimIsConnectingAsBoolean=True
DimcrNicasoftStandarReportAsNewReportDocument

IfNotDidPreviouslyConnectThen
frmStatusMessage.Show("Estableciendoconexin...")
EndIf

WhileIsConnecting
Try
Cursor.Current=Cursors.WaitCursor
WithfrmCRNet
WithcrNicasoftStandarReport
.Load(FileReport)

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

8/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET
.SetDataSource(DataSource)
EndWith
.crWinNet.ReportSource=crNicasoftStandarReport
IfNotFilter=""Then
.crWinNet.SelectionFormula=Filter
EndIf
.crWinNet.Refresh()
.crWinNet.PrintReport()
IsConnecting=False
DidPreviouslyConnect=True
frmStatusMessage.Close()
EndWith
CatchexAsException
MsgBox(ex.Message,MsgBoxStyle.Critical)
Cursor.Current=Cursors.Default
frmStatusMessage.Close()
frmCRNet.Close()
ExitWhile
ExitTry
ExitSub
EndTry
EndWhile
EndSub
PublicSubPrintLogon(ByValFileReportAsString,ByValUsernameAsString,ByValPasswordAsString
ByValServernameAsString,OptionalByValFilterAsString="")ImplementsIPrintReport.PrintLogon
DimfrmCRNetAsNewfrmCRNET
DimfrmStatusMessageAsNewfrmStatus
DimIsConnectingAsBoolean=True
DimcrNicasoftStandarReportAsNewReportDocument
DimcrSectionsAsSections
DimcrSectionAsSection
DimcrReportObjectsAsReportObjects
DimcrReportObjectAsReportObject
DimcrSubreportObjectAsSubreportObject
DimcrSubreportDocumentAsReportDocument
DimcrDatabaseAsDatabase
DimcrTablesAsTables
DimcrTableAsTable
DimcrTableLogOnInfoAsTableLogOnInfo
DimcrConnectioninfoAsConnectionInfo
IfNotDidPreviouslyConnectThen
frmStatusMessage.Show("Estableciendoconexin...")
EndIf
WhileIsConnecting
Try
Cursor.Current=Cursors.WaitCursor
crConnectioninfo=NewConnectionInfo
WithcrConnectioninfo
.ServerName=Servername
.UserID=Username
.Password=Password
EndWith
WithfrmCRNet

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

9/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET
crNicasoftStandarReport.Load(FileReport)
crDatabase=crNicasoftStandarReport.Database
crTables=crDatabase.Tables
ForEachcrTableIncrTables
crTableLogOnInfo=crTable.LogOnInfo
crTableLogOnInfo.ConnectionInfo=crConnectioninfo
crTable.ApplyLogOnInfo(crTableLogOnInfo)
Next
crSections=crNicasoftStandarReport.ReportDefinition.Sections
ForEachcrSectionIncrSections
crReportObjects=crSection.ReportObjects
ForEachcrReportObjectIncrReportObjects
IfcrReportObject.Kind=ReportObjectKind.SubreportObjectThen
crSubreportObject=CType(crReportObject,SubreportObject)
crSubreportDocument=_
crSubreportObject.OpenSubreport(crSubreportObject.SubreportName)
crDatabase=crSubreportDocument.Database
crTables=crDatabase.Tables
ForEachcrTableIncrTables
WithcrConnectioninfo
.ServerName=Servername
.UserID=Username
.Password=Password
EndWith
crTableLogOnInfo=crTable.LogOnInfo
crTableLogOnInfo.ConnectionInfo=crConnectioninfo
crTable.ApplyLogOnInfo(crTableLogOnInfo)
Next
EndIf
Next
Next
.crWinNet.ReportSource=crNicasoftStandarReport
IfNotFilter=""Then
.crWinNet.SelectionFormula=Filter
EndIf
.crWinNet.Refresh()
.Show()
IsConnecting=False
DidPreviouslyConnect=True
frmStatusMessage.Close()
EndWith
CatchexAsException
MsgBox(ex.Message,MsgBoxStyle.Critical)
Cursor.Current=Cursors.Default
frmStatusMessage.Close()
frmCRNet.Close()
ExitWhile
ExitTry
ExitSub
EndTry
EndWhile
EndSub

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

10/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET
EndClass

MtodoPrintPreview:EstemtodopermiteconectarseabasesdedatosmedianteorgenesdetipoDataset.
Permitemostrarelreporteantesdeimprimir.
Mtodo Print: Este mtodo permite conectarse a bases de datos mediante orgenesdetipoDataset. Difiere
conelmtodoanteriorenqueestenomuestraelreporteparaunapresentacinpreliminar.
Mtodo PrintLogon: Este mtodo permite conectarse a bases de datos mediante orgenes de tipo OLE DB
ADO,directamentealservidordonderesidelabasededatos.
Cada mtodo de esta clase maneja interfaces, as que si se modifica cualquiera de estos mtodos ser
necesarioactualizaranteselarchivoIPrintReport.
Acontinuacinmuestroelcdigodedondeseinvocandosdetresmtodos:
DimOpenReportAsNewReport
DimUserAsString="sa"
DimPasswordAsString=""
DimServernameAsString="localhost"
DimFilterAsString=""
DimFilename1AsString="C:\VS2003\CRNETconnect\ConnectioCRNET\crEmpleados_Dataset.rpt"
DimFilename2AsString="C:\VS2003\CRNETconnect\ConnectioCRNET\crEmpleados_ADOServer.rpt"
DimdatEmpleadosAsNewDataSet
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
HandlesMenuItem4.Click
Me.Close()
EndSub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
HandlesMenuItem2.Click
OpenReport.PrintPreview(Filename1,datEmpleados,Filter)
EndSub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
HandlesMenuItem3.Click
OpenReport.PrintLogon(Filename2,User,Password,Servername,Filter)
EndSub
PrivateSubfrmMain_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) Handles
MyBase.Load
Me.SqlCon.Open()
Me.DA_Empleados.Fill(Me.datEmpleados,"Employees")
Me.SqlCon.Close()
EndSub

Elrestodelcdigoseencuentraenelproyecto,aqusoloexpongoelmssignificativo,comopartedelcdigo
enlainformacindeconexindeclaroelnombredelservidorcomolocalhost,paraquepuedaserejecutadosin
cambiarelnombredelservidordentrodelobjetodeconexinSqlcon. Lalocalizacindelosarchivosdecada
reporte se encuentra declarada bajo el directorio donde fue creado el proyecto, as que al descomprimir el
proyectosinosecreaelmismoPathdelproyectosernecesarioreconfiguraresoenlasvariables.Encuanto
elservidordebasededatosdondeapuntanlastablas,esreemplazadodinmicamenteenelmomentoquese
pasaalosmtodoslainformacinrequeridaporlaclase.

Conclusiones
Las herramientas modernas de desarrollador han permitido mayores logros en la industria de la informtica.
Cadaunodeestoslogrossonpotencializadosyrepresentadosalusuariofinalcomounasolucinquesatisfaga
alasorganizacionesmodernasconintenciondemodernizarlasenelfuturo.
Encadacoyuntura,latecnologadeinformacinmodernasehadestacadoenproporcionarmayores
soluciones.Ycadasolucinhapermitidoescalarunnivelmsenelmundodelainformtica.
GiovanniCuadra.

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

11/12

29/5/2015

Colabora.NET:Formasdeconexinaunabasededatos,utilizandoCrystalReport.NET

Espaciosdenombresusadosenelcdigodeesteartculo:
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.CrystalReports
CrystalDecisions.Windows
CrystalDecisions.Windows.Forms
System.Windows.Forms
Ficheroconelcdigodeejemplo:gcuadraCRNET.zip101KB

http://www.elguille.info/colabora/NET2005/gcuadra_CrystalReportNET.htm

12/12

You might also like