Query não funciona
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.
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
Curtidas 0
Respostas
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;
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
16/11/2004
faz um qryValidaData.recordCount0
GOSTEI 0
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
16/11/2004
Acrescentei ´as Resultado´ no sql e continua me retornando 0.
GOSTEI 0
Bruno_fantin
16/11/2004
No if você colocou FieldByName(´Resultado´)???
GOSTEI 0
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.
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
16/11/2004
Então faz isso...
Tira o count do select e no if chama a função IsEmpty...
Tira o count do select e no if chama a função IsEmpty...
GOSTEI 0