Porblème d'insertion

Signaler
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012
-
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
-
Bonjour tout le monde,
mon problème est comme suit:

j'ai une table dans Access et l'autre dans Oracle, mon but est de charger les données de access vers oracle malheureusement ça marche pas.svp aider moi a resolu ce problème. voici mon code: l'erreur est ORA-00936: expression absente


string queryString1 =
"SELECT ID_REGARD from ENCRASS";
OleDbCommand cmd = new OleDbCommand(queryString1);
cmd.Connection = connectAcc;
connectAcc.Open();
cmd.ExecuteReader();
connectAcc.Close(); //Déconnexion de la base de données Access


string querystring3 =
"INSERT INTO ETAT_ACTUEL_REGARD ID_REGARD values (" + queryString1 + ")";

OracleCommand command = new OracleCommand(querystring3);
command.Connection = connectOrcl;
connectOrcl.Open();
command.ExecuteNonQuery();
connectOrcl.Close(); //Déconnexion de la base de données OracleClient

18 réponses

Messages postés
14652
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 février 2020
139
Bonjour,

"INSERT INTO ETAT_ACTUEL_REGARD (
ID_REGARD)
values (" + queryString1 + ")";

Je pense qu'il manque des ( )


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
355
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
15 juin 2019
5
Salut,ALors l'instruction IN
req=
Select * From Matable IN C:\Mabaz.accdb"



La Science est Grande et Vaste partageons cette connaisance
Messages postés
355
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
15 juin 2019
5
Excuse moi

Req="Select * From Matable IN C:\Mabaz.accdb"


La Science est Grande et Vaste partageons cette connaisance
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

bonjour tout le monde,
le problème persiste toujours. comme même merci de vos repense.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Salut,

pour info : un SELECT INSERT ne doit contenir le mot-clé VALUES.
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

salut jopop
j'ai pas compris votre réponse.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Avec un exemple ce sera peut-être plus simple à comprendre :

INSERT INTO matable1 (champ1, champ1) VALUES ("const1", "const2");
INSERT INTO matable1 (champ1, champ2) (SELECT champ1, champ2 FROM matable2);
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

bonjour,
le problème d'insertion est résolue mais il insert qu'un seule enregistrement par contre moi je veux qu'il insert tout la table voici le code:
                string queryString1 =
            "select ID_REGARD,CENTRE,COMMUNE,ACC_REG,RELEVE,DEBIT,TRAFIC,METEO,TYPE_TAMPN,ENC_AGENT,ENC_OBSRVT,EAU_CLAIRE,NAT_DEPOT,PROF_REG,ENC_REG,ACC_REG,CENTRE,ENC_DATE,ACC_VEHCLE from ENCRASS";
              
                OleDbCommand cmd = new OleDbCommand(queryString1);
                cmd.Connection = connectAcc;
               
                connectAcc.Open();
                //cmd.ExecuteReader();
               
                OleDbDataReader reader = cmd.ExecuteReader();

                reader.Read();
                    string Var_CENTRE,
                            Var_ID_REGARD,
                            Var_ENC_DATE,
                          //  Var_ZONE,
                            Var_COMMUNE,
                            Var_ACC_REG,
                            Var_RELEVE,
                            Var_DEBIT,
                            Var_TRAFIC,
                            Var_METEO,
                            Var_TYPE_TAMPN,
                            Var_ENC_AGENT,
                            Var_ENC_OBSRVT,
                            Var_EAU_CLAIRE,
                            Var_NAT_DEPOT,
                            Var_PROF_REG,
                            Var_ENC_REG,
                            Var_ACC_VEHCLE;

                    Var_ID_REGARD = reader["ID_REGARD"].ToString();
                    Var_CENTRE = reader["CENTRE"].ToString();
                    Var_ENC_DATE = reader["ENC_DATE"].ToString();
                   // Var_ZONE = reader["ZONE"].ToString();
                    Var_COMMUNE = reader["COMMUNE"].ToString();
                    Var_ACC_REG = reader["ACC_REG"].ToString();
                    Var_RELEVE = reader["RELEVE"].ToString();
                    Var_DEBIT = reader["DEBIT"].ToString();
                    Var_TRAFIC = reader["TRAFIC"].ToString();
                    Var_METEO = reader["METEO"].ToString();
                    Var_TYPE_TAMPN = reader["TYPE_TAMPN"].ToString();
                    Var_ENC_AGENT = reader["ENC_AGENT"].ToString();
                    Var_ENC_OBSRVT = reader["ENC_OBSRVT"].ToString();
                    Var_EAU_CLAIRE = reader["EAU_CLAIRE"].ToString();
                    Var_NAT_DEPOT = reader["NAT_DEPOT"].ToString();
                    Var_PROF_REG = reader["PROF_REG"].ToString();
                    Var_ENC_REG = reader["ENC_REG"].ToString();
                    Var_ACC_VEHCLE = reader["ACC_VEHCLE"].ToString();

                    string querystring3 =
    "insert into ETAT_ACTUEL_REGARD_TST (ID_REGARD,CENTRE,COMMUNE,ACC_REG,RELEVE,DEBIT,TRAFIC,METEO,TYPE_TAMPN,ENC_AGENT,ENC_OBSRVT,EAU_CLAIRE,NAT_DEPOT,PROF_REG,ENC_REG,ENC_DATE,ACC_VEHCLE) values (" + Var_ID_REGARD + ",'" + Var_CENTRE + "','" + Var_COMMUNE + "','" + Var_ACC_REG + "','" + Var_RELEVE + "','" + Var_DEBIT + "','" + Var_TRAFIC + "','" + Var_METEO + "','" + Var_TYPE_TAMPN + "','" + Var_ENC_AGENT + "','" + Var_ENC_OBSRVT + "','" + Var_EAU_CLAIRE + "','" + Var_NAT_DEPOT + "'," + Var_PROF_REG + "," + Var_ENC_REG + ",'" + Var_ENC_DATE + "','"+Var_ACC_VEHCLE+"')";
                    
                    OracleCommand command = new OracleCommand(querystring3);
                    command.Connection = connectOrcl;
                    connectOrcl.Open();
                    command.ExecuteNonQuery();

                    connectOrcl.Close(); //Déconnexion de la base de données OracleClient
                    connectAcc.Close(); //Déconnexion de la base de données Access
                    
               
                 
              
                #endregion


                return "Vous êtes Connecté";

            }

            catch (Exception ex)
            {
             
                return ex.Message;
             

            }

        }
    }
}
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Re,

