Erro: java.lang.String cannot be cast to java.util.Date (RESOLVIDO)

19 respostas
AlisonTI

Pessoal, tou precisando de uma forma. Sou iniciante em java e esbarrei num problema aqui numa aplicaçãozinha e tá me dando dor de cabeça.

É o seguinte: tenho um arquivo AtaBean e outro AtaDAO, nesse Bean tenho dois campos do tipo Date (sql.date)

import java.sql.Date;
import java.sql.Time;

public class AtaBean {
    
    private int cod_ata;
    private int condominio_cod_cond;
    private String numero_ata;
    private String assunto_ata;
    private Date data_reuniao;
    private Time hora_reuniao;
    private Date data_registro;
    private String texto_ata;
E no no AtaDAO eu seto esse campos:
public void cadastrarAta(AtaBean b){
        try {
            pstm = (PreparedStatement) mysql.conectar().prepareStatement(cadastraAta);
            pstm.setInt(1, b.getCondominio_cod_cond());
            pstm.setString(2, b.getNumero_ata());
            pstm.setString(3, b.getAssunto_ata());
            pstm.setDate(4, b.getData_reuniao());
            pstm.setTime(5, b.getHora_reuniao());;
            pstm.setDate(6, b.getData_registro());
            pstm.setString(7, b.getTexto_ata());
            pstm.executeUpdate();
            mysql.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(AtaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Aí tenho outro arquivo o AtaView (JFrame) que recebe os dados para colocar no banco de dados (mysql):

private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {     
        SimpleDateFormat formatarData = new SimpleDateFormat("yyyy-MM-dd");                                    
        java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();
        java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue();

        bean = new AtaBean();
        dao = new AtaDAO();
        if (!"".equals(txtCodigo.getText())) { //verifica se o campo código é vazio, se for o botão salvar funciona como inserção, senão, como alteração
            if (validaDados()) {
                bean.setCondominio_cod_cond(Integer.parseInt(txtCodCondominio.getText().trim()));
                bean.setNumero_ata(txtNumeroAta.getText().trim());
                bean.setAssunto_ata(txtAssunto.getText().trim());
                bean.setData_reuniao(Date.valueOf(formatarData.format(dataReuniao)));
                bean.setHora_reuniao(Time.valueOf(txtHoraReuniao.getText().trim()));
                bean.setData_registro(Date.valueOf(formatarData.format(dataRegistro)));
                bean.setTexto_ata(txtConteudo.getText().trim());
                //recebe o código para fazer a alteração
                bean.setCod_ata(Integer.parseInt(txtCodigo.getText().trim()));
                dao.alterarAta(bean);
                JOptionPane.showMessageDialog(null, "Registro alterado com sucesso!");
                limpaDados();
                jScrollPane1.setVisible(true);
                PanelPesquisar.setVisible(true);
                PanelCentralDados.setVisible(false);
                txtPesquisar.requestFocus();
                verificaBotoes();
                limparPesquisaActionPerformed(null);
            }
        } else {
            if (validaDados()) {
                bean.setCondominio_cod_cond(Integer.parseInt(txtCodCondominio.getText().trim()));
                bean.setNumero_ata(txtNumeroAta.getText().trim());
                bean.setAssunto_ata(txtAssunto.getText().trim());
                bean.setData_reuniao(Date.valueOf(formatarData.format(dataReuniao)));
                bean.setHora_reuniao(Time.valueOf(txtHoraReuniao.getText().trim()));
                bean.setData_registro(Date.valueOf(formatarData.format(dataRegistro)));
                bean.setTexto_ata(txtConteudo.getText().trim());
                dao.cadastrarAta(bean);
                JOptionPane.showMessageDialog(null, "Registro incluído com sucesso!");
                limpaDados();
                jScrollPane1.setVisible(true);
                PanelPesquisar.setVisible(true);
                PanelCentralDados.setVisible(false);
                txtPesquisar.requestFocus();
                verificaBotoes();
                limparPesquisaActionPerformed(null);
            }
        }
    }

A máscara é essa:

private void mascaras() {
        try {
            txtDataReuniao.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
            txtDataRegistro.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
            txtHoraReuniao.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##:##:##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
    }
Só que quando executo o programa as máscaras funcionam belezinha, mas na hora de salvar dá o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
	at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:597)
	at br.com.syndic.view.AtaView.access$700(AtaView.java:29)
	at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:416)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2879)
	at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306)
	at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250)
	at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2963)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2842)
	at java.awt.Component.processEvent(Component.java:6281)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4860)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717)
	at java.awt.Component.dispatchEventImpl(Component.java:4730)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Isso tá me dando uma dor de cabeça enorme porque se eu tirar as máscaras das datas funciona beleza, só que aí fica muito deselegante e ruim um sistema sem máscaras.

Alguém pode me ajudar?

PS.: Desculpem o tamanho do post, mas eu queria detalhar bem. Outra coisa, encontrei alguns fóruns por aqui como [url]http://www.guj.com.br/java/256526-erro-javautildate-cannot-be-cast-to-javasqldateresolvido[/url], mas não resolveu o meu caso.

