none
Ayuda con error desconocido (Syntax y dataset) RRS feed

  • Pregunta

  • Buenas tardes, intento llenar un data set de la siguiente manera: 
     Dim serie As String
            serie = Request.Form("TextBox1")
    
            MultiView1.SetActiveView(View1)
            Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
    
            If (DropImprimir.SelectedValue = 1) Then
                CrystalReportViewer1.Visible = True
                CrystalReportViewer2.Visible = False
                Dim conexionOLE As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=FI0000057326;" &
                                                          "Integrated Security=SSPI;Initial Catalog=SGTICA")
                Dim selectCMD As OleDbCommand = New OleDbCommand("SELECT [CNUMERO_SERIE_PK]
          ,SGTICA_USUARIOS.NNOMBRE_USUARIO  
          ,SGTICA_USUARIOS.CRUT 
    	  ,SGTICA_USUARIOS.NNOMBRES
    	  ,SGTICA_USUARIOS.NAPELLIDOS
    	  ,SGTICA_ACTIVOS.CCIUDAD_FK
    	  ,SGTICA_USUARIOS.NCARGO
        
      FROM [SGTICA_ACTIVOS] 
          INNER JOIN SGTICA_USUARIOS ON SGTICA_ACTIVOS.CUSUARIO_FK = SGTICA_USUARIOS.CUSUARIO_PK
          INNER JOIN SGTICA_CIUDADES ON SGTICA_ACTIVOS.CCIUDAD_FK = SGTICA_CIUDADES.CCIUDAD
          INNER JOIN SGTICA_MARCAS ON SGTICA_ACTIVOS.CMARCA_FK = SGTICA_MARCAS.CMARCA_PK
          INNER JOIN SGTICA_MODELOS ON SGTICA_ACTIVOS.CMODELO_FK = SGTICA_MODELOS.CMODELO_PK
      WHERE CNUMERO_SERIE_PK =" + serie + "", conexionOLE)
    
                selectCMD.CommandTimeout = 30
                Dim custDA As OleDbDataAdapter = New OleDbDataAdapter
                custDA.SelectCommand = selectCMD
                Dim custDS As DataSet = New DataSet
                custDA.Fill(custDS, "SGTICA_ACTIVOS")
                rpt.Load("C:\Users\Visual\Desktop\HAstu004\SGTICA_2.0\SGTICA\Mantenciones\Detalles\Reportes\CR1.rpt")
                CrystalReportViewer1.ReportSource = rpt
                CrystalReportViewer1.RefreshReport()
    el cual me arroja el siguiente error:  Información adicional: Incorrect syntax near '='. el cual va apuntando a la siguiente linea: custDA.Fill(custDS, "SGTICA_ACTIVOS"), pero no encuentro ningún = que este generando el problema, podrían orientarme (tal vez estoy ciego) por favor y gracias. 
    martes, 27 de febrero de 2018 17:50

Respuestas

  • Claro. Lo que tienes que pasar como valor del parámetro no es el control TextBox sino su texto.

    Y para pasar directamente el valor deberías utilizar el método AddWithValue:

    Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
    Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)
    selectCMD.Parameters.AddWithValue("@serie", passval.Text)
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta L3chug4 jueves, 1 de marzo de 2018 11:41
    miércoles, 28 de febrero de 2018 22:08

