Estou com o seguinte problema,
criei uma tela onde o cliente tem para preencher as informações sobre o serviço prestado.
Cada serviço exige uma tela.
Ao fim do dia o cliente quer saber qual foi o balanço.
Pensei em criar uma outra tabela no bd, que só salvasse o dia e o total dele.
Mas como eu faria a rotina pra gerar esse cálculo?
Pensei em fazer algo do gênero:
String data, dia, mes, ano;
data=txtData.getText();
dia=data.substring (0,2);
mes=data.substring(3,5);
ano=data.substring(6,10);
Double Diario, Total;
Diario=0.0;
Total = 0.0;
try{
Diaria.executarSQL("select * from controledia order by dataAtend where dataAtend="+ano+mes+ano);
do{
String total, diario;
total=Diaria.resultset.getString("total");
Total=Double.parseDouble(total);
Diario=Diario+Total;
}while(Diaria.resultset.next());
}
catch(Exception erro){
JOptionPane.showMessageDialog(null,"Não deu pra calcular");
}
try{
String sql = "UPDATE totalDia SET total ='"+Total+"',"+
" where data = '"+ano+mes+dia+"';";
ASD.statement.executeUpdate(sql);
JOptionPane.showMessageDialog(null,"Atualizado corretamente");
}catch (Exception erro){
try{
String novoSql = "INSERT into totaldia (dia, total) VALUES " +
"'"+ano+mes+dia+"', '"+Total+"';";
ASD.statement.executeUpdate(novoSql);
JOptionPane.showMessageDialog(null,"Valor Calculado");
}catch(Exception erro2){
JOptionPane.showMessageDialog(null,"Erro ao gerar relatório!");
}
}
Mas já na confecção do código está dando erro, pois acredito que os objetos criados no laço Do não estejam disponíveis para o try seguinte.
Alguém poderia me dar uma luz?
Exatamente como você falou, o que é criado dentro do bloco do só pode ser acessado dentro do bloco do.
Então basta mover a linha String total, diario; pra fora do bloco do =]
E atenção as nomenclaturas, porque total é diferente de Total.
acbucard
Sim calel, obrigada pelas dicas, mas quando eu tirar a linha String eu estarei criando as variáveis fora, mas os valores atribuídos dentro do Do tbm serão mantidos?
E sobre a diferença na nomenclatura, é que o total é String e o Total é Double. =D
Grata
calel
Sim, os valores serão mantidos.
As alterações nessas variaveis serão mantidas enquanto elas estiverem “vivas”, ou seja, se você as cria dentro do bloco Do, seus valores estarão disponiveis apenas no bloco Do, se cria-las no bloco try, apenas no bloco try e assim por diante.
acbucard
Continua dando erro! :cry:
Meu código está assim:
try{
Diaria.executarSQL("select * from controledia where dataAtend="+ano+"-"+mes+"-"+dia);
do{
total=Diaria.resultset.getString("totalS");
Total=Double.parseDouble(total);
Diario=Diario+Total;
}while(Diaria.resultset.next());
}
catch(Exception erro){
JOptionPane.showMessageDialog(null,"Não deu pra calcular");
}
try{
String novoSql = "INSERT if not exists into totaldia (dia, total) VALUES " +
"'"+ano+mes+dia+"', '"+Total+"';";
ASD.statement.executeUpdate(novoSql);
}catch (Exception erro){
try{
String sql = "UPDATE totalDia SET total ='"+Total+"',"+
" where data = '"+ano+mes+dia+"';";
ASD.statement.executeUpdate(sql);
JOptionPane.showMessageDialog(null,"Atualizado corretamente");
JOptionPane.showMessageDialog(null,"Valor Calculado");
}catch(Exception erro2){
JOptionPane.showMessageDialog(null,"Erro ao gerar relatório!");
}
}
relatorio.totalDia.lblData.setText(txtData.getText());
new relatorio.totalDia();
Eu uso uma classe pra montar o relatório, só que está dando o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Consultar.FrmRelDia.btnConsultarActionPerformed(FrmRelDia.java:166)
Uma variavel null na linha 166 da classe FrmRelDia
acbucard
Na linha 166 está:
Que é uma label que eu criei “na marra” numa classe para que pudesse receber o valor da data digitado pelo usuário e lá pudesse servir de parâmetro para a geração do relatório.
Estou usando o iReport, eu sei que ele tem parâmetros, só que a data usada no banco é do tipo yyyy-MM-dd e eu não queria que o usuário precisasse digitar assim.
calel
Dá uma olhada em SimpleDateFormat, como o nome diz, é bem simples de alterar a formatação de datas.