Atribuir resultado de query numa variavel

Delphi

04/11/2003

ALGUEM PODE ME AJUDAR !!!

Ainda não consigo descobrir o tal intervalo em dias entre datas. Nào pelas sugestoes dadas...Funcionou com a daysbetween. Porém o teste foi feito usando edits comuns. Aí é que está, eu tenho q capturar data de um edit e a outra de uma query. A da query está dando erro. Não aguento mais...

EConvertError with message ´is not a valid date´

Estou fazendo assim:

datamaior := strtodate(edtDataNasc.Text);
datamenor := strtodate(module.query.fields[0].AsString);

Já tentei mudar o Fields[0].AsString para AsDateTime, AsVariant , nada funciona !!!

Na minha tabela, fields[0], que é o campo ´data´ está definido como string. Tb já mudei para Date, mas sem sucesso...

QUEM PODE ME AJUDAR ????
:cry: :cry: :cry:

Ana Davis


Ana Davis

Ana Davis

Curtidas 0

Respostas

Lindomar.des

Lindomar.des

04/11/2003

Ana,

Verifique se a data que está vindo da query está no formato dd/mm/yy.
Este erro, como já deve saber, só ocorre quando a data que está sendo passada para a função é uma data inválida. Teria como vc fazer o teste usando diretamente o campo da query ex:
strtodate(minhaquerymenucampo.value).

suponho que as variáveis usadas são do tipo data, usando o campo como citei acima, não precisaria da função strtodate().

Lindomar Sampaio
Vila Velha-ES


GOSTEI 0
Carlosrm

Carlosrm

04/11/2003

Ana Davis,

Você precisará saber primeiro em que formato está obtendo a datamenor da query. Pode estar ´31/01/2003´ ou ´01/31/2003´ , por exemplo. Entre outras coisas, o formato da data depende de qual Gerenciador de Banco de Dados (ou de Arquivos) você está usando.
De qualquer modo, o formato deve ser o mesmo para ambas as datas, para poder executar a função between(), usar a diferença entre datas, ou ainda uma função que você mesmo tenha desenvolvido.
Num caso desses, a primeira coisa que eu faria seria verificar o formato da data que sai da query, para ver se é compatível, ou se preciso alterar o formato.
Assim que executar sua query, por exemplo, só para ver o formato, use
showmessage(module.query.fields[0].AsString);
Atente que se resultar em 02/04/2003, a dúvida persiste (m/d ou d/m ?).
Ou use outra maneira que você ache mais prático. Há outros caminhos, também. Espero ter ajudado. carlosrm.


GOSTEI 0
Ildefonso

Ildefonso

04/11/2003

Olá, Ana.

Algo como:
var
  dataIni, dataFim: TDateTime;
begin
  dataIni := module.query[´DataInicial´];
  ...

...deve dara certo. Já experimentei usar os campos indexados por número e sempre houveram problemas. Para ver isso, crie um ciclo e imprima o nome dos campos: module.query.fields[ii].name; Algumas vezes a ordem dos campos muda um pouco.

Usar module.query[´NomedoCampo´] trás o valor do campo já em seu tipo apropriado, no caso, uma data.

Além disso, qual é o banco de dados que você está usando?
Qual versão?


GOSTEI 0
Cirilo

Cirilo

04/11/2003

Use a função FormatDateTime(´mm/dd/yyyy´,strtodate(edit1.text))

Veja um exemplo para Interbase 6 opensource
  with fDMEng.qryMovimento do begin
   SelectSQL.Clear;
   SelectSQL.Add(´SELECT * FROM MOVIMENTO´);
   SelectSQL.Add(´WHERE DATA=´+#39+FormatDateTime(´mm/dd/yyyy´,date)+39+´ AND MOVIMENTO="S" ORDER BY´);
  SelectSQL.Add(´IDMOVIMENTO´);
  SelectSQL.Open;
  end; //with



GOSTEI 0
Ana Davis

Ana Davis

04/11/2003

Valeu Galera !

Vou fazer uma tentativa. Dou retorno qd conseguir...

Respondendo o Idelfonso, eu estou usando o velho Paradox msm.


GOSTEI 0
POSTAR