erro ao executar query

27/12/2005

0

DtMConsult.SQLaniver.close;
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

Pereiramarcos

Responder

Posts

28/12/2005

Eixox

Veja o que você está fazendo...

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
DtMConsult.SQLaniver.SQL.Add(´select nm_cliente, extract(month from dt_nasc) as mes ´);


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:

DtMConsult.SQLaniver.SQL.Add(´extract(month from dt_nasc) between 1 and 2 ´);


Faça o teste e me diga depois se resolveu seu problema.


Responder

28/12/2005

Pereiramarcos

eu reli e vi que nao estava limpando, consegui fazer. So que agora aconteceu o seguinte :

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;


Responder

28/12/2005

Eixox

Em primeiro lugar, veja o que você está fazendo:
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.


Responder

28/12/2005

Pereiramarcos

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:4528d06af8]=[/b:4528d06af8] 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.



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 ?


Responder

28/12/2005

Eixox

Agora está funcionando a consulta?


Responder

30/12/2005

Pereiramarcos

Agora está funcionando a consulta?


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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar