SOBRE SELECT E CASE

MEGAMELO2 08/09/2013 17:15:59
#428584
boa tarde eu estou trabalhando com sql ce
tenho o seguinte select
SELECT * FROM serviço WHERE (nomefunc = @1) and (nome = @2)
Gostaria que caso a pessoa não entrasse com o valor de @2 ele fizesse a consulta sem o @2 assim retornando o valor somente do @1 e se a pessoas colocasse o valor do @2 ai sim ele fizesse a consulta com os dois parâmetros,,,
obrigado a todos

MADMAX 10/09/2013 10:08:37
#428634
Como você faz para executar essa query .. coloca um pesaço de codigo para ver como faz .
MADMAX 10/09/2013 10:10:34
#428635
Um exemplo porem acho meio gambiarra

SELECT * FROM serviço WHERE (nomefunc = @1) and (nome = (CASE @2 WHEN [ô][ô] THEN nome ELSE @2 END) )
OCELOT 10/09/2013 10:25:02
#428636
Você precisa passar algum valor para o @2 se ele sempre vai estar na consulta, suas opções seriam usar queryes diferentes, uma com o segundo parâmetro e uma sem, ou então se vai usar a mesma passar NULL para o segundo parâmetro quando ele não for informado pelo usuário, dai poderia fazer a consulta do tipo

SELECT * FROM serviço WHERE nomefunc = @1 and (@2 IS NULL OR nome = @2)
MEGAMELO2 10/09/2013 12:11:21
#428644
infelizmente madmax o sqlce não reconheceu esta query;;
A ideia seria fazer tipo 2 select
e o segundo select em cima do resultado dos primeiro...
estou usando esta query direto em um datagridview não uso código algum para chamar ela




obrigado
MADMAX 10/09/2013 14:59:45
#428658
MEGAMELO2 , sugiro que você ja inicie fazendo o certo , vai uma camada de banco de dados que te retorna um DataTable ou DataSet ou outro objeto que você achar melhor e ai carrega no seu grid , assim você tem a query na mão . Não utilizo a query diretamente no DataGridView , faço como eu te disse, deve ser por isso que não funciona , vou dar um exemplo bem simples ...

DataTable dtGrid = new DataTable
clConsultaDados clDados = new clConsultaDados(); // Essa e sua classe que executa a query e carrega os dados em um DataTable.
dtGrid = clDados.ExecutaQuery([Ô]Sua Query[Ô])
DataGridView1.DataSource = dtGrid ;

Isso basicamente vai carregar os dados da query no grid , para ficar melhor você pode deixar os campos pre configurados no grid assim quando carregar ja vem e so setar o nome do campo da query no grid pela propriedade DataPropertyName. Você pode usar um dataset tipado tambem .
MADMAX 10/09/2013 15:06:06
#428659
Esse e um exemplo de classe de conexão com banco de dados porem esta em c#, nada muito compicado de converter.

public static DataTable executaQuerySql(StringBuilder querySql, SqlParameter[] parametros)
{
DataTable dtGeral = new DataTable L();
try
{
using (SqlConnection conn = new SqlConnection([Ô]Aqui fica a string de conexao[Ô])
{
conn.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();
SqlCommand cmd = new SqlCommand(querySql.ToString(), conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddRange(parametros);
da.SelectCommand = cmd;
da.Fill(dtGeral);
conn.Close();
}
}
catch (Exception err)
{
throw new Exception(err.Message);
}
return dsGeral;
}
MEGAMELO2 10/09/2013 20:20:35
#428673
eu já fasso dessa forma... mas tipo assim eu queria que ele consultasse primeiro pelo variavel @1 e que depois dentro dos resultados da primeira consulta ele filtrasse pela variável @2 mas somente se o cliente inserisse ela,,,,
ai se eu coloco o and ele precisa das duas variáveis de uma vez pra dar o resultado
e se eu coloco o or ele faz praticamente 2 consultas separadas
pra ficar mais claro essa consulta se refere a uma consulta de serviços prestados por funcionários a clientes então:
quando o cliente por a variável @1 ele exibe todos os serviços executados por determinado funcionário.. ai eu queria a variável @2 filtrasse esses resultados e exibisse o serviços deste funcionário para um determinado cliente!!!

obrigado
Faco isso usando um datagridview

OCELOT 11/09/2013 09:59:51
#428690
A SQL que te passei faz exatamente o que você quer desde que você passe NULL para a segunda variável caso o usuário não informe nenhum valor, mas você basicamente ignorou minha resposta
MARCELO.TREZE 11/09/2013 10:13:52
#428692
eu vou ser mais prático, veja

SELECT * FROM serviço WHERE (nomefunc = @1) [txt-color=#0000f0]Or [/txt-color](nome = @2)

teste ai

OCELOT 11/09/2013 10:25:11
#428694
No caso dele o que você passou acredito que não serve MARCELO-TREZE, ele não quer um ou o outro, ele quer filtrar sempre pelo primeiro e caso o segundo seja informado ele quer que seja filtrado por ele também, usando AND

Página 1 de 2 [14 registro(s)]
Faça seu login para responder