19 Respostas

yhhik

dei uma olhada rápida no seu código…
posso ta errado mas não achei nenhuma linha convertendo util.date em sql.date.

AlisonTI

Já tentei fazer isso com essas linhas java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue(); java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue();

Só não sei se funciona.

O que me intriga é que se eu tirar as máscaras funciona perfeito o sistema. :frowning:

yhhik

tente assim:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date dataReuniao = (Date)formatter.parse(txtDataRegistro.getText());

AlisonTI

Fiz essas alterações e agora consegui incluir o registro (salvar), porém as datas não foram salvas, apareceu o seguinte erro:

Jan 06, 2012 12:58:46 AM br.com.syndic.view.AtaView btSalvarActionPerformed Grave: null java.text.ParseException: Unparseable date: "05/01/2012" at java.text.DateFormat.parse(DateFormat.java:357) at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:605) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:420) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971) at javax.swing.JComponent.processKeyBindings(JComponent.java:2963) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717) at java.awt.Component.dispatchEventImpl(Component.java:4730) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

J

Pelo que vi, você está pegando as Strings dos campos abaixo, porém elas estão vindo fora da formatação que você definiu para a data.

java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();  
java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue();
//Formatação da data  yyyy-MM-dd
SimpleDateFormat formatarData = new SimpleDateFormat("yyyy-MM-dd");

Verifique o que o campo de texto está retornando, coloque um:

System.out.println(txtDataRegistro.getValue());
yhhik

isso tem que ta igual sua mascara

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

se sua mascara está assim ##/##/####…o SimpleDateFormat tbm tem que tá.

AlisonTI

Eu modifiquei para o jeito que tá a mascara “##/##/####”, mas deu o mesmo erro:

Jan 06, 2012 1:15:51 AM br.com.syndic.view.AtaView btSalvarActionPerformed null Grave: null java.text.ParseException: Unparseable date: "03/03/2011" null at java.text.DateFormat.parse(DateFormat.java:357) at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:603) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:418) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6269) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

AlisonTI

O problema tá aqui:

try { dataRegistro = (Date)formatter.parse(txtDataRegistro.getText()); dataReuniao = (Date)formatter.parse(txtDataRegistro.getText()); } catch (ParseException ex) { Logger.getLogger(AtaView.class.getName()).log(Level.SEVERE, null, ex); }

Pois elas tão dando erro e tá entrando no meu banco o valor de inicialização das variáveis que é null;

J

AlisonTI,

Tente colocar assim:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

Eu não me lembro bem como são os formatos de datas, mas verifique na Internet.

AlisonTI

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:603) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:418) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971) at javax.swing.JComponent.processKeyBindings(JComponent.java:2963) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281)

AlisonTI

Eu dei um system.out. antes de converter as strings para ver como estão vindo e o valor tá vindo correto (03/03/2011)

03/03/2011 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:606)

J

Tente:

java.sql.Date dataSql1 = new java.sql.Date(dataRegistro.getTime());
java.sql.Date dataSql2 = new java.sql.Date(dataReuniao.getTime());
AlisonTI

Incluo esse código aonde, Jonathan_Sales ?

J

Você pode inserir após:

java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();  
java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue(); 

java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());  
java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime());

E passar como parâmetro para seu bean:

bean.setData_reuniao(dataReuniao_Sql);  

bean.setData_registro(dataRegistro_Sql);

Verifique se dá certo, pois faz tempo que eu não utilizo datas.

AlisonTI

puts, mesmo erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:598) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:420) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

J

Você colocou o formatter?

java.util.Date dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue());    
java.util.Date dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue());   
  
java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());    
java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime());
AlisonTI
no suitable method found for parse(java.lang.Object)
    method java.text.DateFormat.parse(java.lang.String,java.text.ParsePosition) is not applicable
      (actual and formal argument lists differ in length)
    method java.text.DateFormat.parse(java.lang.String) is not applicable
      (actual argument java.lang.Object cannot be converted to java.lang.String by method invocation conversion)
----
(Alt-Enter mostra dicas)
J

Tente:

java.util.Date dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue().toString());      
java.util.Date dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue().toString());
AlisonTI

Conseguiiiiiiiiiiiii!!!!!!!!! uhhuhuh, hehehe.

Jonathan_Sales, valeu mesmo consegui com o seguinte código:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        
        java.util.Date dataRegistro = null;  
        java.util.Date dataReuniao = null;
        try {
            dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue().toString());
            dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue().toString()); 
        } catch (ParseException ex) {
            Logger.getLogger(AtaView.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());      
        java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime());

Cara, valeu mesmo já tava perdendo as esperanças.

Obg também yhhik pela ajuda.

Tou bastante impressionado com o fórum é a primeira vez que uso e com poucos minutos teve a primeira resposta até que eu encontrei a solução. GUJ realmente está de parabéns.

Criado 5 de janeiro de 2012
Ultima resposta 6 de jan. de 2012
Respostas 19
Participantes 3