try{Stringsql="SELECT * FROM relatControleBancario WHERE horaData BETWEEN '"+tf_dataInicial.getText()+"' AND '"+tf_dataFinal.getText()+"'";con_relatControleBancario.executeSQL(sql);con_relatControleBancario.resultset.first();}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"erro de sql"+erro);}preencherGrade();//preenche fTable...com o resultado da pesquisasomaEntradas();//soma resultado da pesquisa somaRetiradas();//soma resultado da pesquisa
acredito que seja devido a questão de iniciar 123… tem que ser 0123…
Não consigo ver as imagens, mas dê uma olhada nos parâmetros que está passando, se não está occorrendo um problema de limites. Por exemplo, se você passar o inicio como 23/02/2010, e a data fim como 24/02/2010, o banco pode interpretar como 24/02/2010 00:00:00.000, quando na verdade você quer que ele cheque até 24/02/2010 23:59:59.999. Um relatório do meio dia dia 24 não apareceria no primeiro caso.
Z
Zillo
Concordo com o Bruno, já cai muito nessas…
pmlm
Mostra ai o preencherGrade. Talvez seja aquele con_relatControleBancario.resultset.first(); que esteja a mais.
L
leonardocp
publicvoidpreencherGrade(){jt_relatControleBancario.getColumnModel().getColumn(0).setPreferredWidth(40);jt_relatControleBancario.getColumnModel().getColumn(1).setPreferredWidth(40);jt_relatControleBancario.getColumnModel().getColumn(2).setPreferredWidth(40);jt_relatControleBancario.getColumnModel().getColumn(3).setPreferredWidth(40);jt_relatControleBancario.getColumnModel().getColumn(4).setPreferredWidth(40);DefaultTableModelmodelo=(DefaultTableModel)jt_relatControleBancario.getModel();modelo.setNumRows(0);try{while(con_relatControleBancario.resultset.next())modelo.addRow(newObject[]{con_relatControleBancario.resultset.getString("codigo"),con_relatControleBancario.resultset.getString("entradas"),con_relatControleBancario.resultset.getString("retiradas"),con_relatControleBancario.resultset.getString("operador"),con_relatControleBancario.resultset.getString("horaData")});con_relatControleBancario.executeSQL("SELECT * FROM relatControleBancario");con_relatControleBancario.resultset.first();//aqui ???}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Carregar Tabela"," .::S.A.F::. Informa",JOptionPane.ERROR_MESSAGE);}}
pmlm
Tal como eu suspeitava, estás a fazer first() e depois next(), e só depois é que tratas os valores do resultset. Ou seja, nunca vais apanhar a primeira linha.
Tira a linha con_relatControleBancario.resultset.first();
Scoobydoo
Uhum… é uma possibilidade…
Se você notar, a data 24 que não está aparecendo é do código 141 <- o Primeiro código que veio no seu select…
try
{
String sql="SELECT * FROM relatControleBancario WHERE horaData BETWEEN '"+tf_dataInicial.getText()+"' AND '"+tf_dataFinal.getText()+"'";
con_relatControleBancario.executeSQL(sql);
con_relatControleBancario.resultset.first(); // Esse aqui você tem que tirar
}
Esse first ali está indo para o 1º código(141)…
quando voce executa o procedimento seu select ja está na primeira linha…
Porém, voce da um resultset.next() > indo para a 2 linha(142)
E
entanglement
Uma vez recebi até um documento de um cliente nosso que indicava, entre as boas práticas de SQL, tomar cuidado com isso.
Como na base dele havia muitos campos de data (timestamp), era preciso sempre checar isso.
Como não havia transações que fossem exatamente às 00:00 no caso dele, ele simplesmente indicava que o “and” era para ser feito para o próximo dia, para simplificar e não precisar pôr “23:59:59.999”.
L
leonardocp
private void jb_pesquisarActionPerformed(java.awt.event.ActionEvent evt) {
try
{
String sql = "SELECT * FROM relatControleBancario WHERE horaData BETWEEN '"+jf_tf_dataInicial.getText()+"' AND '"+jf_tf_dataFinal.getText()+"'";
con_relatControleBancario.executeSQL(sql);
con_relatControleBancario.resultset.previous();//entendi a lógica, substitui por previous(), funcionou Beleza; obg Scoobydoo.
}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null,"erro de sql"+ erro);
}
preencherGrade();
somaEntradas();
somaRetiradas();
Obg a todos;
pmlm
Não tens de por previous. Simplesmente tira a linha.
L
leonardocp
simplismente retirei e não funcionou…que será???
pmlm
No preencherGrade estás a fazer uma query depois de adicionar as linhas à tabela.
Isso vai fazer com que os teus metodos somaEntradas() e somaRetiradas() dêem valores incorrectos com o resultado da pesquisa.
Para garantir que o resultSet está na posição correcta, e uma vez que o usas 3 vezes, faz um beforeFirst() antes de cada utilização (preencheGrade, somaEntradas e somaRetiradas)