MetalFatigue Posted April 1, 2009 at 05:25 PM Report #254462 Posted April 1, 2009 at 05:25 PM 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) & "';")
jpaulino Posted April 1, 2009 at 05:29 PM Report #254464 Posted April 1, 2009 at 05:29 PM Tenta formatar a data para "mm-dd-yyyy" e usar Data_Inicio >= e Data_Fim <= (ou então usa Between)
MetalFatigue Posted April 1, 2009 at 10:13 PM Author Report #254583 Posted April 1, 2009 at 10:13 PM 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.
jpaulino Posted April 1, 2009 at 10:16 PM Report #254584 Posted April 1, 2009 at 10:16 PM Normalmente o formato é: "SELECT * FROM tabela WHERE Data BETWEEN #1/1/2009# AND #31/1/2009#"
MetalFatigue Posted April 1, 2009 at 10:20 PM Author Report #254586 Posted April 1, 2009 at 10:20 PM 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.
jpaulino Posted April 1, 2009 at 10:23 PM Report #254587 Posted April 1, 2009 at 10:23 PM Mas tenta lá colocar o formato da data dessa forma! #31/1/2009#
MetalFatigue Posted April 1, 2009 at 10:26 PM Author Report #254589 Posted April 1, 2009 at 10:26 PM Pois assim de repente não posso...lol Isso tá só no PC do trabalho. Amanhã exprimento, assim que possivel. Darei notícias. Cumprimentos
MetalFatigue Posted April 2, 2009 at 09:57 AM Author Report #254675 Posted April 2, 2009 at 09:57 AM 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.
jpaulino Posted April 2, 2009 at 10:06 AM Report #254679 Posted April 2, 2009 at 10:06 AM Repara que lá em cima não coloquei as peliculas entre as datas. 😉 Ainda bem que está resolvido!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now