none
Consulta con parametros no filtra busqueda RRS feed

  • Pregunta

  • Buenas Noches

    Estoy realizando una busqueda con parametros a un crystal report, abre el reporte y muestra todos los datos, no esta filtrando la busqueda

    Si me pueden colaborar, gracias de antemano

     Try
                strsql = "select Pago.mes,Pago.ano,Empleado.cedula,Empleado.nombre,Empleado.apellido, Cargo.salario, salarioD,seguroS,paroF,leyP,salarioP,vacaciones from (Pago inner join Empleado on Empleado.cedula=Pago.id_cedula and Empleado.cedula=Pago.id_nombre and Empleado.cedula=Pago.id_apellido) inner join Cargo on Cargo.id=Pago.id_salario " & _
                "where (Pago.mes='" & frmBuscar.nMes.Value & "') and (Pago.ano='" & frmBuscar.nAno.Value & "') and (Pago.id_cedula='" & frmBuscar.txtCedula.Text & "')"
                'acscmd.Parameters.AddWithValue("@idcedula", cedulaconsulta)
                conectar.conectado()
                acscmd.CommandText = strsql
                acscmd.Connection = acsconn
                acsda.SelectCommand = acscmd
                acsda.Fill(acsds)
                strreportname = "Reporte"
                Dim strreportpath As String = Application.StartupPath & "\" & strreportname & ".rpt"
                If Not IO.File.Exists(strreportpath) Then
                    Throw (New Exception("Archivo No Encontrado" & vbCrLf & strreportpath))
    
                End If
                Dim reportDocumento As New CrystalDecisions.CrystalReports.Engine.ReportDocument
                reportDocumento.Load(strreportpath)
                reportDocumento.SetDataSource(acsds.Tables(0))
                CrystalReportViewer1.ShowRefreshButton = False
                CrystalReportViewer1.ShowCloseButton = False
                CrystalReportViewer1.ShowGroupTreeButton = False
                CrystalReportViewer1.ReportSource = reportDocumento
    
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
            End Try
            conectar.desconectado()

    Saludos

    • Cambiado Enrique M. Montejo domingo, 29 de noviembre de 2015 9:16 Pregunta relacionada con Crystal Reports.
    lunes, 23 de noviembre de 2015 3:55

