INSERT INTO ok via ACCESS Too few parameter via ODBC

Frederick_Etudiant Messages postés 17 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 14 janvier 2009 - 13 janv. 2009 à 00:05
Frederick_Etudiant Messages postés 17 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 14 janvier 2009 - 14 janv. 2009 à 22:27
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).

La création de la table se passe bien, mais ensuite impossible de faire l'insert into et je me retrouve avec l'exception : java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

Je ne vois pas où est le problème puisque ma table est de type : CREATE TABLE MaTable (Code Char(4), Sens Char(1), Num Integer, Horaire Char(8)) et ma requête insert into MaTable values ("17", 'A', 1, "06:57:00").
A la base le dernier champ était de type Date, j'ai mis un Char(8) dans le cas où le format de la date est erroné (si tout fonctionne, je remettrais en Date et je verrais si cela est correct).

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.

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

1 réponse

Frederick_Etudiant Messages postés 17 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 14 janvier 2009
14 janv. 2009 à 22:27
Vu l'absence de réponse, je vais donner un peu plus d'information.

Bon je vais donner plus de code en le modifiant un peu

    try{
        CalculHoraire calcHor = new CalculHoraire();
        laDate = calcHor.stringToDate(jTextFieldLaDate.getText(), "yyyy-MM-dd");
            BufferedReader LecteurBufferise = null;
            String ligneDonnee;
            boolean eof = false;
            try {

              //Ouverture du Fichier
              LecteurBufferise = new BufferedReader(new FileReader(nomFichierHoraireComplet));
              String sql="";

              try
                {
                    //  Connect to the Database
                    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
                    //String url = "jdbc:odbc:Teenergy";  // if using ODBC Data Source name
                    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+fichierDestination.getAbsolutePath();
                    String userid = "";
                    String password = "";

                    Class.forName( driver );
                    Connection connection = DriverManager.getConnection( url, userid, password );

                    //  Read data from a table

                    sql = "CREATE TABLE MaTable (" +
                            "Code Char(4), " +
                            "Sens Char(1), " +
                            "Num Integer, " +
                            "Hor Char(8))";
                    Statement stmt = connection.createStatement();
                    stmt.execute(sql);

                    while (eof != true) {
                        //Lecture de la ligne
                        ligneDonnee = LecteurBufferise.readLine();

                        if(ligneDonnee!=null)
                        {
                            String donneesLignes[] = ligneDonnee.split(";");
                            if(donneesLignes[1].compareTo(""+laLigne.trajet+"")==0 && donneesLignes[0].charAt(0)==laLigne.sens)
                            {
                                    sql = "insert into DebutHoraire (Code, Sens, Num, Hor) " +
                                            "values (" ;
                                    sql += """ + laLigne.code + "", ";
                                    sql += "\'" + donneesLignes[0].charAt(0) + "\', ";
                                    sql += donneesLignes[1] + ", ";
                                    sql += "\'" + dateMAJ + "\')";
                                    
                                    stmt.execute(sql);
                                }

                            }

                        }else
                        {
                            eof=true;
                        }
                    stmt.close();

                    jLabelErreurLaDate.setText("OK");

                }
                catch(Exception e)
                {
                    String erreur = e.toString() + " --- " + sql;
                    jLabelErreurLaDate.setText(erreur);
                }
            }
            catch (FileNotFoundException ex) {
              jLabelErreurLaDate.setText("Fichier Non Trouvé !!");
            }
            catch (IOException ex) {
              jLabelErreurLaDate.setText("Erreur lecture ligne fichier !!");
            }
            finally {
                try {
                    LecteurBufferise.close();
                }catch (IOException ex1) {
                    jLabelErreurLaDate.setText("Erreur fermeture fichier !!");
                }
            }
    }catch(Exception e)
    {
        jLabelErreurLaDate.setText("Erreur : " + e.toString());
    }


Toujours la même erreur.
La table se crée bien, mais le INSERT INTO foire (mais ok si "lancé à la main" depuis ACCESS)

Je lance en mode debug.
Les champs sont bons, arrivé à la ligne
stmt.execute(sql);

juste après
sql += "\'" + dateMAJ + "\')";

Je me retrouve à
String erreur = e.toString() + " --- " + sql;
et erreur contient
"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')"


EDIT : Il s'agit bien sûr du premier tour dans le while
0
Rejoignez-nous