Busca - Select entre Datas - Access

6 respostas
J

Boa noite pessoa!!
Preciso fazer um select entre datas (PERIODOS) onde o usuario entra com a data inicial e data final e o sistema faz a busca e exibe em uma JTable, por enquanto estou usando o Access e o campo esta como Data/Hora, mas não consigo exibir os resultados e não dar nenhum erro, vejam o código do meu select:

sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN "+data_Inicial+" AND vencimento= "+data_Final;
            ResultSet rs = st.executeQuery(sql);

            DefaultTableModel mod = (DefaultTableModel) jTable1.getModel();
            mod.setNumRows(0);
            try {
               if(rs.next()){
                   do{
                    mod.addRow(new Object[]{rs.getString("codigo"),
                    rs.getInt("Titulo"),
                    rs.getDate("DataEmissao"),
                    rs.getDate("Vencimento"),
                    //rs.getDate("Vencimento"),
                    rs.getDouble("Valor"),
                    rs.getString("Parcelas"),
                    rs.getString("Tipo"),
                    rs.getDouble("Receber"),
                    rs.getDouble("Pagar"),
                    rs.getString("Situacao"),
                    rs.getString("DtaPagamento"),
                    rs.getString("descricao"),
                    rs.getString("Observacao")});
                   }
                while(rs.next());
            }

            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(this, "Erro ao listar na Grid " + erro.getMessage());
                try {
                    st.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Form_exibe_Relatorios.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        catch (SQLException ex) {
            Logger.getLogger(Form_exibe_Relatorios.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
O que será que pode esta dando errado?

6 Respostas

WRYEL
sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN '"+data_Inicial+"' AND vencimento= '"+data_Final+"'";

sua sintaxe: [color=red]WHERE vencimento BETWEEN valor1 AND valor2[/color]

ps: provavelmente se o access não fizer cast do texto data_inicial e data_final, você vai ter que fazer isso na unha.

J

Cara obrigasdo por responder tom rápido…vou corrigir e depois posto de novo…

J

Boa noite, eu até fiz do jeito que você me propós, veja:

String sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN '"+data_Inicial+"' AND vencimento= '"+data_Fina+"'"; ResultSet rs = st.executeQuery(sql);
porém quando rodo a query, ele não me traz as datas do mês completo, por exemplo:
se quero uma consulta de: 01/01/2012 até 31/01/2012 o sistema só exibe uma data: 01/01/2012
e não a do mês completo…
consegue entender este caso?
Grato…

J

Pessoal algum retorno?
Grato.

vinilima

Jose Edison:
Boa noite, eu até fiz do jeito que você me propós, veja:String sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN '"+data_Inicial+"' AND vencimento= '"+data_Fina+"'"; ResultSet rs = st.executeQuery(sql);

Continua errado, o correto é:String sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN '" + data_Inicial + "' AND '" + data_Final + "'";

J
Eu não entendo, fiz do mesmo jeito mas ainda continua dando errado, na consulta ele não me traz o resultado desejado: Exemplo: se digito a data de: 01/01/2012 até 30/01/2012 ele exibe até as datas mais antigas de 2011 mais não exibe as datas selecionadas do periodo que eu quero. vou posta até o código completo, veja:
SimpleDateFormat formata_data = new SimpleDateFormat("dd-MM-yyyy");
        String situacao = "Pago";
        JTableHeader titulos = jTable1.getTableHeader();
        //pinta o titulo do Grid de preto
        titulos.setForeground(Color.BLACK);
        Date data1 = DateChooserData_Inicial.getDate();
        Date data2 = DateChooserData_Final.getDate();
        
        String data_Inicial = formata_data.format(data1);
        String data_Final = formata_data.format(data2);
        try{
            Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            String sql = "SELECT * FROM ContaPagar WHERE vencimento BETWEEN '" + data_Inicial + "' AND '" + data_Final + "'";
            ResultSet rs = st.executeQuery(sql);

            DefaultTableModel mod = (DefaultTableModel) jTable1.getModel();
            mod.setNumRows(0);
            try {
               if(rs.next()){
                   do{
                    mod.addRow(new Object[]{rs.getString("codigo"),
                    rs.getInt("Titulo"),
                    rs.getString("DataEmissao"),
                    rs.getString("Vencimento"),
                    rs.getDouble("Valor"),
                    rs.getString("Parcelas"),
                    rs.getString("Tipo"),
                    rs.getDouble("Receber"),
                    rs.getDouble("Pagar"),
                    rs.getString("Situacao"),
                    rs.getString("DtaPagamento"),
                    rs.getString("descricao"),
                    rs.getString("Observacao")});
                   }
                while(rs.next());
                   
            }
                
            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(this, "Erro ao listar na Grid " + erro.getMessage());
                try {
                    st.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Form_exibe_Relatorios.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        catch (SQLException ex) {
            Logger.getLogger(Form_exibe_Relatorios.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
Aguardo retorno e muito obrigado.
Criado 16 de janeiro de 2012
Ultima resposta 27 de jan. de 2012
Respostas 6
Participantes 3