Todas las respuestas

  • Hola:
    Lo que tienes que hacer es ejecutar la consulta desde (Access o desde MSMSE) y veras los resultados que te devuelve la consulta, a partir de esto puedes detectar el error.

    P.D.
    El siguiente inner join "SUENA" un poco raro porque el mismo campo lo comparas con 3 campos diferentes
    > inner join Empleado on Empleado.cedula=Pago.id_cedula and Empleado.cedula=Pago.id_nombre and Empleado.cedula=Pago.id_apellido) <

    Un saludo desde Bilbo
    Carlos

    lunes, 23 de noviembre de 2015 8:25
  • Una recomendación. Deberias emplear parámetros en tu consulta.

    revisa este código 

    Try
    	strsql = "select Pago.mes,Pago.ano,Empleado.cedula,Empleado.nombre,Empleado.apellido, Cargo.salario, salarioD,seguroS,paroF,leyP,salarioP,vacaciones from (Pago inner join Empleado on Empleado.cedula=Pago.id_cedula and Empleado.cedula=Pago.id_nombre and Empleado.cedula=Pago.id_apellido) inner join Cargo on Cargo.id=Pago.id_salario " & _
    	"where (Pago.mes=@mes) and (Pago.ano=@anio) and (Pago.id_cedula=@idcedula)"
    		
    	
    	conectar.conectado()
    	acscmd.CommandText = strsql
    	
    	' Agregar parámetros
    	acscmd.Parameters.AddWithValue("@mes", frmBuscar.nMes.Value)
    	acscmd.Parameters.AddWithValue("@anio", frmBuscar.nAno.Value)
    	acscmd.Parameters.AddWithValue("@idcedula", rmBuscar.txtCedula.Text)
    	
    	acscmd.Connection = acsconn
    	acsda.SelectCommand = acscmd
    	acsda.Fill(acsds)
    	strreportname = "Reporte"
    	Dim strreportpath As String = Application.StartupPath & "\" & strreportname & ".rpt"
    	If Not IO.File.Exists(strreportpath) Then
    		Throw (New Exception("Archivo No Encontrado" & vbCrLf & strreportpath))
    
    	End If
    	Dim reportDocumento As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    	reportDocumento.Load(strreportpath)
    	reportDocumento.SetDataSource(acsds.Tables(0))
    	CrystalReportViewer1.ShowRefreshButton = False
    	CrystalReportViewer1.ShowCloseButton = False
    	CrystalReportViewer1.ShowGroupTreeButton = False
    	CrystalReportViewer1.ReportSource = reportDocumento
    
    Catch ex As Exception
    	MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
    End Try
    conectar.desconectado()

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    lunes, 23 de noviembre de 2015 9:12
  • Ok Carlos,

    Validare bien el inner join sin embargo estoy usando el mismo en un datagrid y funciona sin problemas,

    Si tienes otra sugerencia, sera bien recibida

    Saludos

    lunes, 23 de noviembre de 2015 11:52
  • Hola Sergio,

    De hecho esa fue mi primera opcion, utilice parametros y obtengo el mismo resultado, sin exito

    Si tienes otra sugerencia, sera bien recibida

    Saludos

    lunes, 23 de noviembre de 2015 11:54
  • Yo lo que validaría es lo siguiente:

    1.- Usar bloques using para inicializar el objeto command.

    2.- Inicializar un dataset y dataadapter 


    Revisa este código

    Try
    	strsql = "select Pago.mes,Pago.ano,Empleado.cedula,Empleado.nombre,Empleado.apellido, Cargo.salario, salarioD,seguroS,paroF,leyP,salarioP,vacaciones from (Pago inner join Empleado on Empleado.cedula=Pago.id_cedula and Empleado.cedula=Pago.id_nombre and Empleado.cedula=Pago.id_apellido) inner join Cargo on Cargo.id=Pago.id_salario " & _
    	"where (Pago.mes=@mes) and (Pago.ano=@anio) and (Pago.id_cedula=@idcedula)"
    		
    	conectar.conectado()
    	
    	Using acscmd As New SqlCommand 
    		Dim acsds As DataSet = New DataSet()
    		Dim acsda As SqlDataAdapter = New SqlDataAdapter()
    		acscmd.CommandText = strsql
    		
    		' Agregar parámetros
    		acscmd.Parameters.AddWithValue("@mes", frmBuscar.nMes.Value)
    		acscmd.Parameters.AddWithValue("@anio", frmBuscar.nAno.Value)
    		acscmd.Parameters.AddWithValue("@idcedula", rmBuscar.txtCedula.Text)
    		
    		acscmd.Connection = acsconn
    		acsda.SelectCommand = acscmd
    		acsda.Fill(acsds)
    		strreportname = "Reporte"
    		Dim strreportpath As String = Application.StartupPath & "\" & strreportname & ".rpt"
    		If Not IO.File.Exists(strreportpath) Then
    			Throw (New Exception("Archivo No Encontrado" & vbCrLf & strreportpath))
    
    		End If
    		Dim reportDocumento As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    		reportDocumento.Load(strreportpath)
    		reportDocumento.SetDataSource(acsds.Tables(0))
    		CrystalReportViewer1.ShowRefreshButton = False
    		CrystalReportViewer1.ShowCloseButton = False
    		CrystalReportViewer1.ShowGroupTreeButton = False
    		CrystalReportViewer1.ReportSource = reportDocumento
    	End Using
    Catch ex As Exception
    	MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
    End Try
    conectar.desconectado()


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 23 de noviembre de 2015 12:09
  • En este ultimo código he puesto SqlCommand, SqlAdapter... porque he supuesto que usas Sql Server. Si usas Access será igual pero usando OleDbCommand, OleDabDataAdapter...

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 23 de noviembre de 2015 12:10
  • También te recomiendo hagas la validación del archivo del informe antes que nada para no instanciar ningun objeto si luego no vas a realizar ninguna operacion. Espero explicarme. Te modifico el codigo

    Dim strreportpath As String = Application.StartupPath & "\" & strreportname & ".rpt"
    If Not IO.File.Exists(strreportpath) Then
    	Throw (New Exception("Archivo No Encontrado" & vbCrLf & strreportpath))
    
    End If
    
    Try
    	strsql = "select Pago.mes,Pago.ano,Empleado.cedula,Empleado.nombre,Empleado.apellido, Cargo.salario, salarioD,seguroS,paroF,leyP,salarioP,vacaciones from (Pago inner join Empleado on Empleado.cedula=Pago.id_cedula and Empleado.cedula=Pago.id_nombre and Empleado.cedula=Pago.id_apellido) inner join Cargo on Cargo.id=Pago.id_salario " & _
    	"where (Pago.mes=@mes) and (Pago.ano=@anio) and (Pago.id_cedula=@idcedula)"
    		
    	
    	conectar.conectado()
    	
    	
    	Using acscmd As New SqlCommand 
    		Dim acsds As DataSet = New DataSet()
    		Dim acsda As SqlDataAdapter = New SqlDataAdapter()
    		acscmd.CommandText = strsql
    		
    		' Agregar parámetros
    		acscmd.Parameters.AddWithValue("@mes", frmBuscar.nMes.Value)
    		acscmd.Parameters.AddWithValue("@anio", frmBuscar.nAno.Value)
    		acscmd.Parameters.AddWithValue("@idcedula", rmBuscar.txtCedula.Text)
    		
    		acscmd.Connection = acsconn
    		acsda.SelectCommand = acscmd
    		acsda.Fill(acsds)
    		strreportname = "Reporte"
    		
    		Dim reportDocumento As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    		reportDocumento.Load(strreportpath)
    		reportDocumento.SetDataSource(acsds.Tables(0))
    		CrystalReportViewer1.ShowRefreshButton = False
    		CrystalReportViewer1.ShowCloseButton = False
    		CrystalReportViewer1.ShowGroupTreeButton = False
    		CrystalReportViewer1.ReportSource = reportDocumento
    	End Using
    Catch ex As Exception
    	MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
    End Try
    conectar.desconectado()


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 23 de noviembre de 2015 12:12
  • Ok Sergio,

    Probare este codigo en 8 horas aproximadamente y te dare noticias al respecto

    Saludos

    Antonio Matheus

    lunes, 23 de noviembre de 2015 12:13
  • Hola:

    Al ejecutar la consulta en Acces (parece ser que este el motor que usas), al visualizar los resultados, tu sabras si la consulta esta bien o no.

    Un saludo desde Bilbo

    Carlos

    lunes, 23 de noviembre de 2015 12:47
  • Hola Sergio,

    Probe tu teoria, y el resultado fue el mismo, alguna otra idea?

    Saludos

    martes, 24 de noviembre de 2015 0:11
  • Hola Sergio,

    Probe tu teoria, y el resultado fue el mismo, alguna otra idea?

    Saludos

    A mi me paso lo mismo, por mas que asignaba el origen de datos a otro distinto no me funcionaba.

    La solucion que tuve fue agregando parametros en el reporte.

    https://www.youtube.com/watch?v=iisXC_RsZ3w

    Saludos

    • Propuesto como respuesta Karen Malagón miércoles, 25 de noviembre de 2015 22:55
    martes, 24 de noviembre de 2015 1:03
  • voy a probar y te cuento amigo, gracias

    miércoles, 25 de noviembre de 2015 23:56