Todas las respuestas

  • hola

    como implementas la multi lineas en el string que arma el SELECT ? porque no veo que uses el & _ para definir cada salto

    ademas tienes que usar parametros

    Dim query As String = "SELECT [CNUMERO_SERIE_PK] " & _
          ....
      " WHERE CNUMERO_SERIE_PK = @serie"
      
    Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
    selectCMD.Paramters.AddWithValue("@serie", serie)
    
    selectCMD.CommandTimeout = 30
    Dim custDA As OleDbDataAdapter = New OleDbDataAdapter(selectCMD)
    
    Dim custDS As DataSet = New DataSet
    custDA.Fill(custDS, "SGTICA_ACTIVOS")

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 27 de febrero de 2018 18:35
  • Hola leandro tuttini, solo puse la consulta directamente no utilize el _& (ni idea de que se utilizaba), podrias darme un ejemplo de como realizarlo? 
    martes, 27 de febrero de 2018 18:46
  • hola

    How to: Break and Combine Statements in Code (Visual Basic)

    en el link veras como se arma un string multi linea en vb.net

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 27 de febrero de 2018 19:04
  • Hola el código me quedo así: 

            Dim conexionOLE As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=FI0000057326;" &
                                                          "Integrated Security=SSPI;Initial Catalog=SGTICA")
                conexionOLE.Open()
                Dim query As String = "SELECT [CNUMERO_SERIE_PK],SGTICA_USUARIOS.NNOMBRE_USUARIO, SGTICA_USUARIOS.CRUT
    	                                  ,SGTICA_USUARIOS.NNOMBRES
    	                                  ,SGTICA_USUARIOS.NAPELLIDOS
    	                                  ,SGTICA_ACTIVOS.CCIUDAD_FK
    	                                  ,SGTICA_USUARIOS.NCARGO
                                     FROM [SGTICA_ACTIVOS] 
                                          INNER JOIN SGTICA_USUARIOS ON SGTICA_ACTIVOS.CUSUARIO_FK = SGTICA_USUARIOS.CUSUARIO_PK
                                          INNER JOIN SGTICA_CIUDADES ON SGTICA_ACTIVOS.CCIUDAD_FK = SGTICA_CIUDADES.CCIUDAD
                                          INNER JOIN SGTICA_MARCAS ON SGTICA_ACTIVOS.CMARCA_FK = SGTICA_MARCAS.CMARCA_PK
                                          INNER JOIN SGTICA_MODELOS ON SGTICA_ACTIVOS.CMODELO_FK = SGTICA_MODELOS.CMODELO_PK
                                    WHERE CNUMERO_SERIE_PK = @serie"
                Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
                Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)
                selectCMD.Parameters.Add("@serie")
                selectCMD.Parameters("@serie").Value = passval

    y creo que no me reconoce el parámetro @serie ya que me arroja el siguiente error: 

    Información adicional: OleDbParameterCollection sólo acepta objetos de tipo no null OleDbParameter, no objetos String

     Mi pregunta es la siguiente: ¿declare correctamente el parámetro? y ¿ estoy rellenando de forma correcta el parámetro con el valor del textbox? (soy novato y recién estoy integrándome al tema de utilizar dataset y crystal report jajaja) 

    miércoles, 28 de febrero de 2018 11:58
  • Cuando utilizas OLEDB no debes utilizar parámetros con nombre en las consultas sino marcadores de posición con el carácter de interrogación: ?

            Dim conexionOLE As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=FI0000057326;" &
                                                          "Integrated Security=SSPI;Initial Catalog=SGTICA")
                conexionOLE.Open()
                Dim query As String = "SELECT [CNUMERO_SERIE_PK],SGTICA_USUARIOS.NNOMBRE_USUARIO, SGTICA_USUARIOS.CRUT
    	                                  ,SGTICA_USUARIOS.NNOMBRES
    	                                  ,SGTICA_USUARIOS.NAPELLIDOS
    	                                  ,SGTICA_ACTIVOS.CCIUDAD_FK
    	                                  ,SGTICA_USUARIOS.NCARGO
                                     FROM [SGTICA_ACTIVOS] 
                                          INNER JOIN SGTICA_USUARIOS ON SGTICA_ACTIVOS.CUSUARIO_FK = SGTICA_USUARIOS.CUSUARIO_PK
                                          INNER JOIN SGTICA_CIUDADES ON SGTICA_ACTIVOS.CCIUDAD_FK = SGTICA_CIUDADES.CCIUDAD
                                          INNER JOIN SGTICA_MARCAS ON SGTICA_ACTIVOS.CMARCA_FK = SGTICA_MARCAS.CMARCA_PK
                                          INNER JOIN SGTICA_MODELOS ON SGTICA_ACTIVOS.CMODELO_FK = SGTICA_MODELOS.CMODELO_PK
                                    WHERE CNUMERO_SERIE_PK = ?"
                Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
                Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)
                selectCMD.Parameters.Add("@serie")
                selectCMD.Parameters("@serie").Value = passval


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 28 de febrero de 2018 12:04
  • Gracias por responder Asier, realize los cambios que recomendaste y me arroja lo siguiente: 

    Información adicional: OleDbParameterCollection sólo acepta objetos de tipo no null OleDbParameter.

    y creo que es referente a el como rescato el valor de un textbox el cual lo almaceno en el parametro. 

          Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)

    Encuentras que halla cometido algun error de syntaxis? (te adjunto el codigo completo hasta el momento) y muchas gracias por tu ayuda. 

        MultiView1.SetActiveView(View1)
            Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
            If (DropImprimir.SelectedValue = 1) Then
                CrystalReportViewer1.Visible = True
                CrystalReportViewer2.Visible = False
                Dim conexionOLE As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=FI0000057326;" &
                                                          "Integrated Security=SSPI;Initial Catalog=SGTICA")
                conexionOLE.Open()
                Dim query As String = "SELECT [CNUMERO_SERIE_PK],SGTICA_USUARIOS.NNOMBRE_USUARIO, SGTICA_USUARIOS.CRUT
    	                                  ,SGTICA_USUARIOS.NNOMBRES
    	                                  ,SGTICA_USUARIOS.NAPELLIDOS
    	                                  ,SGTICA_ACTIVOS.CCIUDAD_FK
    	                                  ,SGTICA_USUARIOS.NCARGO
                                     FROM [SGTICA_ACTIVOS] 
                                          INNER JOIN SGTICA_USUARIOS ON SGTICA_ACTIVOS.CUSUARIO_FK = SGTICA_USUARIOS.CUSUARIO_PK
                                          INNER JOIN SGTICA_CIUDADES ON SGTICA_ACTIVOS.CCIUDAD_FK = SGTICA_CIUDADES.CCIUDAD
                                          INNER JOIN SGTICA_MARCAS ON SGTICA_ACTIVOS.CMARCA_FK = SGTICA_MARCAS.CMARCA_PK
                                          INNER JOIN SGTICA_MODELOS ON SGTICA_ACTIVOS.CMODELO_FK = SGTICA_MODELOS.CMODELO_PK
                                    WHERE CNUMERO_SERIE_PK = ?"
                Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
                Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)
                selectCMD.Parameters.Add(passval)
                selectCMD.CommandTimeout = 30
                Dim custDA As OleDbDataAdapter = New OleDbDataAdapter(selectCMD)
                Dim custDS As DataSet = New DataSet1
                custDA.Fill(custDS, "SGTICA_ACTIVOS")
                rpt.Load("C:\Users\Visual\Desktop\HAstu004\SGTICA_2.0\SGTICA\Mantenciones\Detalles\Reportes\CR1.rpt")
                CrystalReportViewer1.ReportSource = rpt
                CrystalReportViewer1.RefreshReport()
                conexionOLE.Close()


    miércoles, 28 de febrero de 2018 16:26
  • Claro. Lo que tienes que pasar como valor del parámetro no es el control TextBox sino su texto.

    Y para pasar directamente el valor deberías utilizar el método AddWithValue:

    Dim selectCMD As OleDbCommand = New OleDbCommand(query, conexionOLE)
    Dim passval As TextBox = CType(MultiView1.FindControl("TextBox1"), TextBox)
    selectCMD.Parameters.AddWithValue("@serie", passval.Text)
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta L3chug4 jueves, 1 de marzo de 2018 11:41
    miércoles, 28 de febrero de 2018 22:08
  • Eso mismo me faltaba Asier! muchas gracias, una ultima cosa... no conoces otro metodo para rescatar el .text  desde el behind.
    jueves, 1 de marzo de 2018 11:43