• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

axpppp

Consulta em sql

23 mensagens neste tópico

Boas

tou a fazer um programa em vb.net e tou a usar uma base de dados em sql.

tenho uma inputbox ligada a uma variavel que guarda aquilo que digitamos nessa mesma variavel...

tou a representar a base de dados em datagridviews.

depois faço a consulta que supostamente devia de ser assim

 "select * from tabela where nome like '%variavel%'

o programa faz bem a consulta mas depois nao apresenta nenhum resultado no datagridview..

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

DataGridView1.Columns.Clear()

        Dim pesquisa2 As String

        pesquisa2 = InputBox("O nome do atleta que quer procurar?")

        Const constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\axpp\Ambiente de trabalho\controloantidoping\aplicaçãoantidopping\aplicaçãoantidopping\controlo_antidoping.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

        Dim db As New SqlConnection(constr)

        db.Open()
        Dim varsql As String
        Dim num_campos As Integer
        Dim campo As String

        varsql = "select * from controlo_antidoping where Nome = " & pesquisa2
        Dim cmd As New SqlCommand(varsql, db)
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader
        num_campos = dr.FieldCount

        Dim idx_linha As Integer = 0
        Dim idx As Integer

        For idx = 0 To num_campos - 1
            campo = dr.GetName(idx)
            DataGridView1.Columns.Add(campo, campo)
        Next

        While dr.Read
            Dim linha As New DataGridViewRow()
            DataGridView1.Rows.Add(linha)
            DataGridView1.Rows(idx_linha).Cells(0).Value = dr.Item(0)
            DataGridView1.Rows(idx_linha).Cells(1).Value = RTrim(dr.Item(1))


            DataGridView1.Rows(idx_linha).Cells(2).Value = dr.Item(2)
            DataGridView1.Rows(idx_linha).Cells(3).Value = Trim(dr.Item(3))
            DataGridView1.Rows(idx_linha).Cells(4).Value = Trim(dr.Item(4))
            DataGridView1.Rows(idx_linha).Cells(5).Value = Trim(dr.Item(5))
            DataGridView1.Rows(idx_linha).Cells(6).Value = Trim(dr.Item(6))
            DataGridView1.Rows(idx_linha).Cells(7).Value = Trim(dr.Item(7))

            DataGridView1.Rows(idx_linha).Cells(8).Value = Trim(dr.Item(8))
            DataGridView1.Rows(idx_linha).Cells(9).Value = Trim(dr.Item(9))
            DataGridView1.Rows(idx_linha).Cells(10).Value = Trim(dr.Item(10))
            DataGridView1.Rows(idx_linha).Cells(11).Value = Trim(dr.Item(11))
            DataGridView1.Rows(idx_linha).Cells(12).Value = Trim(dr.Item(12))


            idx_linha = idx_linha + 1

        End While

        DataGridView1.AutoResizeColumnHeadersHeight()
        DataGridView1.AutoResizeColumns()
        DataGridView1.AutoResizeRows()

        dr.Close()
        db.Close()

este codigo todo esta todo dentro de um botão....

eu acho que o meu erro esta na instrução de sql..

varsql = "select * from controlo_antidoping where Nome = " & pesquisa2

ja exprimentei meter "", & e nao funciona...

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta fazer assim:

varsql = "select * from controlo_antidoping where Nome = '" & pesquisa2 & "'"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta fazer assim:

varsql = "select * from controlo_antidoping where Nome = '" & pesquisa2 & "'"

assim funciona mas so se colocar o nome do atleta igualzinho como esta na base de dados, vamos supor que eu quero por exemplo precisar todos os atletas chamados luis??? há maneira de fazer isso não ha?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em access não me lembro bem mas acho que é:

varsql = "select * from controlo_antidoping where Nome = '*" & pesquisa2 & "*'"

ou

varsql = "select * from controlo_antidoping where Nome = '%" & pesquisa2 & "%'"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jpaulino essas 2 linhas de codigo dao bem, mas depois no datagridview nao aparece nada...

acho que acontece o que acontecia no inicio

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas porque estás a preencher linha a linha e não defines a datasource ? Tenta colocar na inputbox um "a" para ver se aparece alguma coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim funciona mas so se colocar o nome do atleta igualzinho como esta na base de dados, vamos supor que eu quero por exemplo precisar todos os atletas chamados luis??? há maneira de fazer isso não ha?

Faz igual a isso que funciona mas em vez do = poe LIKE, a instrução de SQL deveria +- assim:

SELECT * 
           FROM table
          WHERE myfield LIKE '%PART_OF_THE_STRING%'        

Esta instrução funcionaria assim em Oracle e em qualquer motor que use SQL penso eu. O % é o wildcard, ou seja onde o colocares estas basicamente a dizer que poderá ter algo que desconheces após ou antes, ou até no meio da tua/s variavel.

Com essa instrução se pesquisares "uis" ele vai devolver luis e todos os restantes que tenham essa combinação. Tem atenção de que teres "Luis" e "luis" são situações distintas e que deves avaliar antes de passar a string para o SQL, normalmente em Oracle utilizarias UPPER() para passar tudo para uppercase e efectuares as comparações assim.

