Java.util.date x access

9 respostas
tandrade

Caros colegas,

Estou com uma situação um tanto quanto incomoda. Me ocorre o seguinte, tenho um código de atualizaçã de um BD no access, no qual estou utilizando sql para realizar seus updates, até ai tudo bem. Consigo atualizar a tabela plenamente, com diversos dados, no entando quando instancio um objeto Date e tento passá-lo dentro do SQL para minha tabela me gera a exceção:

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na instrução UPDATE.

Segue o código:

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        progressBar.setIndeterminate(true);
        Thread tThread = new Thread(new Runnable() {
            public void run() {
                SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss");
                TimeZone.setDefault( TimeZone.getTimeZone("GMT-03:00"));
                try{
                    ConexaoGraficos con = new ConexaoGraficos();
                    Statement st = con.conexao.createStatement();
                    PreparedStatement ps = con.conexao.prepareStatement("UPDATE tabelaGraficos SET GERAL=?, TOTE=?, CNPE=?, CPRE=?, CEQE=?, TOTC=?, CNPC=?, CPRC=?, CEQC=?, UPDATE=? WHERE MES=?");
                    ps.setString(1, mediaTotal.getText());
                    ps.setString(2, mediaEscritorioValor.getText());
                    ps.setString(3, mediaEscritorioValorCNP.getText());
                    ps.setString(4, mediaEscritorioValorCPR.getText());
                    ps.setString(5, mediaEscritorioValorCEQ.getText());
                    ps.setString(6, mediaCampoValor.getText());
                    ps.setString(7, mediaCampoValorCNP.getText());
                    ps.setString(8, mediaCampoValorCPR.getText());
                    ps.setString(9, mediaCampoValorCEQ.getText());
                    ps.setString(10, data.format(new Date()));
                    ps.setString(11, cbFiltro2.getSelectedItem().toString());
                    ps.executeUpdate();
                } catch(Exception e){
                    System.out.println(e);
                }
                setCursor(null);
                progressBar.setIndeterminate(false);
            }
        });
        tThread.start();

Já formatei o campo UPDATE como “texto” e como “data/hora” no Access e nada :confused:

Obrigado.

9 Respostas

tandrade

acho que nao, pq o objeto precisa ser formatado p aparecer alguma coisa não?

tandrade

??

netShot

Faz o seguinte teste :

SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");  
System.out.println(data.format(new Date()));  //Imprime a data atual
System.out.println(data.format(new Date()).length()); // Tamanho 10

e

SimpleDateFormat data = new SimpleDateFormat("");  
System.out.println(data.format(new Date())); // Não imprime nada
System.out.println(data.format(new Date()).length()); // Tamanho 0

O exemplo acima é simplezinho, mas, acho que responde sua pergunta acima

Agora quanto a trabalhar com datas no access tente :

UPDATE tabela SET campo_data = CDate(DateSerial(ano,mes,dia))

Aqui comigo funciona normal utilizando essa maneira.

tandrade

netShot:
Faz o seguinte teste :

SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");  
System.out.println(data.format(new Date()));  //Imprime a data atual
System.out.println(data.format(new Date()).length()); // Tamanho 10

e

SimpleDateFormat data = new SimpleDateFormat("");  
System.out.println(data.format(new Date())); // Não imprime nada
System.out.println(data.format(new Date()).length()); // Tamanho 0

O exemplo acima é simplezinho, mas, acho que responde sua pergunta acima

Agora quanto a trabalhar com datas no access tente :

UPDATE tabela SET campo_data = CDate(DateSerial(ano,mes,dia))

Aqui comigo funciona normal utilizando essa maneira.

Pois é, eu já fiz isso anteriormente :slight_smile:

tandrade

estou usando PS

ja li alguns tutoriais aqui passando data para o access mas nenhum com prepared statement :confused:

netShot

Veja, você tem 2 UPDATE na instrução SQL.

Para que a instrução funcione corretamente é necessario informar que o segundo update
trata-se de um campo e não de uma palavra reservada.

Só pra ilustrar melhor a instrução SQL, tente trocar ela para isso :

UPDATE tabelaGraficos 
				SET 
					tabelaGraficos.GERAL=?, 
					tabelaGraficos.TOTE=?, 
					tabelaGraficos.CNPE=?, 
					tabelaGraficos.CPRE=?, 
					tabelaGraficos.CEQE=?, 
					tabelaGraficos.TOTC=?, 
					tabelaGraficos.CNPC=?, 
					tabelaGraficos.CPRC=?, 
					tabelaGraficos.CEQC=?, 
					tabelaGraficos.UPDATE=? 
				WHERE 
					tabelaGraficos.MES=?
tandrade

mas eu informei :slight_smile:

tandrade

Resolvi! :slight_smile:

PreparedStatement ps = con.conexao.prepareStatement("UPDATE tabelaGraficos SET GERAL=?, TOTE=?, CNPE=?, CPRE=?, CEQE=?, TOTC=?, CNPC=?, CPRC=?, CEQC=?, UPDATE=? WHERE MES=?");

o problema é que utilizei em minha tabela no access uma coluna nomeada UPDATE!!! Dai por isso acusava o erro na expressão SQL :slight_smile:

Simplesmente alterei o nome da coluna para “ATUALIZADO”

a persistencia prevalece!

Obrigado a todos pela atenção.

3rd_child

Iae tandrade!!

Na linha 05 vc cria o objeto data, mas não aplica a formatação, por isso o erro.

Faça assim:

SimpleDateFormat data = new SimpleDateFormat("");
data.format(new Date());

Outra dica é usar java.sql.Timestamp em vez de java.util.Date, ocorre vários problemas na hora de trabalhar com datas usando Date.

Até mais!

Criado 6 de maio de 2008
Ultima resposta 6 de mai. de 2008
Respostas 9
Participantes 3