none
Consultando banco de dados passando itens selecionados no checkedlistbox RRS feed

  • Pergunta

  • To com um problema tenho um checkedlistbox e preciso realizar uma consulta passando o item ou os itens selecionados como paramentro para que possa ser realizado uma consulta no banco e os resultados sejam visualizados num datagridview, passar um item selecionado e retornar a consulta num datagrid eu consegui fazer o problema é quando seleciono varios itens do checkedlistbox.

    Se alguem puder me ajudar agradeço.

    sexta-feira, 20 de maio de 2011 02:28

Respostas

  • Faça um loop nos itens e vá adicionando em uma string separada por vírgula.

    Tente algo como o código abaixo, pode ser que ocorra algum erro.

    Dim i As Integer
    Dim resultado As String
    For i = 0 To checkedListBox1.Items.Count -1
    	If checkedListBox1.GetItemChecked(i) Then
    		If ( resultado = "" ) Then resultado += checkedListBox1.Items(i).ToString()
    		Else resultado += "," + checkedListBox1.Items(i).ToString()
    	End If 
    Next 
    

    Depois coloque em sua consulta:

    "Select * from tabela where campo in ( " + resultado + ")"

     

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    • Sugerido como Resposta Italo Lelis de Vietro sexta-feira, 20 de maio de 2011 14:47
    • Marcado como Resposta cardutes terça-feira, 24 de maio de 2011 19:50
    sexta-feira, 20 de maio de 2011 03:53

