• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MetalFatigue

SQL com Data

9 mensagens neste tópico

Estou a tentar fazer uma query através VBA que necessita de procurar se determinadas datas existem. Mas o Access dá me "erro de conversão Tipo de dados incorrecto na expressão de critérios. (Erro 3464)".

Isto deve ser algo bastante simples, mas ainda não consegui descobrir. O array matrix contém strings. Já tentei colocar ## antes e depois de cada variável e até tentar converter para cdate().

Set rstProc = db.OpenRecordset("SELECT * FROM [CAMPANHA] WHERE CAMPANHA='" & matrix(iLinha, enCampanha) & _
"' AND DATA_INICIO='" & matrix(iLinha, enDataInicio) & "' AND DATA_FIM='" & matrix(iLinha, enDataFim) & "';")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta formatar a data para "mm-dd-yyyy" e usar Data_Inicio >= e Data_Fim <= (ou então usa Between)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está formatado dessa forma, num tratamento que faço antes deste passo. Cheguei até ao ponto de meter cstr(cdate(matrix(iLinha,iColuna))) nesse tratamento.

Por outro lado quero ver se existe um registo em que os campos CAMPANHA AND DATA_INICIO AND DATA_FIM igual ao que estão no array. Se existir não insiro um novo registo a partir do array. O problema está mesmo na conversão para data dos valores no array. deve faltar fazer algo naqela linha para dizer que aqueles valores tratam-se de uma data.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente o formato é:

"SELECT * FROM tabela WHERE Data BETWEEN #1/1/2009# AND #31/1/2009#"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas isso é quando só existe 1 campo data. Eu tenho 2 na tabela e quero comparar contra os 2 também 2 datas diferentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tenta lá colocar o formato da data dessa forma!

#31/1/2009#

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois assim de repente não posso...lol

Isso tá só no PC do trabalho. Amanhã exprimento, assim que possivel. Darei notícias.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, depois de aqui uma grande confusão e com o auxilio do contructor de sql do access, lá achei a solução.

Parece que o VBA é um bocado chato a tratar de datas em sql.

Tinhas razão no teu 1º post (no último deste a solução do standard para nós portugueses) , MM/DD/YYYY. Depois faltava-me certos pormenores, as peliculas (' ') nas datas não podem lá estar, e tem de se envolver as variáveis com ##, ou seja no meu código inicial, bastava substituir as peliculas por ##

Set rstProc = db.OpenRecordset("SELECT * FROM CAMPANHA WHERE CAMPANHA.CAMPANHA='" + matrix(iLinha, enCampanha) + "' AND DATA_INICIO=#" + matrix(iLinha, enDataInicio) + "# AND CAMPANHA.DATA_FIM=#" + matrix(iLinha, enDataFim) + "#;")

Como sempre, um obrigado pela ajuda e dísponibilidade Paulino.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Repara que lá em cima não coloquei as peliculas entre as datas. ;)

Ainda bem que está resolvido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora