Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
Manipulação de campos TDATE utilizando o SQLITE Bom dia! Estou desenvolvendo um sistema simples de cadastro de contratos, para o meu local de trabalho. Dentre algumas coisas que vou ter que implementar é um script que vá verificar se o contrato X esta perto da data de vencimento ou não, e se sim, enviar email para a pessoa responsável. No SQLITE não existem campos tipo DATE, diferente do MySQL ou PostGre. Gostaria de saber se o...
MA
Manipulação de campos TDATE utilizando o SQLITE  
Bom dia!

Estou desenvolvendo um sistema simples de cadastro de contratos, para o meu local de trabalho.
Dentre algumas coisas que vou ter que implementar é um script que vá verificar se o contrato X esta perto da data de vencimento ou não, e se sim, enviar email para a pessoa responsável.

No SQLITE não existem campos tipo DATE, diferente do MySQL ou PostGre.


Gostaria de saber se o framework disponibiliza uma forma fácil de manipular essas datas. Se eu for no banco SQLITE e fizer um select, order by, etc, usando os campos de data, ele não ordena corretamente.
Existe algum método específico para manipular uma data tipo TEXT? Pois o sistema, atualmente, esta salvando a data como dd-mm-yyyy.

Já fiz algo semelhante, transformava a data em integer e sempre fazia as verificações pelos números mesmo, mas isso antes de começar a utilizar o framework. Se tiver uma forma mais fácil, seria ótimo.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (7)


WP

o SQLITE tem sim campos do tipo DATE e TIME tambem, assim como TIMESTAMP (DATETIME)
MA

Oi William!

Então... CAMPOS campos mesmo não.
sqlite.org/datatype3.html

Ele tem as manipulações né... de acordo com o que tem aqui:
sqlite.org/lang_datefunc.html

que são funções...
Mas tu entedeu minha pergunta? Eu também não sei se eu consegui me expressar bem.
Se eu salvar em um campo tipo TEXT (que é o que estou fazendo no momento), tem alguma função do Framework, que faça essa pesquisa direta no banco sem a necessidade de realizar funções tipo DATE no sqlite?

Por que, se pá, numa dessa é mais fácil salvar em integer, na hora de gravar no banco uma info oriunda de um campo TDATE transformar essa info em integer também... e boa...
só vai dar mais trabalho
e mais linhas nas functions "set_data_cont"
EE

Tenta criar uma coluna tipo DATE. Comigo funciona.

CREATE TABLE diaria ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, favorecido VARCHAR (120) NOT NULL, data_diaria DATE, destino VARCHAR (200), motivo TEXT NOT NULL, secretaria_id INTEGER, valor DECIMAL (8, 2), FOREIGN KEY (secretaria_id) REFERENCES secretaria (id) );
NR

Marcos, se o problema principal é a ordenação, mesmo que o banco não tenha campos do tipo date, basta salvá-las no formato americano(yyyy-mm-dd).
  1. <?php
  2. $dt = new TDate('campo_data');
  3. // mascara em formato BR para visualizacao
  4. $dt->setMask('dd/mm/yyyy');
  5. // mascara em formato USA para o banco de dados
  6. $dt->setDatabaseMask('yyyy-mm-dd');
  7. ?>
MA

Emanoel, testei aqui desta forma.... e aparentemente funcionou mesmo!
haha.... olha....
Pelo que tinha entendido da documentação do sqlite não daria pra fazer esse tipo de coluna.
Mas tentei fazer umas seleções e aparentemente foi.
Bá! comi bola de graça! hahaha

Muito obrigado!



Nataniel, obrigado pela resposta também. Caso de algum crep com o formato que fiz agora, tento a sua abordagem.


Obrigado a todos!
MA

Não.... engano meu...
Fiz umas seleções aqui e ele entende que
14-02-2017 é maior que 02-05-2017


Nataniel, vou tentar a sua abordagem. Obrigado!
MA

Nataniel! Obrigado cara. Esqueci de avisar aqui, mas a sua abordagem foi a que resolveu a parada aqui.

Obrigado!
:D