none
Parametros NULL para Report Windows Forms RRS feed

  • Pergunta

  • Srs.Tenho uma aplicação Windows Forms que utiliza o Report e ReportViwer que busca informações atraves de uma SP.
    Abaixo minha SP e o meu TableAdapter.Fil:

    SP

    CREATE procedure [dbo].[Sel_OS_Fabr_Imp]
    (
    @OS_Fabri char(6)
    @Cliete char(30)
    @Base char(20)
    @Modelo char(20)
    )
    As
    Select OS_Fabricacao.OS_Fabricacao,OS_Fabricacao.Serie,OS_Fabricacao.Data_Fabri,OS_Fabricacao.Cliente,
    OS_Fabricacao.Base,OS_Fabricacao.Frota,OS_Fabricacao.Equipamento,
    OS_Fabricacao.Modelo,OS_Fabricacao.Nota_Fiscal,OS_Fabricacao.OS_Garantia,
    OS_Fabricacao.Data_Abertura_Gara,OS_Fabricacao.Prazo_Garantia_Dias,OS_Fabricacao.Prazo_Garantia_Horas,
    OS_Fabricacao.Total_Horas_Moeda,OS_Fabricacao.Total_Peças_Moeda,OS_Fabricacao.Total_Km_Moeda,
    OS_Fabricacao.Total_Desp_Viagem_Moeda,OS_Fabricacao.Total_Km_Rodado,OS_Fabricacao.Total_Horas_Gastas,
    OS_Fabricacao.Ocorrencias,OS_Fabricacao.Horimetro,OS_Fabricacao.Data_Horimetro
    from OS_Fabricacao
    WHERE (@OS_Fabri is null or OS_Fabricacao.OS_Fabricacao = @OS_Fabri)and
    (@Cliete is null or OS_Fabricacao.Cliete = @Cliete) and
    (@Base is null or OS_Fabricacao.Base = @Base) and
    (@Modelo is null or OS_Fabricacao.Modelo = @Modelo)

    TableAdapter.Fil

     Me.Sel_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_OS_Fabr_Imp,TxtOSFabri.text,CboCliente.text,cboBase.text,cboModelo.text)

    Não e estou consiguo enviar NULL para SP e retornar toda minha base de dados, ja tentei fazer as seguintes tentativas sem sucesso:

    TxtOSFabri.text=""
    CboCliente.text=""
    cboBase.text=""
    cboModelo.text=""
    Não retorna nada do banco de dados

    ou
     Dim TxtOSFabri As New SqlClient.SqlParameter
    TxtOSFabri.Value = DBNull.Value

    Nesta situação apresenta o seguinte erro "A conversão do tipo 'DBNull' no tipo 'String' não é válida."

     

    Fico grato se puderem dar uma ajuda

    Atenciosamente 

    sábado, 18 de agosto de 2007 15:46

Respostas

  • Sr. Henry bom dia,

    Sou apenas um entusiasta e curioso, mas no meu caso eu resolvi criando um botão para visualizar o relatorio e no evento click do botão coloquei o seguinte codigo:

        Private Sub ViewButtonClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles_ViewButtonClick.Click


      Dim OSFabri As New SqlClient.SqlParameter
      Dim Cliente As New SqlClient.SqlParameter
      Dim Modelo As New SqlClient.SqlParameter
      Dim Base As New SqlClient.SqlParameter

            If TxtOSFabri.Text <> "" Then
                OSFabri.Value = TxtOSFabri.Text
            End If
            If ChkBase.Checked = True Then
                Base.Value = CboBase.Text
            End If
            If ChkCLiente.Checked = True Then
                Cliente.Value = CboCliente.Text
            End If
            If ChkModelo.Checked = True Then
                Modelo.Value = CboModelo.Text
            End If

    Me.Sel_Cad_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_Cad_OS_Fabr_Imp, OSFabri.Value,Cliente.Value, Modelo.Value, Base.Value)

            Me.ReportViewer1.RefreshReport()
            TxtOSFabri.Text = ""
            TxtOSFabri.Focus()
       End Sub

     

    Quando aciono o botão (ViewButtonClick), carrego as variavies tipo SqlParameter e depois comparo os textbox para checar se estão vazio caso contrario passo os valores dos textbox para as variaveis, finalmente aciono o adapter
    para preencher o relatorio.Note que no adapter eu envio as variaveis e não os textbox.

    Henry deve existir soluçoes mais tecnicas e menores para estas situações,um dia chegamos la e qualquer duvida retorna o post

    At.
    Ananias

    sexta-feira, 16 de novembro de 2007 13:57

