cmd Posted March 30, 2012 at 03:35 PM Report #446626 Posted March 30, 2012 at 03:35 PM Boas a todos, Estou a tentar recolher os dados de uma BD SQL entre as datas (exemplo) 01-01-2012 e 02-01-2012 e estou a utilizar o BETWEEN. O problema é que ele retorna-me todas as datas entre 01 e 02 e ignora-me os restantes numeros. Como posso resolver? O campo data está como texto e não posso alterar a estrutura :s Cumps.cmd
ribeiro55 Posted March 30, 2012 at 03:52 PM Report #446632 Posted March 30, 2012 at 03:52 PM Se o campo é texto, não podes esperar milagres. Tens de fazer casts para data, mas é uma solução à lavrador... Para além disso, SQL usam todas, à partida. Especifica por favor. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 30, 2012 at 03:59 PM Author Report #446634 Posted March 30, 2012 at 03:59 PM E como deveria usar os casts? Cumps.cmd
ribeiro55 Posted March 30, 2012 at 04:00 PM Report #446635 Posted March 30, 2012 at 04:00 PM Qual é o SGBD ? Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 30, 2012 at 04:02 PM Author Report #446636 Posted March 30, 2012 at 04:02 PM MS Access Cumps.cmd
ribeiro55 Posted March 30, 2012 at 04:12 PM Report #446637 Posted March 30, 2012 at 04:12 PM Ui. Experimenta com o CDate. Algo como: SELECT bla bla bla FROM tabela WHERE CDate(a_tal_data) BETWEEN CDate(a_data_inicio) AND CDate(a_data_fim) Partindo do início que a data em texto está num formato que o CDate agarre. Isso já não te sei dizer porque não uso MSAccess assim tanto (leia-se nada) Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 30, 2012 at 08:46 PM Author Report #446717 Posted March 30, 2012 at 08:46 PM EDIT: Continua sem funcionar :s http://img685.imageshack.us/img685/9559/capturadeecr20120330s21.png Sugestões? Cumps.cmd
pmg Posted March 30, 2012 at 08:58 PM Report #446721 Posted March 30, 2012 at 08:58 PM Calcula ano*13*32 + mes*32 + dia para os tres valores relevantes. Depois faz o BETWEEN com base nesses calculos select ... where ... CALCULO1 between CALCULO2 and CALCULO3 ... Melhor ainda era alterar a base de dados ... ah ... espera ... pois 😉 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
cmd Posted March 30, 2012 at 09:03 PM Author Report #446724 Posted March 30, 2012 at 09:03 PM Calcula ano*13*32 + mes*32 + dia para os tres valores relevantes. Depois faz o BETWEEN com base nesses calculos select ... where ... CALCULO1 between CALCULO2 and CALCULO3 ... Melhor ainda era alterar a base de dados ... ah ... espera ... pois 😉 Não estou a perceber esses cálculos. Podias-me explicar melhor sff? Cumps.cmd
pmg Posted March 30, 2012 at 09:10 PM Report #446725 Posted March 30, 2012 at 09:10 PM Os calculos vao originar numeros sequenciais (com buracos) de acordo com as datas. Por exemplo para 29 de Fevereiro de 2012 2012*32*13 + 2*32 + 29 = 837085 1 de Marco de 2012 2012*32*13 + 3*32 + 1 = 837089 Como ves, 29 de fevereiro foi antes de 1 marco, e o calculo correspondente foi inferior ao de 1 de Marco 😉 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
cmd Posted March 30, 2012 at 09:12 PM Author Report #446726 Posted March 30, 2012 at 09:12 PM Os calculos vao originar numeros sequenciais (com buracos) de acordo com as datas. Por exemplo para 29 de Fevereiro de 2012 2012*32*13 + 2*32 + 29 = 837085 1 de Marco de 2012 2012*32*13 + 3*32 + 1 = 837089 Já percebi! Mas o formato da data na BD está, por exemplo, assim: 02-03-2012. Como vou conseguir fazer o between como os valores provenientes dos cálculos? Cumps.cmd
pmg Posted March 30, 2012 at 09:16 PM Report #446727 Posted March 30, 2012 at 09:16 PM Mas o formato da data na BD está, por exemplo, assim: 02-03-2012. Isolar partes dum texto, transformar essas partes em numeros ja nao sei fazer (em Access) ... mas nao me parece muito dificil. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
ribeiro55 Posted March 30, 2012 at 10:01 PM Report #446734 Posted March 30, 2012 at 10:01 PM Bem lembrado! Outra forma de fazer isso é simplesmente juntar os três elementos. Isto produz igualmente números que se podem comparar normalmente. 2012-02-29 = 20120229 2012-03-01 = 20120301 20120229 < 20120301 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 31, 2012 at 11:54 AM Author Report #446760 Posted March 31, 2012 at 11:54 AM Compreendo. Mas como transformo a data que vem da BD em números "corridos"? É que estou a buscar os dados e mostrar numa datagridview de uma aplicação em vb.net. Cumps.cmd
ribeiro55 Posted March 31, 2012 at 11:57 AM Report #446761 Posted March 31, 2012 at 11:57 AM SELECT bla bla bla FROM tabela WHERE REPLACE(a_tal_data,'-','') BETWEEN REPLACE(data_inicio,'-','') AND REPLACE(data_fim,'-','') Que talvez não funcione a menos que transformes os resultados dos replace em numero, com VAL() ou coisa parecida. VAL(REPLACE(data_inicio,'-','')) talvez... experimenta. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 31, 2012 at 12:07 PM Author Report #446762 Posted March 31, 2012 at 12:07 PM Dá-me este erro: A função "REPLACE" não está definida na expressão. Cumps.cmd
ribeiro55 Posted March 31, 2012 at 01:13 PM Report #446768 Posted March 31, 2012 at 01:13 PM Mostra lá a query toda. Experimenta antes mesmo no Access antes de tentares na aplicação. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 31, 2012 at 01:37 PM Author Report #446769 Posted March 31, 2012 at 01:37 PM sqlselect = "SELECT movimentacaoapara.ID, movimentacaoapara.data, movimentacaoapara.codfornecedor, movimentacaoapara.transportenr, movimentacaoapara.faturanr, movimentacaoapara.tipo, movimentacaoapara.pesoinicial, movimentacaoapara.pesolaboratorioI, movimentacaoapara.pesolaboratorioF, movimentacaoapara.humidade, movimentacaoapara.desconto, movimentacaoapara.pesofaturado, movimentacaoapara.preco, movimentacaoapara.valorfatura FROM movimentacaoapara WHERE codfornecedor='" & cbb_forns.Text & "' AND REPLACE(data,'-','') BETWEEN '" & datain & "' AND '" & datafim & "' ORDER BY ID DESC" Cumps.cmd
ribeiro55 Posted March 31, 2012 at 02:39 PM Report #446776 Posted March 31, 2012 at 02:39 PM Deveria ser: " AND VAL(REPLACE(data,'-','')) BETWEEN " & datain & " AND " & datafim & " ORDER BY ID DESC" Pressupondo que datain e datafim já se encontram no formato AAAAMMDD, sem hifens. Mas de acordo com o erro anterior, o problema parece-me outro. Alguém com mais experiência Access te dirá porque é que o replace não está a funcionar. Podes deixar, entretanto, qual é a versão do Access. Outra coisa, se só tens uma tabela no FROM, não precisas de a especificar em todas as colunas do Select... Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
cmd Posted March 31, 2012 at 04:53 PM Author Report #446794 Posted March 31, 2012 at 04:53 PM Deveria ser: " AND VAL(REPLACE(data,'-','')) BETWEEN " & datain & " AND " & datafim & " ORDER BY ID DESC" Pressupondo que datain e datafim já se encontram no formato AAAAMMDD, sem hifens. Mas de acordo com o erro anterior, o problema parece-me outro. Alguém com mais experiência Access te dirá porque é que o replace não está a funcionar. Podes deixar, entretanto, qual é a versão do Access. Outra coisa, se só tens uma tabela no FROM, não precisas de a especificar em todas as colunas do Select... Continua-me a dar o mesmo erro. O access é o 2010. Cumps.cmd
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