Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

magtaem

Pesquisas SQL

Mensagens Recomendadas

magtaem

Boas pessoal,

Tenho uma questão relativamente ás pesquisas , eu quando faço o select vou buscar o ID e depois desse ID vou buscar os dados todos do ID para colocar numa tabela. Isso funciona bem, mas apenas me vai buscar um registo e não os restantes registos com o mesmo parâmetro. Por exemplo tenho 3 pessoas com 20 anos ele só me vai buscar aquela que tem o ID mais pequeno.

Sugestões?

Abraço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magtaem
Dim query As String = "SELECT ID FROM Formulario WHERE Nome LIKE '" & TextBox1.Text & "'"
Dim cm As New SqlCommand(query, coneccao)
OpenConnection()
query = cm.ExecuteScalar()
CloseConnection()
query = "select * from Formulario where ID Like " & query & ""

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cerzedelo

Será que está a utilizar o comando certo? O ExecuteScalar e utilizado apenas para devolver um registo ou uma linha neste caso a primeira. Experimente utilizar o comando ExecuteReader.

Editado por Cerzedelo
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magtaem

Será que está a utilizar o comando certo? O ExecuteScalar e utilizado apenas para devolver um registo ou uma linha neste caso a primeira. Experimente utilizar o comando ExecuteReader.

Trocando não funciona colega , não sei trabalhar bem com SQL.

Se me puderes dar uma ajuda agradecia

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cerzedelo

O código que apresentou tem defeitos. Na 1 query até faz sentido usar o ExecuteScalar, dado que esta a escolher o id do nome que introduz, a partida so tem um id por nome.

Na 2 query , atenção que convêm dar um nome diferente, se colocar o ExecuteScalar e tendo vários registos, ele só lhe vai devolver o 1 registo que encontrar, para evitar isso e mostrar todos os registos tem de usar o ExecuteReader.

Ver http://www.macoratti.net/vbn_odrg.htm

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magtaem

O código que apresentou tem defeitos. Na 1 query até faz sentido usar o ExecuteScalar, dado que esta a escolher o id do nome que introduz, a partida so tem um id por nome.

Na 2 query , atenção que convêm dar um nome diferente, se colocar o ExecuteScalar e tendo vários registos, ele só lhe vai devolver o 1 registo que encontrar, para evitar isso e mostrar todos os registos tem de usar o ExecuteReader.

Ver http://www.macoratti.net/vbn_odrg.htm

Já funciona, mas tenho de colocar o nome todo completo,não existe uma forma de pesquisar apenas por alumas letras e ir buscar ?

Abraço e obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cerzedelo

Para isso utiliza o operador like. A questão é que se existir 2 registos com 2 nomes iguais, ex. Antonio, o ExecuteScalar so lhe vai apresentar um dos registos, i.e., só vai conseguir encontrar o 1 registo com o nome Antonio. Por essa razão o executeScalar normalmente só é utilizado com os comandos insert, delete e update, quando só se mexe com 1 registo. No select como podem existir vários registos é utilizado o ExecuteReader.

Por isso um conselho. Na 1 query e dado que quer buscar o id, pesquisando pelo nome, deve usar o ExecuteReader. Depois se resultar mais de que 1 registo, deve ter a opção de seleccionar qual pretende e na 2 query seleccionar todos os registos, com o executeReader, mas ai não precisa do like no sql, basta usar o where.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magtaem

Para isso utiliza o operador like. A questão é que se existir 2 registos com 2 nomes iguais, ex. Antonio, o ExecuteScalar so lhe vai apresentar um dos registos, i.e., só vai conseguir encontrar o 1 registo com o nome Antonio. Por essa razão o executeScalar normalmente só é utilizado com os comandos insert, delete e update, quando só se mexe com 1 registo. No select como podem existir vários registos é utilizado o ExecuteReader.

Por isso um conselho. Na 1 query e dado que quer buscar o id, pesquisando pelo nome, deve usar o ExecuteReader. Depois se resultar mais de que 1 registo, deve ter a opção de seleccionar qual pretende e na 2 query seleccionar todos os registos, com o executeReader, mas ai não precisa do like no sql, basta usar o where.

Desde já muito obrigado eu ja estava a utilizar o operador "Like", mas na primeira query tenho o excute scalar, vou testar colocar o execute reader e já dou feedback

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magtaem

Gostava também de saber por exemplo como é que eu posso colocar a pesquisa a ir buscar apenas por algumas letras imaginem:

Nome : Joao

E aparecia todos os joaos ( Joao Maria, Joao Pedro etc)

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.