Todas as Respostas

  • Voce configurou o ReportView para permitir parametros Nulos ?

     

    domingo, 26 de agosto de 2007 19:20
  • Sr. Jenner,

    Obrigado pela atenção, os parametros do reportview ja estão marcados para "allow null value" ,inclusive alterei minha SP para :

    (
    @OS_Fabri char(6)=null
    @Cliete char(30)=null
    @Base char(20)=null
    @Modelo char(20)=null
    )

     

    Mesmo com estas alterações continuo com o mesmo problema, agradeceria muito se vc pudesse dar uma força.

     

    Atenciosamente

     

    segunda-feira, 27 de agosto de 2007 16:24
  •  

    Eu Fiz os testes aqui e funcionou normalmente...

     

    Criei um SP onde fazia o select em uma tabela e o Where tinha algo como o que vc colocou

    Code Snippet

     

    WHERE (@Param is Null or Campo = @Param) AND (@Param2 is Null or Campo2 = @Param2)

     

     

     

    Depois Criei um Relatório no Reporting Services e permitir que o Parametro no Reporting Services aceitasse NULL... Testei e funcionou. Mesmo nao enviando nenhuma informaçao ele retorna tudo.

     

    Como você está vazendo ? Você chama a StoredProcedure via codigo, retorna um objeto do tipo Table ou DataReader e depois passa esse objeto para o ReportViewer como DataSource ?

     

    Se for isso, ao executar a Procedure, passe somente os parametros que voce tem, aqueles que são Nulos vc nao precisa passar.

     

    Ou se ainda assim vc preferir enviar um valor Nulo envie assim

    Code Snippet

     

    Dim TxtOSFabri As New SqlClient.SqlParameter
    TxtOSFabri.Value = SqlTypes.SqlString.Null

     

     

     

     

    Espero que tenha ajudado...

     

     

    domingo, 2 de setembro de 2007 04:28
  • Ananias,

    blz???


    estava dando uma pesquisa nós foruns e vi esse post seu. Bom, ma o que acontece é o seguinte, estou com um problema mais ou menos parecido, tenho que usar windows forms e reporting services com procedure, so que não estou conseguinto passar parametros, pelo que eu li da sua dúvida isso pra vc não foi o problema. Será que teria como vc me dar uma ajuda ou enviar alguns codigo ou tutorial dessa forma que vc fez pra mim?? Espera ajuda, e obrigado!!


    Att,
    Henry Charriere
    terça-feira, 13 de novembro de 2007 10:34
  • Sr. Henry bom dia,

    Sou apenas um entusiasta e curioso, mas no meu caso eu resolvi criando um botão para visualizar o relatorio e no evento click do botão coloquei o seguinte codigo:

        Private Sub ViewButtonClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles_ViewButtonClick.Click


      Dim OSFabri As New SqlClient.SqlParameter
      Dim Cliente As New SqlClient.SqlParameter
      Dim Modelo As New SqlClient.SqlParameter
      Dim Base As New SqlClient.SqlParameter

            If TxtOSFabri.Text <> "" Then
                OSFabri.Value = TxtOSFabri.Text
            End If
            If ChkBase.Checked = True Then
                Base.Value = CboBase.Text
            End If
            If ChkCLiente.Checked = True Then
                Cliente.Value = CboCliente.Text
            End If
            If ChkModelo.Checked = True Then
                Modelo.Value = CboModelo.Text
            End If

    Me.Sel_Cad_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_Cad_OS_Fabr_Imp, OSFabri.Value,Cliente.Value, Modelo.Value, Base.Value)

            Me.ReportViewer1.RefreshReport()
            TxtOSFabri.Text = ""
            TxtOSFabri.Focus()
       End Sub

     

    Quando aciono o botão (ViewButtonClick), carrego as variavies tipo SqlParameter e depois comparo os textbox para checar se estão vazio caso contrario passo os valores dos textbox para as variaveis, finalmente aciono o adapter
    para preencher o relatorio.Note que no adapter eu envio as variaveis e não os textbox.

    Henry deve existir soluçoes mais tecnicas e menores para estas situações,um dia chegamos la e qualquer duvida retorna o post

    At.
    Ananias

    sexta-feira, 16 de novembro de 2007 13:57
  • Ananias,

    muito obrigado, e qualquer coisa estamos ai tb......
    sexta-feira, 23 de novembro de 2007 11:58