vu que tu ne fais aucun traitement sur les données insérées tu devrais plutôt faire un INSERT SELECT.

Sinon pour ton code il est normal qu'il fasse une seule insertion puisque tu ne boucle pas sur ton reader : tu ne lis que le premier enregistrement, donc tu n'insères que celui-ci.
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

salut jopop,

a quel niveau je vais mettre la boucle ?!!
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Si tu regardes la description de la fonction IDataReader.Read() tu peux voir qu'elle déplace le pointeur sur le tuple suivant. S'il y a un enregistrement, elle renvoie true. Sinon (c-à-d t'es arrivé au bout de tes données) elle renvoie false.

Du coup tu comprendras que la boucle à utiliser est un while avec comme condition le retour de la fonction Read().

Mais encore une fois, une requête INSERT SELECT serait autrement plus simple, plus propre, et plus performante ;)
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

salut,
je fais pas insert select par ce que j'ai des traitement (filtres) avant d'inser dans la base oracle.
je vais essaye d'utiser la fonction IDataReader.Read().

merci.
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Tu l'utilises déjà cette fonction, juste tu fais pas le while avec ;)
Et oki pour les traitements (que j'ai pas souvenir d'avoir vu dans ton code par contre).
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

salut tout le monde,
j'ai un autre pb lors d'insertion, le code insert deux enregistrement après affiche l'erreur trop de valeurs voici le code:
 string querystring3, queryString1;

                queryString1 =
            "select ID_REGARD,CENTRE,COMMUNE,ACC_REG,RELEVE,DEBIT,TRAFIC,METEO,TYPE_TAMPN,ENC_AGENT,ENC_OBSRVT,EAU_CLAIRE,NAT_DEPOT,PROF_REG,ENC_REG,ACC_REG,CENTRE,ENC_DATE,ACC_VEHCLE from ENCRASS";

                OleDbCommand cmd = new OleDbCommand(queryString1);
                cmd.Connection = connectAcc;
                connectOrcl.Open();
                connectAcc.Open();
                OleDbDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    string Var_CENTRE,
                            Var_ID_REGARD,
                            Var_ENC_DATE,
                        //  Var_ZONE,
                            Var_COMMUNE,
                            Var_ACC_REG,
                            Var_RELEVE,
                            Var_DEBIT,
                            Var_TRAFIC,
                            Var_METEO,
                            Var_TYPE_TAMPN,
                            Var_ENC_AGENT,
                            Var_ENC_OBSRVT,
                            Var_EAU_CLAIRE,
                            Var_NAT_DEPOT,
                            Var_PROF_REG,
                            Var_ENC_REG,
                            Var_ACC_VEHCLE;

                    Var_ID_REGARD = reader["ID_REGARD"].ToString();
                    Var_CENTRE = reader["CENTRE"].ToString();
                    Var_ENC_DATE = reader["ENC_DATE"].ToString();
                    // Var_ZONE = reader["ZONE"].ToString();
                    Var_COMMUNE = reader["COMMUNE"].ToString();
                    Var_ACC_REG = reader["ACC_REG"].ToString();
                    Var_RELEVE = reader["RELEVE"].ToString();
                    Var_DEBIT = reader["DEBIT"].ToString();
                    Var_TRAFIC = reader["TRAFIC"].ToString();
                    Var_METEO = reader["METEO"].ToString();
                    Var_TYPE_TAMPN = reader["TYPE_TAMPN"].ToString();
                    Var_ENC_AGENT = reader["ENC_AGENT"].ToString();
                    Var_ENC_OBSRVT = reader["ENC_OBSRVT"].ToString();
                    Var_EAU_CLAIRE = reader["EAU_CLAIRE"].ToString();
                    Var_NAT_DEPOT = reader["NAT_DEPOT"].ToString();
                    Var_PROF_REG = reader["PROF_REG"].ToString();
                    Var_ENC_REG = reader["ENC_REG"].ToString();
                    Var_ACC_VEHCLE = reader["ACC_VEHCLE"].ToString();

                    querystring3 =
    "insert into ETAT_ACTUEL_REGARD_TST (ID_REGARD,CENTRE,COMMUNE,ACC_REG,RELEVE,DEBIT,TRAFIC,METEO,TYPE_TAMPN,ENC_AGENT,ENC_OBSRVT,EAU_CLAIRE,NAT_DEPOT,PROF_REG,ENC_REG,ENC_DATE,ACC_VEHCLE) values (" + Var_ID_REGARD + ",'" + Var_CENTRE + "','" + Var_COMMUNE + "','" + Var_ACC_REG + "','" + Var_RELEVE + "','" + Var_DEBIT + "','" + Var_TRAFIC + "','" + Var_METEO + "','" + Var_TYPE_TAMPN + "','" + Var_ENC_AGENT + "','" + Var_ENC_OBSRVT + "','" + Var_EAU_CLAIRE + "','" + Var_NAT_DEPOT + "'," + Var_PROF_REG + "," + Var_ENC_REG + ",'" + Var_ENC_DATE + "','" + Var_ACC_VEHCLE + "')";

                    OracleCommand command = new OracleCommand(querystring3);
                    command.Connection = connectOrcl;
                    command.ExecuteNonQuery();
                    //OracleDataReader reader1 = command.ExecuteReader();
                    //reader1.Read();

                }
                reader.Close();
                connectOrcl.Close(); //Déconnexion de la base de données OracleClient
                connectAcc.Close(); //Déconnexion de la base de données Access
              

                #endregion
                return "Vous êtes Connecté";

            }


            catch (Exception ex)
            {
             
                return ex.Message;

            }

        }
    }
}
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
A priori l'erreur "trop de valeur" (NB: toujours mettre les messages exacts et complets des erreur, avec le code) est parce que tu as plus de valeurs à droite du VALUES que de noms de champ à sa gauche.

Récupère la requête générée pour ton 3ème enregistrement (celui qui plante, donc), m'étonnerait pas qu'une des valeurs contient une quote ou autre caractère spécial. Si c'est bien le cas il va falloir t'orienter vers les OleDbParameter. Ou encore une fois passer par un INSERT SELECT (y'a toujours pas de traitement dans ton code donc je sais pas à quoi ils ressemblent, mais les SGBD peuvent faire pas mal d'opérations en SQL).
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

salut jopop,
svp peut tu me montrer comment utiliser oledbparameter au lieu des variables.
Messages postés
10
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
30 mai 2012

sachant que l'insertion se fait de access vers oracle .
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
Regarde le lien que j'ai placé plus haut, c'est un lien vers la MSDN de la classe en question, avec un exemple à la fin ;)