Outra questão para a que deves ter atenção é para a optimização do SQL que estás a passar, utilizando um LIKE poderás estar a fazer um FULL TABLE SCAN e dependendo do tamanho da tabela prejudicar a performance.

Alexandre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Alexandre!

Não alterei de "=" para "LIKE" :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu nao tinha definido o datasource do datagridview, defeni agr e da me um erro...

diz que o indice estava fora do intervalo. Tem de ser não negativo e inferior ao tamanho da colecção.

tambem ja tentei por a sintaxe cmo o alexandre disse sem definir o datasource do datagridview e tambem nao da :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim funciona mas so se colocar o nome do atleta igualzinho como esta na base de dados, vamos supor que eu quero por exemplo precisar todos os atletas chamados luis??? há maneira de fazer isso não ha?

Aqui onde dizes que funca, põe tudo igual ao que funciona e altera apenas o sinal "=" para um LIKE como é referido e adiciona o simbolo de wildcard {% ou *} se não souberes o simbolo RTFM.

Se funcionou assim, como dizes, se adicionare o LIKE e o wildcard o select tem de funcar caso procures "uis" por ex.

Alexandre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mas ja conseguiste resolver o problema??

pensei que sim mas não... :)

:wallbash:

jpaulino, a informação que postas-te aí faz o pretendido...ou seja, faz o mesmo que nós ( eu e axpppp ) pretendemos??

CUMPS

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nup tudo na mesma...

eu consigo pesquisar um nome se meter como esta na base de dados, mas ainda nao consigo por tipo "joao" e aparecer todos os atletas com nome joao da base de dados...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nup tudo na mesma...

eu consigo pesquisar um nome se meter como esta na base de dados, mas ainda nao consigo por tipo "joao" e aparecer todos os atletas com nome joao da base de dados...

select * from atletas where nome like 'joao%'

Deveria fazer o que queres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim mas eu em vez de joao tenho uma variavel...e acho que ai é que deve tar o problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fiz algo tipo isto...

DataGridView1.Columns.Clear()

                Const constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\axpp\Ambiente de trabalho\controloantidoping\aplicaçãoantidopping\aplicaçãoantidopping\controlo_antidoping.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

        Dim db As New SqlConnection(constr)

        db.Open()
        Dim varsql As String
        Dim num_campos As Integer
        Dim campo As String

        varsql = "select * from controlo_antidoping where Nome like '%' + @esquisa2 + '%'"
        Dim cmd As New SqlCommand(varsql, db)
        cmd.parameters.add("@pesquisa2", SqlDbType.VarChar).Value = pesquisa1.text
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader
        num_campos = dr.FieldCount

        Dim idx_linha As Integer = 0
        Dim idx As Integer

        For idx = 0 To num_campos - 1
            campo = dr.GetName(idx)
            DataGridView1.Columns.Add(campo, campo)
        Next

        While dr.Read
            Dim linha As New DataGridViewRow()
            DataGridView1.Rows.Add(linha)
            DataGridView1.Rows(idx_linha).Cells(0).Value = dr.Item(0)
            DataGridView1.Rows(idx_linha).Cells(1).Value = RTrim(dr.Item(1))


            DataGridView1.Rows(idx_linha).Cells(2).Value = dr.Item(2)
            DataGridView1.Rows(idx_linha).Cells(3).Value = Trim(dr.Item(3))
            DataGridView1.Rows(idx_linha).Cells(4).Value = Trim(dr.Item(4))
            DataGridView1.Rows(idx_linha).Cells(5).Value = Trim(dr.Item(5))
            DataGridView1.Rows(idx_linha).Cells(6).Value = Trim(dr.Item(6))
            DataGridView1.Rows(idx_linha).Cells(7).Value = Trim(dr.Item(7))

            DataGridView1.Rows(idx_linha).Cells(8).Value = Trim(dr.Item(8))
            DataGridView1.Rows(idx_linha).Cells(9).Value = Trim(dr.Item(9))
            DataGridView1.Rows(idx_linha).Cells(10).Value = Trim(dr.Item(10))
            DataGridView1.Rows(idx_linha).Cells(11).Value = Trim(dr.Item(11))
            DataGridView1.Rows(idx_linha).Cells(12).Value = Trim(dr.Item(12))


            idx_linha = idx_linha + 1

        End While

        DataGridView1.AutoResizeColumnHeadersHeight()
        DataGridView1.AutoResizeColumns()
        DataGridView1.AutoResizeRows()

        dr.Close()
        db.Close()

o pesquisa 1 é uma textbox onde eu insiro o nome que quero procurar.

problema resolvido =D

obrigado a todos pela ajuda :cheers:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja agora sera que alguem sabe como fazer a mesma pesquisa mas para uma data??

usando na mesma parametros para o dia, mes e ano é que eu ja tive a tentar com # @dia - @mes - @ano # e da me erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres passar uma data, a melhor forma é usares um parâmetro como fizeste no caso do nome.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora