Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1746 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  INSERT INTO ok via ACCESS Too few parameter via ODBC

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

INSERT INTO ok via ACCESS Too few parameter via ODBC

n°1838030
SangJun
Posté le 14-01-2009 à 23:32:40  profilanswer
 

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

mood
Publicité
Posté le 14-01-2009 à 23:32:40  profilanswer
 

n°1838074
olivthill
Posté le 15-01-2009 à 09:26:54  profilanswer
 

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'.

n°1838246
SangJun
Posté le 15-01-2009 à 12:38:05  profilanswer
 

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

n°1838253
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-01-2009 à 12:48:02  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  INSERT INTO ok via ACCESS Too few parameter via ODBC

 

Sujets relatifs
[ACCESS]Difficulté d'execution d'une requete[ACCESS / Requêtes SQL] Help !
Requette Select dans VB et ACCESSCase à cocher dans Access 2003
[mySQL] Grant insert & Temporary table[ACCESS] Problème requête et valeur par défaut
Gestion de saut de page ACCESS/VBA[Access/MCD]
base access verouiller avec macrosSyntaxe INSERT INTO
Plus de sujets relatifs à : INSERT INTO ok via ACCESS Too few parameter via ODBC


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR