SOBRE SELECT E CASE
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
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
Como você faz para executar essa query .. coloca um pesaço de codigo para ver como faz .
Um exemplo porem acho meio gambiarra
SELECT * FROM serviço WHERE (nomefunc = @1) and (nome = (CASE @2 WHEN [ô][ô] THEN nome ELSE @2 END) )
SELECT * FROM serviço WHERE (nomefunc = @1) and (nome = (CASE @2 WHEN [ô][ô] THEN nome ELSE @2 END) )
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)
SELECT * FROM serviço WHERE nomefunc = @1 and (@2 IS NULL OR nome = @2)
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
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
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 .
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 .
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;
}
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;
}
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
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
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
eu vou ser mais prático, veja
SELECT * FROM serviço WHERE (nomefunc = @1) [txt-color=#0000f0]Or [/txt-color](nome = @2)
teste ai
SELECT * FROM serviço WHERE (nomefunc = @1) [txt-color=#0000f0]Or [/txt-color](nome = @2)
teste ai
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
Faça seu login para responder