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

Accès aux données Discussion :

[VB.NET/Access] Problème avec une requête d'insertion


Sujet :

Accès aux données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [VB.NET/Access] Problème avec une requête d'insertion
    Bonjour,

    j'ai parcouru le forum et j'ai vu pas mal de choses concernant VB.net et access mais je n'ai pas trouver la solution à mon problème (j'esper ne pas l'avoir rater...)

    En fait dans mon programme j'exécute des requetes de selection (qui marche très bien) et des requetes d'insertion.
    Et c'est là que j'ai un problème, si j'exécute tel quel la requete sur access elle fonctionnne mais sous VB.net il semble l'exécuter mais rien n'est inséré quand je regarde ma base par la suite...
    J'ai mis la clef primaire (NumEmp) en num auto

    Alors si vous pouviez m'aider ça serait génial !

    Voici ma requête:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     requete = "INSERT INTO employe(NumEmp, NomEmp,PrenomEmp,NumStatEmp) VALUES(7,'" + NomSalarie + "','" + PrenomSalarie + "','" + StatutSal + "')"

    j'ai également essayer celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = "Insert into employe (NumEmp,NomEmp,PrenomEmp,NumStatEmp) values (7,'" & NomSalarie & "', '" & PrenomSalarie & "', '" & StatutSal & "')"

    PS: j'utilise Dotnet 2003 et Access 2003 avec une base 2000

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai essayer sans le lien DSN et en passant par des recordSet, ça fonctionne. Par contre impossible avec le lien DSN, quelqu'un peut me renseigner ?
    C'est assez important (exam dans deux jours :p)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    personne ?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Je précise que j'ai essayer de aussi sans mettre de variable pour la clef primaire mais en vain.

    Bon je suis passer ADODB pour réussir mon insert, ça marche mais maintenant j'ai un problème avec l'update qui me dit que faut j'autorise les doublons... JE me demande si c'est pas parce que j'utilise une version de base access 2000... Si quelqu'un peut m'éclairer...

    J'ai bien vu les autres post concernant ce sujet et je ne trouve pas ... :/

    MonRecordSet.AddNew()


    MonRecordSet.Fields(0).Value = NumLivre
    'MonRecordSet.Fields(1).Value = livre
    MonRecordSet.Fields(2).Value = "2"
    MonRecordSet.Fields(3).Value = ""



    MonRecordSet.Update()
    MonRecordSet.Close()
    maconnec.Close()
    Il plante au niveau du MonRecordSet.Update()

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ok en fait suffit de faire maconnection.execute(larequeteUpdate)
    J'ai mal lu un tuto^^

    Donc en soit mon problème est plus ou moin résolu mais j'aurai souhaité avoir une réponse sur le faite qu'avec le lien ODBC ma requête ne fonctionne pas ? Est-ce que quelqu'un sait ?

    Ps: c'est uniquement par curiosité

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Peut-être que si tu expliquais ce qui ne marche pas on pourrait même avoir une idée...

    Tu donnes les requêtes que tu exécutes, d'accord, mais comment sont-elles exécutées ? Comment sont-elles envoyées à la base, avec quels objets, quelle fonction, etc. ? Il ne sert à rien de demander ce qui ne marche pas si tu n'expliques pas ce que tu fais ! Je ne crois pas qu'il y ait de devins qui se baladent sur ce forum.
    (traduction : envoie le code qui plante en indiquant ce qui se passe à l'exécution sinon personne ne te répondra, tout simplement parce que personne ne peut deviner ton problème)

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Oui pardon... Mais comme la connection a la base fonctionne puisque j'arrive a faire des séléctions je me suis dit que ca devrait pas poser probleme pour l'insertion...
    Je pensai plutot que c'était la requête.

    Bien le code pour ce qui concerne ODBC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub New()
     
            maconnection.ConnectionString = "DSN=bdAPMonnin"
            maconnection.Open()
     
        End Sub
    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
     Sub SetSalarie(ByVal Nom As String, ByVal Prenom As String, ByVal TypeSal As String, ByVal Titreemprunt As String)
     
     
            NomSalarie = Nom
            PrenomSalarie = Prenom
            StatutSal = TypeSal
            TitreLivre = Titreemprunt
     
            If StatutSal = "cadre" Then
                StatutSal = 1
            Else
                StatutSal = 2
            End If
     
            'requete = "Insert into employe (NumEmp,NomEmp,PrenomEmp,NumStatEmp) values (7,NomSalarie,PrenomSalarie,StatutSal )"
            requete = "INSERT INTO employe(NumEmp, NomEmp,PrenomEmp,NumStatEmp) VALUES(" + NomSalarie + "," + PrenomSalarie + "," + StatutSal + ")"
            'requete = "Insert into employe (NumEmp,NomEmp,PrenomEmp,NumStatEmp) values (7,'" & NomSalarie & "', '" & PrenomSalarie & "', '" & StatutSal & "')"
     
            conn.ExecuterRequete(requete)
     
        End Sub

    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
     
        Sub ExecuterRequete(ByVal requete As String)
     
     
            ObjetCommand = New OdbcCommand(requete)
            ObjetDataAdapter = New OdbcDataAdapter(ObjetCommand)
     
     
            ObjetCommand.Connection() = maconnection
     
     
     
     
     
     
        End Sub

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Et ben voilà, tout de suite on voit le problème : c'est que tu n'as pas du tout compris comment on se sert des DataAdapter ni des Command Premier conseil : retourner lire un cours sur DotNet. Sinon, réponse vite fait mais bien moins complète ci-dessous.
    (Je suppose d'ailleurs qu'en fait il n'y a pas que ça comme code, tu dois au moins avoir appelé un Fill ou un Update quelque part ? (sinon il est normal que rien ne se passe, mais alors tu n'aurais pas pu dire que tu arrives à faire des sélections...))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ObjetCommand = New OdbcCommand(requete)
    ObjetDataAdapter = New OdbcDataAdapter(ObjetCommand)
    ObjetCommand.Connection() = maconnection
    Là tu as défini un DataAdapter avec comme SelectCommand (= commande qui sert à sélectionner les lignes qui seront mises dans une DataTable lors de l'appel de Fill) une requête d'insertion... Il y a comme qui dirait un problème.


    ----------

    Le DataAdapter possède quatre objets Command :
    - SelectCommand pour sélectionner des lignes ("SELECT...(WHERE...)") (utilisé avec Fill)
    - InsertCommand pour insérer des lignes ("INSERT INTO... VALUES...") (utilisé avec Update)
    - UpdateCommand pour modifier une ligne qui existe déjà dans la base ("UPDATE... SET... WHERE...") (utilisé avec Update)
    - DeleteCommand pour supprimer une ligne de la base ("DELETE FROM... WHERE...") (utilisé avec Update)
    Mélanger les commandes aboutit bien sûr à des résultats inattendus !

    Pour sélectionner des lignes, il suffit de définir la SelectCommand puis d'appeler Fill pour remplir un DataSet.
    Pour insérer des lignes dans la base, il faut définir aussi la InsertCommand (et même les deux autres tant qu'à faire, sinon erreur s'il y a des lignes modifiées ou supprimées dans la DataSet), ajouter des lignes dans le DataSet, puis appeler Update.

    Ce qui donne en C# (je comprends à peu près le VB mais je ferais trop d'erreurs de syntaxe si je m'y risquais maintenant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    OdbcConnection maConnexion = new OdbcConnection(maConnectionString);
    OdbcCommand maSelectCommand = new OdbcCommand("SELECT...", maConnection);
    OdbcCommand maInsertCommand = new OdbcCommand("INSERT...", maConnection); //plus définir les paramètres
    OdbcDataAdapter monDataAdapter = new OdbcDataAdapter();
    monDataAdapter.SelectCommand = maSelectCommand;
    monDataAdapter.InsertCommand = maInsertCommand;
     
    DataSet monDataSet = new DataSet();
    monDataAdapter.Fill(monDataSet); // là on utilise la SelectCommand
    // insertion de lignes dans le DataSet...
    monDataAdapter.Update(monDataSet); // là on utilise les 3 autres commandes
    ----------

    ça c'était pour utiliser les DataAdpater, mais en fait vu la requête d'insertion utilisée le DataAdapter est très superflu...

    Tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    OdbcConnection maConnexion = new OdbcConnection(maConnectionString);
    OdbcCommand maSelectCommand = new OdbcCommand("SELECT...", maConnection);
    maConnection.Open();
    OdbcDataReader monDataReader = maSelectCommand.ExecuteReader();
    // traiter les données récupérées
    monDataReader.Close();
    maConnexion.Close();
    pour la sélection

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    OdbcConnection maConnexion = new OdbcConnection(maConnectionString);
    OdbcCommand maInsertCommand = new OdbcCommand("INSERT...", maConnection);
    maConnection.Open();
    maInsertCommand.ExecuteNonQuery();
    maConnexion.Close();
    pour l'insertion

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Et ben voilà, tout de suite on voit le problème : c'est que tu n'as pas du tout compris comment on se sert des DataAdapter ni des Command Premier conseil : retourner lire un cours sur DotNet.
    Hé bien à vrai dire je me lance que depuis peu dans l'objet et donc je ne saisis pas encore grand chose...

    Merci d'avoir prit le temps de m'aider, je vais essayer de faire fonctionner tout ça

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/06/2011, 00h53
  2. Problème avec une requête SQL, pour access
    Par a.bott dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2008, 17h08
  3. [C++B5]Problème avec une requëte SQL sur BDD ACCESS
    Par Sleeping Lionheart dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/04/2008, 09h03
  4. [Access] Problème dans une requête SQL avec INNER JOIN ?
    Par bds2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/06/2006, 10h57
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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