INSERT INTO ok via ACCESS Too few parameter via ODBC

INSERT INTO ok via ACCESS Too few parameter via ODBC - SQL/NoSQL - Programmation

Marsh Posté le 14-01-2009 à 23:32:40    

Bonsoir à tous,
 
Je n'arrive pas à résoudre un problème et encore moins à le comprendre.
 
Je travaille avec Java et ACCESS, je crée une table et juste ensuite je fais un insert into (ou plutôt plusieurs dans une boucle FOR).
 
 
 

Code :
  1. try{
  2.         CalculHoraire calcHor = new CalculHoraire();
  3.         laDate = calcHor.stringToDate(jTextFieldLaDate.getText(), "yyyy-MM-dd" );
  4.             BufferedReader LecteurBufferise = null;
  5.             String ligneDonnee;
  6.             boolean eof = false;
  7.             try {
  8.               //Ouverture du Fichier
  9.               LecteurBufferise = new BufferedReader(new FileReader(nomFichierHoraireComplet));
  10.               String sql="";
  11.               try
  12.                 {
  13.                     //  Connect to the Database
  14.                     String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
  15.                     //String url = "jdbc:odbc:Teenergy";  // if using ODBC Data Source name
  16.                     String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+fichierDestination.getAbsolutePath();
  17.                     String userid = "";
  18.                     String password = "";
  19.                     Class.forName( driver );
  20.                     Connection connection = DriverManager.getConnection( url, userid, password );
  21.                     //  Read data from a table
  22.                     sql = "CREATE TABLE MaTable (" +
  23.                             "Code Char(4), " +
  24.                             "Sens Char(1), " +
  25.                             "Num Integer, " +
  26.                             "Hor Char(8))";
  27.                     Statement stmt = connection.createStatement();
  28.                     stmt.execute(sql);
  29.                     while (eof != true) {
  30.                         //Lecture de la ligne
  31.                         ligneDonnee = LecteurBufferise.readLine();
  32.                         if(ligneDonnee!=null)
  33.                         {
  34.                             String donneesLignes[] = ligneDonnee.split(";" );
  35.                             if(donneesLignes[1].compareTo(""+laLigne.trajet+"" )==0 && donneesLignes[0].charAt(0)==laLigne.sens)
  36.                             {
  37.                                     sql = "insert into DebutHoraire (Code, Sens, Num, Hor) " +
  38.                                             "values (" ;
  39.                                     sql += "\"" + laLigne.code + "\", ";
  40.                                     sql += "\'" + donneesLignes[0].charAt(0) + "\', ";
  41.                                     sql += donneesLignes[1] + ", ";
  42.                                     sql += "\'" + dateMAJ + "\')";
  43.                                    
  44.                                     stmt.execute(sql);
  45.                                 }
  46.                             }
  47.                         }else
  48.                         {
  49.                             eof=true;
  50.                         }
  51.                     stmt.close();
  52.                     jLabelErreurLaDate.setText("OK" );
  53.                 }
  54.                 catch(Exception e)
  55.                 {
  56.                     String erreur = e.toString() + " --- " + sql;
  57.                     jLabelErreurLaDate.setText(erreur);
  58.                 }
  59.             }
  60.             catch (FileNotFoundException ex) {
  61.               jLabelErreurLaDate.setText("Fichier Non Trouvé !!" );
  62.             }
  63.             catch (IOException ex) {
  64.               jLabelErreurLaDate.setText("Erreur lecture ligne fichier !!" );
  65.             }
  66.             finally {
  67.    try {
  68.     LecteurBufferise.close();
  69.    }catch (IOException ex1) {
  70.     jLabelErreurLaDate.setText("Erreur fermeture fichier !!" );
  71.    }
  72.   }
  73.     }catch(Exception e)
  74.     {
  75.         jLabelErreurLaDate.setText("Erreur : " + e.toString());
  76.     }


 
Toujours la même erreur.
Je me suis dit, faisons un copié-collé de la variable sql et lançons la "à la main" dans une requête depuis ACCESS, le résultat pourrait me donner plus d'informations. Et là, surprise, le tuple est ajouté.
Je me retrouve dans une situation qui me laisse très perplexe.
 
Je lance en mode debug.
Les champs sont bons, arrivé à la ligne

Code :
  1. stmt.execute(sql);


juste après

Code :
  1. sql += "\'" + dateMAJ + "\')";


Je me retrouve à

Code :
  1. String erreur = e.toString() + " --- " + sql;

et erreur contient

Code :
  1. "java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. --- insert into DebutHoraire (Code, Sens, Num, Hor) values ("17", 'A', 1, '06:57:00')"


 
 
Quelqu'un pourrait-il m'apporter son aide?
Merci d'avance

Reply

Marsh Posté le 14-01-2009 à 23:32:40   

Reply

Marsh Posté le 15-01-2009 à 09:26:54    

Une des grandes différences entre le SQL d'Access et les autres SQL est qu'en Access, les chaines de caractères sont entourées par des guillemets (" ), alors qu'en SQL, elles sont entourées par des apostrophes ('). Or les drivers ODBC utilisent généralement la syntaxe avec les apostrophes, même pour des entrées/sorties vers Access.
 
Ici, cela devrait aller mieux, si vous remplaciez "17" par '17'.

Reply

Marsh Posté le 15-01-2009 à 12:38:05    

olivthill a écrit :

Une des grandes différences entre le SQL d'Access et les autres SQL est qu'en Access, les chaines de caractères sont entourées par des guillemets (" ), alors qu'en SQL, elles sont entourées par des apostrophes ('). Or les drivers ODBC utilisent généralement la syntaxe avec les apostrophes, même pour des entrées/sorties vers Access.
 
Ici, cela devrait aller mieux, si vous remplaciez "17" par '17'.


Merci mille fois, c'était ça

Reply

Marsh Posté le 15-01-2009 à 12:48:02    

euh... les try/catch imbriqués, c'est fait exprès ? [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed