Fórum Erro com IF no parametro de um SQL? #349680
26/11/2007
0
Bom o SQL esta assim
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE CORRENTE.MATRICULA = :pMatricula and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
[b:2898a49b61]OBS: A SQL esta certo para o que eu preciso[/b:2898a49b61]
Os parametros passei assim:
[b:2898a49b61]:pMatricula[/b:2898a49b61] cadastrei como [color=darkblue:2898a49b61]ftString[/color:2898a49b61]
[b:2898a49b61]:pMes e :pAno[/b:2898a49b61] cadastrei como [color=darkblue:2898a49b61]ftSmallInt[/color:2898a49b61]
Ai no aplicativo estou passando assim
[i:2898a49b61][color=olive:2898a49b61]{:primeiro pego o CDS do DM, depois verifico se o edit1 esta vazio, caso esteja em branco não precisa preencher o edit1, ai entra a condição do IF, o seguindo e o terceiro parametro tem que pegar o Mes e o Ano que estão no ComboBox3 e Edit2}[/color:2898a49b61][/i:2898a49b61]
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Sei que o problema esta aqui no IF
Por que se eu // comentar // estas linhas em vermelho funciona, mais preciso que o usuario tenha a opção de: Ou preencher o Edit1.Text ou deixa-lo em branco.
Bom pessoal, o negócio é que não esta filtrando nada, apenas mostra o resultado do showmessage.
Estou usando os componentes CDSDataSet + CDSProvider + zQuery(Zeos)+Banco de Dados Firebird 2.0
Adriano_servitec
Curtir tópico
+ 0Posts
27/11/2007
Comodelphi
Gostei + 0
27/11/2007
Adriano_servitec
Eu queria apenas se o usuario não digitar no edit1 o filtro me mostrar todos dados cadastrados de um determinado mes/ano caso contrario se digitar algo no edit1 o filtro pegar o codigo+mes/ano tambem.
Entendeu?
Obritgado.
Gostei + 0
27/11/2007
Comodelphi
tente assim:
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text; Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Gostei + 0
27/11/2007
Knight_of_wine
Aquele [b:603ffe2bb1]else[/b:603ffe2bb1] ali não está bem encaixado!
Gostei + 0
27/11/2007
Adriano_servitec
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text; Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Explicando:
Tenho dois edits + um combobox
no edit1 digito o numero da matricula (parametro [0])
no combobox digito o mes (01...12)
no edit2 o ano (2007...etc)
ai pesso para filtrar num botão o select
vamos supor que eu digitar no edit1 7506 no combo 11 no edit2 2007, ai filtra por codigo da matricula e aparece no dbgrid, agora se eu deixar o edit1 vazio e digitar no combo 11 e no edit2 2007 diz a mensagem [b:28112b33b0]MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0);
[/b:28112b33b0], sendo que tem registros neste mes.
Entendeu amigo?
Obrigado.
Gostei + 0
27/11/2007
Comodelphi
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE (:pMatricula IS NULL or CORRENTE.MATRICULA = :pMatricula) and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
e também o if...:
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else Params[0].Clear; Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Gostei + 0
27/11/2007
Emerson Nascimento
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE CORRENTE.MATRICULA LIKE :pMatricula and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
Note que a comparação da matrícula agora é com LIKE, e não mais com =
daí, no seu código, faça:
with dm.cdsMontante do begin close; // o parâmetro ´0´ deve ser preenchido if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else Params[0].AsString := ´¬´; Params[1].Value := StrToInt(ComboBox3.Text); Params[2].Value := StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Gostei + 0
27/11/2007
Martins
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else begin Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); end; open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Boa sorte!
Gostei + 0
27/11/2007
Adriano_servitec
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE CORRENTE.MATRICULA LIKE :pMatricula and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
with dm.cdsMontante do begin close; // o parâmetro ´0´ deve ser preenchido if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else Params[0].AsString := ´¬´; Params[1].Value := StrToInt(ComboBox3.Text); Params[2].Value := StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
Obrigado a todos, pela ajuda.
Valeu
Adriano.
Gostei + 0
27/11/2007
Adriano_servitec
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE (:pMatricula IS NULL or CORRENTE.MATRICULA = :pMatricula) and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
with dm.cdsMontante do begin close; if (Trim(edit1.Text) <> ´´) then Params[0].AsString := Edit1.text else Params[0].Clear; Params[1].Value:=StrToInt(ComboBox3.Text); Params[2].Value:=StrToInt(Edit2.Text); open; if dm.cdsMontante.IsEmpty then MessageDlg(´Nao há registro. Por favor tente novamente´, mtInformation, [mbOK], 0); end;
SELECT SIND2.MATRICULA, SIND2.ADMISSAO, SIND2.ASSOCIADO, coalesce(sum(corrente.VALORPG),0) Soma FROM sind2 inner JOIN corrente ON (sind2.MATRICULA = corrente.MATRICULA) WHERE (:pMatricula = ´´ OR CORRENTE.MATRICULA = :pMatricula) and extract(month from CORRENTE.MESPGTO) <= :pMes and extract(year from CORRENTE.MESPGTO) <= :pAno group by 1,2,3 order by 2
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)