erro ao executar query
27/12/2005
0
DtMConsult.SQLaniver.SQL.Add(´select nm_cliente, extract(month from dt_nasc) as mes ´);
DtMConsult.SQLaniver.SQL.Add(´from Cliente where ´);
DtMConsult.SQLaniver.SQL.Add(´extract(month from dt_nasc) between 1 and 2 ´);
DtMConsult.SQLaniver.SQL.Add(´ order by 2,1´);
onde esta o erro ?
token unknown line 3 char 1 select
no firebird este sqlfunciona
desculpa, mas estou começando. obrigado
Pereiramarcos
Posts
28/12/2005
Eixox
Você fecha a Query;
Já que você está fazendo isso, porque não incrementa o seguinte código:
[i:04fb5de964]DtMConsult.SQLaniver.SQL.Clear;[/i:04fb5de964]
Isso irá limpar o conteúdo de sua SQL, aumentando ainda mais a garantia de que não haverá qualquer resíduo na próxima execução da SQL.
Bem, voltando a sua SQL
para que você está fazendo isso
faça o seguinte (Só colocarei a SQL):
SELECT NMCLIENTE, DT_NASC AS ANIVERSARIO
FROM CLIENTE
WHERE (EXTRACT (MONTH FROM DT_NASC) = 1) OR
(EXTRACT (MONTH FROM DT_NASC) = 2)
Quando você usa BETWEEN e dando a faixa ´1 and 2´ você não está retornando uma faixa e sim somente o mês 1. E mesmo assim você deve ter o sinal de para definir qual a comparação que está fazendo ´= , >, <, >=, <= ou <> ´ e você não colocou, veja bem:
Faça o teste e me diga depois se resolveu seu problema.
28/12/2005
Pereiramarcos
nao da erro mas nao atualiza agrid.
var
mesini,mesfim:integer;
vSql:string;
begin
mesini:=1;
mesfim:=3;
vsql:=´´;
vsql:= ´select nm_cliente, extract(month from dt_nasc) as mes ´;
vsql:=vsql+´from Cliente ´;
vsql:=vsql+´where extract(month from dt_nasc) between ´ + inttostr (mesini) +´ and ´+ inttostr(mesfim);
vsql:=vsql+´order by 1,2´;
DtMConsult.SQLaniver.close;
DtMConsult.SQLaniver.SQL.Clear;
DtMConsult.SQLaniver.SQL.Add(vsql);
DtMConsult.SQLaniver.Open;
28/12/2005
Eixox
Você está usando duas variáveis para definir um parâmetro - limpe ao máximo a sua SQL e veja como ficaria, não estou querendo dizer que o que eu estou fazendo é a melhor coisa, mas pense no futuro do seu código quando tiver que mexer nele, veja como eu o deixo e acredito que irá funcionar - só não funcionará se não houverem aniversariantes no período.
Veja bem:
...SQL.CLOSE;
...SQL.CLEAR;
...SQL.Add(´SELECT NM_CLIENTE, DT_NASC´);
...SQL.Add(´FROM CLIENTE´);
...SQL.Add(´WHERE EXTRACT (MONTH FROM DT_NASC) [b:a0071b7108]=[/b:a0071b7108] BETWEEN ´ + COMOBOBOX1.TEXT + ´ AND ´ + COMBOBOX2.TEXT );
...SQL.Add(´ORDER BY DT_NACS ASC´);
...SQL.ACTIVE := TRUE;
Economizamos 3 variáveis. Não esqueça de linkar o Grid com a sql é claro.
28/12/2005
Pereiramarcos
eixox valeu pela fora.
esta linha tem o igual no between
...SQL.Add(´WHERE EXTRACT (MONTH FROM DT_NASC) [b:4528d06af8]=[/b:4528d06af8] BETWEEN ´ + COMOBOBOX1.TEXT + ´ AND ´ + COMBOBOX2.TEXT );
Estou usando DBExpress.
Datamodule, com sqlconnection, sqldataset, datasetprovider, clientdataset, no form uso um datasource apontando para o clientdataset
logo ele e unidirecional nao posso ligar a grid nele certo ?
30/12/2005
Pereiramarcos
obrigado pela força , desculpe nao responder tive que me ausentar por um tempo.
descobri o meu erro era o seguinte tinha que desativar e reaticar o client data set, o resto tava tudo certo.
assim:
DtMConsult.CDtSetaniver.Active:=false ;
....
....
DtMConsult.CDtSetaniver.Active:=True ;
foi so fazer isso e tudo funcionou perfeitamente.
mais uma vez obrigado
Clique aqui para fazer login e interagir na Comunidade :)