Query não funciona

Delphi

16/11/2004

Pessoal,

Em uma aplicação que estou desenvolvendo, tenho que controlar alguns intervalos de datas. Ex. não posso ter o mesmo usuário com datas de acesso iguais.
Tenho na tela, dois componentes DateTimePicker (1 para data_inicio e outro p/data_final), e para o controle coloquei uma query que é chamada no evento onExit do DateTimePicker data_final.
Com essa query, no sqlPlus obtenho o resultado correto, ou seja, o sql está correto, mas quando passo os parâmetros (e eles estão sendo passados corretamente, pois fiz o debug e vi que os valores passados são corretos) dentro do Delphi


Estou usando o seguinte código no evento onExit do DateTimePicker data_final:


with qryValidaData do
begin
Close;
ParamByName( ´pUsu´ ).AsString := Usuario.text;
ParamByName( ´pInicio´ ).AsDateTime := StrToDate(edtDatInicio.Text);
ParamByName( ´pFim´ ).AsDateTime := StrToDate(edtDatFim.Text);
Open;
end;

if qryValidaData.FieldByName( ´count´ ).Value <> 0 then
begin
ShowMessage (´Já existe acesso para o usuário nessa data´);
exit;
end;

No sqlPlus o valor do count = 3, mas no delphi se colocar um showmessage (IntToStr(count.Value)) o valor é sempre 0.

Criei tb procedure e function e está acontecendo a mesma coisa, se executá-la fora do delphi o valor retornado é 3, mas no delphi é sempre = 0.


query

SELECT COUNT(*)
FROM acesso V
WHERE V.usu = :pUsu AND
V.dt_inicio between TO_DATE(:pDataInicio, ´DD/MM/YYYY´) AND TO_DATE(:pDataFinal, ´DD/MM/YYYY´) AND
V.dt_final between TO_DATE(:pDataInicio, ´DD/MM/YYYY´) AND TO_DATE(:pDataFinal, ´DD/MM/YYYY´)

Por favor, não sei mais o que fazer, alguém pode me ajudar?
Obrigada.


Barbara.michele

Barbara.michele

Curtidas 0

Respostas

Bruno_fantin

Bruno_fantin

16/11/2004

Você está mandando o Delphi procurar uma coluna que não existe... Logico que ele não vai achar nada...

Se for o sql server... Vai no query analize e verifica que o select traz somente uma coluna com o titulo em branco....

Faz assim... No sql coloca...

SELECT COUNT(*) as Resultado
FROM acesso V
WHERE V.usu = :pUsu AND
V.dt_inicio between TO_DATE(:pDataInicio, ´DD/MM/YYYY´) AND TO_DATE(:pDataFinal, ´DD/MM/YYYY´) AND
V.dt_final between TO_DATE(:pDataInicio, ´DD/MM/YYYY´) AND TO_DATE(:pDataFinal, ´DD/MM/YYYY´)

e no delphi faz isso...

if qryValidaData.FieldByName( ´Resultado´ ).Value 0 then
begin
ShowMessage (´Já existe acesso para o usuário nessa data´);
exit;
end;


GOSTEI 0
Osocram

Osocram

16/11/2004

faz um qryValidaData.recordCount0


GOSTEI 0
Paulo_amorim

Paulo_amorim

16/11/2004

faz um qryValidaData.recordCount0


Olá

O RecordCount não é muito confiável... normalmente não eh recomendado seu uso...


Creio que nomear o campo Count seria útil...
Até+


GOSTEI 0
Barbara.michele

Barbara.michele

16/11/2004

Acrescentei ´as Resultado´ no sql e continua me retornando 0.


GOSTEI 0
Bruno_fantin

Bruno_fantin

16/11/2004

No if você colocou FieldByName(´Resultado´)???


GOSTEI 0
Barbara.michele

Barbara.michele

16/11/2004

Coloquei:

if qryData.FieldByName( ´Resultado´ ).Value <> 0 then

Antes disso, se colocar showmessage (IntToStr(qryData.FieldByName( ´Resultado´ ).Value )); o valor exibido é 0.


GOSTEI 0
Bruno_fantin

Bruno_fantin

16/11/2004

Então faz isso...

Tira o count do select e no if chama a função IsEmpty...


GOSTEI 0
POSTAR