IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

INSERT INTO ok via ACCESS Too few parameter via ODBC


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut INSERT INTO ok via ACCESS Too few parameter via ODBC
    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 :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE MaTable (Code Char(4), Sens Char(1), Num Integer, Horaire Char(8))
    et ma requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO MaTable VALUES ('17', 'A', 1, '06:57:00')

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    As tu essayé de spécifier les noms de champs dans le insert ?

    On ne sait jamais, es tu sûr que c'est bien cette requête qui est exécutée ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut
    Bon je viens d'essayer en modifiant les " en '

    C'est la même chose.

    Je tente en mettant les noms des champs

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Tu parles de requête dans une boucle. Il faudrait vérifier la validité des variables utilisées, car le code que tu donnes (avec ' au lieu de ") semble correct, mais as-tu vérifier la chaine sql passée durant la boucle, donc avec les variables?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut Un peu plus d'informations
    Bon je vais donner plus de code en le modifiant un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
        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 MaTable (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 juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql += "\'" + dateMAJ + "\')";
    Je me retrouve à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String erreur = e.toString() + " --- " + sql;
    et erreur contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. --- insert into MaTable (Code, Sens, Num, Hor) values ("17", 'A', 1, '06:57:00')"

    EDIT : Il s'agit bien sûr du premier tour dans le while

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Il faudrait donner le contenu du string (sans jeu de mots), car j'ai l'impression que c'est plus un problème JAVA qu'un problème Access.

    Perso, je ne sais pas lire le java

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Il faudrait donner le contenu du string (sans jeu de mots), car j'ai l'impression que c'est plus un problème JAVA qu'un problème Access.

    Perso, je ne sais pas lire le java
    Oui le jeu de mots est facile alors on va éviter

    Quelle chaine de caractères (et hop je saute le jeu de mots )?

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Je parle de la chaine sql select.... Elle est construite avec des variables. Il faut la vérifier en mode Debug juste avant

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je parle de la chaine sql select.... Elle est construite avec des variables. Il faut la vérifier en mode Debug juste avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable (Code, Sens, Num, Hor) values ("17", 'A', 1, '06:57:00')"

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    C'est à nouveau ton
    qui pose problème. Tu dois avoir

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Points : 43
    Points
    43
    Par défaut
    Merci mille fois, c'était ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/01/2010, 20h03
  2. Réponses: 2
    Dernier message: 01/04/2008, 09h38
  3. Insert into une base access avec "OleDbConnection"
    Par milia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/01/2007, 11h04
  4. [VBA][recordset]pb update error 3061 too few parameters
    Par megapacman dans le forum Access
    Réponses: 2
    Dernier message: 23/03/2006, 16h11
  5. Réponses: 3
    Dernier message: 03/11/2005, 18h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo