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

MetalFatigue

SQL com Data

Recommended Posts

MetalFatigue

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) & "';")

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
MetalFatigue

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.

Share this post


Link to post
Share on other sites
jpaulino

Normalmente o formato é:

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

Share this post


Link to post
Share on other sites
MetalFatigue

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.

Share this post


Link to post
Share on other sites
MetalFatigue

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

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

Cumprimentos

Share this post


Link to post
Share on other sites
MetalFatigue

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.

Share this post


Link to post
Share on other sites
jpaulino

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

Ainda bem que está resolvido!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.