Principales respuestas
¿Como se pasan valores o datos por parámetros en SQL para generar un reporte en crystalreports a partir de un dato escrito en un textbox?

Pregunta
-
Estoy tratando de generar un reporte con crystalreports pasandole datos a través de visual basic desde un textbox.
Este es el código sql que tengo en el crystalreport:
SELECT
Autos.`cod_auto`, Autos.`descripcion`, Autos.`marca`, Autos.`modelo`, Autos.`EdoAuto`
FROM
`Autos` Autos
WHERE
`marca` = '" & txtmarcaauto.Text & "' and `modelo`= '" & txtmodeloauto.Text & "' and `EdoAuto` = 'DISPONIBLE'
ORDER BY
Autos.`cod_auto` ASCgeneralmente si lo fuese colocado en el formulario si funciona, pero como está es desde el crystalreport no me muestra ningun informe, si le borro la condicion w¡marca y modelo y solo dejo el EDOAUTO me busca los disponibles y funciona perfectamente. El problema esta es en que creo que no pasan los parámetros como debe ser.
tambien tebo hacer un reporte parecido pero colocando un monto y buscar los precios mayores a partir de ese monto escrito en la casilla de texto, si me ayudan con este será facil para mi hacer el otro, supongo que debe ser parecido. Espero su ayuda gracias.
Soy nuevo en el foro y programando saludos!
- Cambiado Leandro TuttiniMVP domingo, 10 de marzo de 2013 23:59
Respuestas
-
Hola vxyustiz
Yo paso los parámetros en vb6 de esta manera
Option Explicit Private crApp As New CRAXDRT.APPLICATION Private crReport As New CRAXDRT.Report Private mflgContinuar As Boolean Private mstrParametro1 As String Private mstrParametro2 As String Private Sub Form_Activate() If Not mflgContinuar Then Unload Me End Sub Private Sub Form_Load() Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions Dim crParamDef As CRAXDRT.ParameterFieldDefinition Dim SelectFormula As String On Error GoTo ErrHandler 'Abrir el reporte Screen.MousePointer = vbHourglass mflgContinuar = True Set crReport = crApp.OpenReport(App.Path & "\Reportes\Ingreso de Equipos.rpt", 1) Set crParamDefs = crReport.ParameterFields strSQL = "SELECT DISTINCT RecepcionEquipos.codRecEquipo, Clientes.cliNombre, RecepcionEquipos.fechaIngreso, Productos.proDescripcion, RecepcionEquipos.codEstRec, RecepcionEquipos.codUsu" strSQL = strSQL & " FROM (Clientes INNER JOIN RecepcionEquipos ON Clientes.cliCodigo = RecepcionEquipos.cliCodigo) INNER JOIN (Productos INNER JOIN DetalleRecepcionE ON Productos.proCodigo = DetalleRecepcionE.proCodigo) ON RecepcionEquipos.codRecEquipo = DetalleRecepcionE.codRecEquipo" strSQL = strSQL & " WHERE (((RecepcionEquipos.codEstRec) In ('S','G'))) AND RecepcionEquipos.fechaIngreso>=#" & mstrParametro1 & "# AND RecepcionEquipos.fechaIngreso<=#" & mstrParametro2 & "#" strSQL = strSQL & " ORDER BY RecepcionEquipos.codRecEquipo" crReport.SQLQueryString = strSQL For Each crParamDef In crParamDefs Select Case crParamDef.ParameterFieldName Case "Parametro1" crParamDef.AddCurrentValue (mstrParametro1) Case "Parametro2" crParamDef.AddCurrentValue (mstrParametro2) End Select Next CRViewer1.ReportSource = crReport CRViewer1.DisplayGroupTree = False CRViewer1.ViewReport Screen.MousePointer = vbDefault Set crParamDefs = Nothing Set crParamDef = Nothing Exit Sub ErrHandler: If Err.Number = -2147206461 Then MsgBox "El archivo de reporte no se encuentra, restáurelo de los discos de instalación", _ vbCritical + vbOKOnly Else MsgBox Err.Description, vbCritical + vbOKOnly End If mflgContinuar = False Screen.MousePointer = vbDefault End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub Public Sub PasarParametros(sParam1 As String, sParam2 As String) mstrParametro1 = sParam1 mstrParametro2 = sParam2 End Sub Private Sub Form_Unload(Cancel As Integer) Set crReport = Nothing
Set crApp = Nothing End Sub
Pedro Ávila
"El hombre sabio querrá estar siempre con quien sea mejor que él."
Lima - Perú
- Editado Pedro Ávila domingo, 10 de marzo de 2013 22:31
- Propuesto como respuesta Pedro Ávila martes, 19 de marzo de 2013 17:06
- Marcado como respuesta Omar OrtizModerator lunes, 13 de mayo de 2013 18:12
Todas las respuestas
-
Hola:
Antes que cualquier otra cosa, usa consultas parametrizadas y nunca concatenes, dale una leída a estos links que tratan sobre el tema para que tu mismo te convezas:
Parámetros de los comandos de adaptadores de datos
http://msdn.microsoft.com/es-es/library/ms998271.aspx
Parámetros de los comandos de adaptadores de datos
How To: Protect From Injection Attacks in ASP.NET
Como detectar cuando las consultas no parametrizadas dañan el rendimiento de SQL Server y que hacer
Ahora con respecto a los parametros:
Envio de parámetros discretos de VB.NET a Crystal Reports.
Giving Parameter in SQL Command of Crystal Report. and Passing to Database
Saludos desde Monterrey, Nuevo León, México!!!
-
-
Hola:
Entonces te equivocaste de Foro este foro es sobre Vb.Net y tu lo mencionas deberas de hacer tu pregunta aqui:
Ahí sin lugar a dudas recibirás una ayuda mas acertada sobre lo que deseas hacer y con ejemplos de la versión del lenguaje que estas manejando.
Saludos desde Monterrey, Nuevo León, México!!!
-
Hola vxyustiz
Yo paso los parámetros en vb6 de esta manera
Option Explicit Private crApp As New CRAXDRT.APPLICATION Private crReport As New CRAXDRT.Report Private mflgContinuar As Boolean Private mstrParametro1 As String Private mstrParametro2 As String Private Sub Form_Activate() If Not mflgContinuar Then Unload Me End Sub Private Sub Form_Load() Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions Dim crParamDef As CRAXDRT.ParameterFieldDefinition Dim SelectFormula As String On Error GoTo ErrHandler 'Abrir el reporte Screen.MousePointer = vbHourglass mflgContinuar = True Set crReport = crApp.OpenReport(App.Path & "\Reportes\Ingreso de Equipos.rpt", 1) Set crParamDefs = crReport.ParameterFields strSQL = "SELECT DISTINCT RecepcionEquipos.codRecEquipo, Clientes.cliNombre, RecepcionEquipos.fechaIngreso, Productos.proDescripcion, RecepcionEquipos.codEstRec, RecepcionEquipos.codUsu" strSQL = strSQL & " FROM (Clientes INNER JOIN RecepcionEquipos ON Clientes.cliCodigo = RecepcionEquipos.cliCodigo) INNER JOIN (Productos INNER JOIN DetalleRecepcionE ON Productos.proCodigo = DetalleRecepcionE.proCodigo) ON RecepcionEquipos.codRecEquipo = DetalleRecepcionE.codRecEquipo" strSQL = strSQL & " WHERE (((RecepcionEquipos.codEstRec) In ('S','G'))) AND RecepcionEquipos.fechaIngreso>=#" & mstrParametro1 & "# AND RecepcionEquipos.fechaIngreso<=#" & mstrParametro2 & "#" strSQL = strSQL & " ORDER BY RecepcionEquipos.codRecEquipo" crReport.SQLQueryString = strSQL For Each crParamDef In crParamDefs Select Case crParamDef.ParameterFieldName Case "Parametro1" crParamDef.AddCurrentValue (mstrParametro1) Case "Parametro2" crParamDef.AddCurrentValue (mstrParametro2) End Select Next CRViewer1.ReportSource = crReport CRViewer1.DisplayGroupTree = False CRViewer1.ViewReport Screen.MousePointer = vbDefault Set crParamDefs = Nothing Set crParamDef = Nothing Exit Sub ErrHandler: If Err.Number = -2147206461 Then MsgBox "El archivo de reporte no se encuentra, restáurelo de los discos de instalación", _ vbCritical + vbOKOnly Else MsgBox Err.Description, vbCritical + vbOKOnly End If mflgContinuar = False Screen.MousePointer = vbDefault End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub Public Sub PasarParametros(sParam1 As String, sParam2 As String) mstrParametro1 = sParam1 mstrParametro2 = sParam2 End Sub Private Sub Form_Unload(Cancel As Integer) Set crReport = Nothing
Set crApp = Nothing End Sub
Pedro Ávila
"El hombre sabio querrá estar siempre con quien sea mejor que él."
Lima - Perú
- Editado Pedro Ávila domingo, 10 de marzo de 2013 22:31
- Propuesto como respuesta Pedro Ávila martes, 19 de marzo de 2013 17:06
- Marcado como respuesta Omar OrtizModerator lunes, 13 de mayo de 2013 18:12