Bom Dia!!!
É o seguinte, realizei um código em JAVA (eclipse) para entre outras coisas inserir dados numa base de dados de um programa que vem em access 97. O que acontece é que eu tenho uma versão do office de 2007, e quando faço a ligação à base de dados, dá-me erro : “[Microsoft][Controlador Microsoft Access de ODBC] A operação tem que utilizar uma consulta actualizavel”.
Qual a solução para o meu problema???
Obrigada
Tente assim:
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
public class MyConnection {
public static Connection getConnection(String caminhoArquivoBD) throws Exception {
Driver d = (Driver) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+caminhoArquivoBD);
return c;
}
}
Espero ter ajudado.
Abraço!
Se eu converter a base de dados para 2007 consigo fazer o insert, mas depois o programa não consegue ler.
Eu coloquei o código que me indicou, mas dá novo erro: “[Microsoft][Gestor de controladores de ODBC] Atributo de cadeia de ligação inválido”
Obrigada por ter respondido
Verifique se o arquivo não está em modo somente leitura.
Tente verificar se o caminho do banco de dados está correto.
Qualquer coisa poste seu código para que possamos tentar te ajudar melhor.
Abraço!
package msi;
import java.io.*;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Driver;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Open extends Thread
{
public static void lerficheiro(){
ArrayList<String> a= new ArrayList <String>();
String linha = null;
try {
File f = new File("c:/msi");
File[] lista = f.listFiles();
for(File arquivo : lista) {
//System.out.println(arquivo.getAbsolutePath());
if (arquivo.length() > 1000)
arquivo.delete();
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);
while ((linha = leitor.readLine()) != null) {
StringTokenizer st;
st = new StringTokenizer(linha, "\t");
String t = "<CR>";
Pattern p = Pattern.compile(t);
Matcher m = p.matcher(linha);
while (m.find()) {
String x = arquivo.getPath();
System.out.println("" + x);
System.out.println(m.group());
BufferedReader rd = new BufferedReader(new FileReader(x));
LineNumberReader lineNumberReader = new LineNumberReader(rd);
String id = null;
String nome = null;
String prim = null;
String ult = null;
String dn = null;
String ano = null;
String mes = null;
String dia = null;
String fimdn = null;
String fimdt = null;
String fimt = null;
int sex = 0;
String nr = null;
String sala = null;
String mod = null;
String sd = null;
String dat = null;
String tim = null;
String hora = null;
String min = null;
String seg = null;
Date data = null;
Pattern pattern = Pattern.compile("(.+) <([^>]+)>");
String line;
while ((line = lineNumberReader.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
String chave = matcher.group(1); //lê a 1ª coluna
System.out.println(chave);
String valor = matcher.group(2); //lê a 2ª coluna
System.out.println(valor);
if (chave.equals("PATIENT_ID")) {
id = valor;
} else if (chave.equals("PATIENT_NAME")) {
nome = valor;
int cont = nome.split(" ").length;
String s[] = nome.split("\ ");
prim = s[0];
ult = s[cont-1];
System.out.println(ult);
} else if (chave.equals("PATIENT_BIRTH_DATE")) {
dn = valor;
char[] letras = dn.toCharArray();
char primeira = dn.charAt(0);
char segunda = dn.charAt(1);
char terceira = dn.charAt(2);
char quarta = dn.charAt(3);
char priseg = dn.charAt(4);
char segseg = dn.charAt(5);
char priter = dn.charAt(6);
char segter = dn.charAt(7);
ano = (""+primeira+""+segunda+""+terceira+""+quarta+"");
mes = (""+priseg+""+segseg+"");
dia = (""+priter+""+segter+"");
fimdn = (""+dia+"-"+mes+"-"+ano+"");
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
data = new java.sql.Date(format.parse(fimdn).getTime());
} else if (chave.equals("PATIENT_SEX")){
if (valor.equals("M")){
sex = 0;
}
else if (valor.equals("F")){
sex = 1;
}
System.out.println(sex);
} else if (chave.equals("STUDY_ID")){
nr = valor;
} else if (chave.equals("SCHEDULED_STUDY_RESOURCE")){
sala = valor;
} else if (chave.equals("MODALITY")){
mod = valor;
} else if (chave.equals("STUDY_DESCRIPTION")){
sd = valor;
} else if (chave.equals("SCHEDULED_STUDY_START_DATE")){
dat = valor;
char[] letras = dat.toCharArray();
char primeira = dat.charAt(0);
char segunda = dat.charAt(1);
char terceira = dat.charAt(2);
char quarta = dat.charAt(3);
char priseg = dat.charAt(4);
char segseg = dat.charAt(5);
char priter = dat.charAt(6);
char segter = dat.charAt(7);
ano = (""+primeira+""+segunda+""+terceira+""+quarta+"");
mes = (""+priseg+""+segseg+"");
dia = (""+priter+""+segter+"");
fimdt = (""+dia+"-"+mes+"-"+ano+"");
} else if (chave.equals("SCHEDULED_STUDY_START_TIME")){
tim = valor;
char[] letras = tim.toCharArray();
char primeira = tim.charAt(0);
char segunda = tim.charAt(1);
char priseg = tim.charAt(2);
char segseg = tim.charAt(3);
char priter = tim.charAt(4);
char segter = tim.charAt(5);
hora = (""+primeira+""+segunda+"");
min = (""+priseg+""+segseg+"");
seg = (""+priter+""+segter+"");
fimt = (""+hora+":"+min+":"+seg+"");
}
}
}
String caminho = "C:/Program Files/PTW/DataBase/user.mdb";
Driver d = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:odbc:Driver = {Microsoft Access Driver (*.mdb)} DBQ = " + caminho);
Statement stm = con.createStatement();
stm.executeUpdate("INSERT INTO PatientData (Id, Surname, [First Name], [Date Of Birth], Sex) VALUES ('"+nr+"','"+ult+"','"+prim+"','"+fimdn+"',"+sex+")");
// arquivo.delete();
con.close();
rd.close();
} //end while
} //end while
reader.close();
// arquivo.delete();
} //end for
mostrar(a);
} catch (Exception e) { //end try
e.printStackTrace();
} //end catch
} //end lerficheiro
public static void mostrar(ArrayList <String> b)
{
for (int i=0; i<b.size(); i++)
{
System.out.println(b.get(i));
}
}
/*public void run() {
while(true){
try{
lerficheiro();
Thread.sleep(120000); // refaz o ciclo após 2 minutos (120000 milissegundos)
}catch(InterruptedException e){
e.printStackTrace( System.err );
}
}
}*/
public static void main(String[] args){
lerficheiro();
}
}
o código é este!!!
em relação há base de dados ela não está restrita a leitura!
Mais uma vez obrigada
Do jeito que você me passou, realmente não consegui conectar…
Mas aí vi como você está criando a conexão e mudei para conseguir conectar…
Nesta linha você está tentando se conectar assim:
Connection con = DriverManager.getConnection("jdbc:odbc:Driver = {Microsoft Access Driver (*.mdb)} DBQ = " + caminho);
Mudei para:
Connection c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + caminho);
Repare no excesso de espaços e também na falta do ‘;’ antes de ‘DBQ’.
Verifique isso e poste os resultados.
Do jeito que te passei funcionou normalmente.
Espero ter ajudado.
Abraço!
Agradeço imenso a sua ajuda, mas continua a surgir o erro de que a operação tem que utilizar uma consulta actualizavel :?
Acho que a forma como você está fazendo o insert não deve estar correta, você pode me passar a estrutura dessa tabela do banco de dados?
Já consegui
mto mto mto obrigada!!!
Era sim um erro num insert, estava colocando um valor numerico num local de texto.
Mais uma vez mto obrigada por tudo
Imaginei mesmo…
heheheh
Por nada.
Coloca ‘[RESOLVIDO]’ no título do tópico.
Abraço!