Todas as Respostas

  • Faça um loop nos itens e vá adicionando em uma string separada por vírgula.

    Tente algo como o código abaixo, pode ser que ocorra algum erro.

    Dim i As Integer
    Dim resultado As String
    For i = 0 To checkedListBox1.Items.Count -1
    	If checkedListBox1.GetItemChecked(i) Then
    		If ( resultado = "" ) Then resultado += checkedListBox1.Items(i).ToString()
    		Else resultado += "," + checkedListBox1.Items(i).ToString()
    	End If 
    Next 
    

    Depois coloque em sua consulta:

    "Select * from tabela where campo in ( " + resultado + ")"

     

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    • Sugerido como Resposta Italo Lelis de Vietro sexta-feira, 20 de maio de 2011 14:47
    • Marcado como Resposta cardutes terça-feira, 24 de maio de 2011 19:50
    sexta-feira, 20 de maio de 2011 03:53
  • Luiz, valeu pela ajuda porem quando realiza a consulta por exemplo seleciono 4 itens no checkedlist box ele mostra como resultado da consulta somente 2 itens, se seleciono 5 itens ele me mostra como resultado 3 itens.

    To tentando de varias formas resolver isso porem continua dando esse mesmo resultado.

    Nesse for ao invés de items.count utilizei Me.ChkListGeren.SelectedItems.Count mas ainda assim continua com esse problema na consulta, você poderia me dar uma ajuda nisso.

    For i = 0 To Me.ChkListGeren.SelectedItems.Count - 1
                If Me.ChkListGeren.GetItemChecked(i) Then
                    If (resultado = "") Then
                        resultado += Me.ChkListGeren.Items(i).ToString()
                    Else
                        resultado += "," + Me.ChkListGeren.Items(i).ToString()
                    End If
                End If
            Next

    segunda-feira, 23 de maio de 2011 16:58
  • Conseguiu resolver?

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 25 de maio de 2011 02:18
  • dessa forma me ajudou a parte da concatenação mas na hora da consulta ele não traz corretamente os resultados por exemplo seleciono 3 itens no checkedlistbox e só me retorna um quando seleciono 5 são retornados 3 registros, como to usanto o tableadapter query não consigo fazer Select * from tabela where campo IN (@campo).

    A forma que você me passou ajudou mas agora surgiu esse outro problema.

    quarta-feira, 25 de maio de 2011 02:54
  • Entendi, mas a string que montou esta com o 5 selecionados certo? Porém quando você passa os 5 selecionados para a query ela retorna somente 3 registros é isso?

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 25 de maio de 2011 02:57
  • Isso mesmo, todos os registros selecionados são passados porem o retorno ta vindo errado e já consultei no banco todos os itens que seleciono tem registro.
    quarta-feira, 25 de maio de 2011 11:51
  • Como ficou sua query antes da execução?

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 25 de maio de 2011 13:44
  • Minha query ta dessa forma:

     

    SELECT     PRODUTO, DATA, GERENTE, QUANT
    FROM       RGP
    WHERE     (PRODUTO = @PRODUTO) AND (DAY(DATA) BETWEEN DAY(@dtInicial) AND DAY(@dtFinal)) AND (MONTH(DATA) BETWEEN MONTH(@dtInicial) AND MONTH(@dtFinal)) AND
    (YEAR(DATA) BETWEEN YEAR(@dtInicial) AND YEAR(@dtFinal)) AND
    charindex(';' + cast(GERENTE as varchar) + ';', @ParamList) > 0
    GROUP BY PRODUTO, DATA, GERENTE, QUANT
    ORDER BY GERENTE

     

    Onde o @paramList são os itens selecionados. Usei o charindex para que possa pegar apartir do ;.

    quarta-feira, 25 de maio de 2011 15:04
  • Você deve verificar se os registros atendem todas as clausulas do where e também não entendi o charindex que colocou, acho que não vai funcionar do jeito que esta imaginando, se você tirar o charindex e deixar somente campo in (@paramList) não funciona?

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 25 de maio de 2011 22:09
  • Então eu já fiz isso, tirando o charindex ele só pega 1 registro, verifiquei todos os paramentros e estão sendo atendidos corretamente. criei uma stored procedure dessa forma.

    SELECT     PRODUTO, DATA, GERENTE, QUANT
    FROM       RGP
    WHERE     (PRODUTO = @PRODUTO) AND (DAY(DATA) BETWEEN DAY(@dtInicial) AND DAY(@dtFinal)) AND (MONTH(DATA) BETWEEN MONTH(@dtInicial) AND MONTH(@dtFinal)) AND
    (YEAR(DATA) BETWEEN YEAR(@dtInicial) AND YEAR(@dtFinal)) AND
    GERENTE IN ( + @GERENTE)

    e deu o mesmo resultado só pega o 1 item do checkedlistbox quando seleciono mais de 1 retorna branco mesmo os parametros atendendo as condições.

    quarta-feira, 25 de maio de 2011 23:01
  • Faz o seguinte pega todos esses parametros, troca manualmente pelos dados verdadeiros e envia para vermos. E tente executar direto no banco. Com certeza há algo errado na sua montagem da query.

     

    Outra idéia: Abrar o Sql Profiler e veja qual a string que esta sendo enviada para o banco.

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 25 de maio de 2011 23:05
  • Verifiquei trocando os valores dos parametros pelos valores reais e realmente quando passo 1 item ele retorna os dados porem quando tenho mais de um item selecionado ele não retorna nada. Verifiquei tambem no  Sql Profiler e a string passada está correta.
    quinta-feira, 26 de maio de 2011 11:11
  • Ok, mas envie a string sql com os dados verdadeiros para vermos e qual resultado retornado, se houver retorno.

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quinta-feira, 26 de maio de 2011 12:08
  • Essa é a String do sql e pelo que pude ver quando ela é passada é que fica sem as aspas simples separando os itens selecionados do checkedlist

    SELECT     PRODUTO, DATA, GERENTE, QUANT
    FROM         RGP
    WHERE     (PRODUTO = 'A CHÁCARA') AND (DAY(DATA) BETWEEN 01 AND 31) AND (MONTH(DATA) BETWEEN 01 AND 12) AND (YEAR(DATA) BETWEEN 2010 AND 2010) AND
                          (GERENTE IN ('sotelo-l', 'costa-l', 'eloy-l', 'tolosa-l', 'osmar-l'))
    GROUP BY PRODUTO, DATA, GERENTE, QUANT
    ORDER BY GERENTE

     

    Mas como irei inserir as aspas simples para concatenar os itens?

    quinta-feira, 26 de maio de 2011 12:35
  • Se estiver sem passar as aspas simples, realmente o sql trará resultado diferente, para colocar as aspas simples veja abaixo:

    Dim i As Integer
    Dim resultado As String
    For i = 0 To checkedListBox1.Items.Count -1
    If checkedListBox1.GetItemChecked(i) Then
    If ( resultado = "" ) Then resultado += "'" + checkedListBox1.Items(i).ToString() + "'"
    Else resultado += ",'" + checkedListBox1.Items(i).ToString() + "'"
    End If
    Next


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quinta-feira, 26 de maio de 2011 12:38