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

VB.NET Discussion :

Insert into {matable} select {champs from matable2} avec access ne s'exécute pas


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Insert into {matable} select {champs from matable2} avec access ne s'exécute pas
    Bonjour à tous,

    J'exécute une requête insert into...select pour une base access (access m'est imposé comme bdd!) dans un programme en vb.net (donc avec visual studio).

    Mon souci est le suivant. Lorsque j'exécute la requête sql directement dans le sgbd (access donc), celle-ci s'exécute parfaitement MAIS en m'ayant envoyé au préalable un msgbox de confirmation de l'insertion des 985 lignes concernées par ladite requête. Il n'y a donc pas d'erreur dans ma requête sql.

    Par contre, lorsque je tente d'exécuter la requête à partir du déboguage du programme, aucune insertion ne se fait. J'imagine que la raison tient au fait que l'insertion n'a pas été confirmée...

    Et c'est donc là que je coince! Quelqu'un peut-il m'aider à résoudre ce léger désagrément???

    Par acquis de conscience, je joint tout de même l'extrait de code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    InsertOle.Connection = MaconnexionOle
                        InsertOle.CommandText = "insert into clients_maintenance (Code_cli, Nom_cli, Cp_cli, Ville_cli, Tel_cli, Fax_cli, Port_cli, Courriel_cli, Site_cli) select " & code & ", " & nom & ", " & cp & ", " & ville & ", " & tel & ", " & fax & ", " & port & ", " & mail & ", " & siteinter & " from " & tab_client & ""
                        InsertOle.ExecuteNonQuery()

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Possible d'avoir la valeur de CommandText après son affectation?

    Et de préciser s'il y a un message d'erreur.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu es sûr que ce n'est pas ton propre code qui afficher cette MessageBox ?

    Ca me semblerait bizarre que ce soit Access... je viens de faire un test similaire (copier beaucoup de lignes d'une table à une autre), et il m'a rien demandé.

    Apparemment il existe en VBA une fonction DoCmd.SetWarnings pour activer ou désactiver ces warnings, mais je pense que ça ne concerne que l'exécution à partir d'Access... Je sais pas si on peut utiliser cette fonction en VB.NET.

    Tu utilises quel provider ? OleDB ? ODBC ? Il n'y a pas un truc particulier dans ta chaine de connexion ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    mais je pense que ça ne concerne que l'exécution à partir d'Access
    Oui la manipulation d'ACCESS via le code ne tient pas compte de la prévention d'exécution des requêtes d'insertion ou de création.

    Il faudrait comme l'a indiqué Sinople avoir la copie du command.text à l'exécution.

    J'ai eu ce problème lorsque le nom d'un champs de la table était un mot réservé de .Net (Section en l'occurrence). Mais là a priori je ne vois pas de mot réservé.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Je pense que le messageBox dont il parle et celui que Access (le programme pas la bd) affiche lors d'une insertion multiple et à priori ça n'a aucun rapport avec le problème.

    Je penche sur un problème de la requête SELECT de l'INSERT qui ne renvoie aucun résultat (et par conséquent n'ajoute aucune ligne mais pas d'erreur).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Je vais tenter de répondre à tous à la fois, et de préciser ma demande :

    Citation Envoyé par sinople Voir le message
    Et de préciser s'il y a un message d'erreur.
    Non, il n'y a aucune message d'erreur.

    Citation Envoyé par tomlev Voir le message
    Tu es sûr que ce n'est pas ton propre code qui afficher cette MessageBox ?
    Tu utilises quel provider ? OleDB ? ODBC ? Il n'y a pas un truc particulier dans ta chaine de connexion ?
    Non, ce n'est pas mon propre code qui affiche cette messagebox. Je pense m'être mal exprimée en disant qu'access 'm'envoyait' une msgbox. J'ai en fait fait un copié-collé de la requête de vb vers access et je l'ai exécuté. Ce qui a provoqué le déclenchement de la fenêtre de confirmation dans access totalement indépendament de mon appli.
    J'utilise le provider OleDb et ma chaine de connexion me permet d'exécuter des select, le problème ne se situe donc pas là!

    Citation Envoyé par Geo2A Voir le message
    Il faudrait comme l'a indiqué Sinople avoir la copie du command.text à l'exécution.
    Là, je crains ne pas comprendre ce que vous avez voulu dire. Comment avoir la copie du command.text à l'exécution ?

    Cordialement

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par guznat Voir le message
    Là, je crains ne pas comprendre ce que vous avez voulu dire. Comment avoir la copie du command.text à l'exécution ?
    avec un point d'arret, tu peux alors faire un espion express sur le commandtext pour récupérer le résultat de la concaténation
    et donc vérifier si correspond à ce que tu voulais
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par guznat Voir le message
    Non, ce n'est pas mon propre code qui affiche cette messagebox. Je pense m'être mal exprimée en disant qu'access 'm'envoyait' une msgbox. J'ai en fait fait un copié-collé de la requête de vb vers access et je l'ai exécuté. Ce qui a provoqué le déclenchement de la fenêtre de confirmation dans access totalement indépendament de mon appli.
    Ah, mais ça change tout... ce n'est pas du tout un problème VB alors !
    Tu auras sans doute des meilleures réponses dans le forum Access

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il dit juste que ca requete ne fonctionne pas dans vb, et qu'en la collant dans access elle marche pourtant
    (comme c'est souvent le cas avec access ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il dit juste que ca requete ne fonctionne pas dans vb, et qu'en la collant dans access elle marche pourtant
    (comme c'est souvent le cas avec access ...)
    Ah oui, je viens de relire la question, j'avais mal compris...
    Je croyais que le PO voulait juste se débarrasser du dialogue de confirmation

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,
    La mise en place d'un catch exception dans vb m'a permis d'avoir les détails de l'exception.
    la voici :
    Interception de System.Data.OleDb.OleDbException
    ErrorCode=-2147217833
    Message=Le champ est trop petit pour accepter la quantité de données que vous voulez ajouter. Essayez d’insérer ou de coller moins de données.
    Source=Microsoft Access Database Engine
    Malgré tout, je ne suis guère plus avancée pour autant...
    Peut-être créer une boucle pour insérer les données 10 lignes par 10 lignes???

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    Cela veut simplement dire qu'il y a un champs de type texte de votre table qui est trop petit pour recevoir la quantité de données que vous voulez insérer.

    Si votre champs Site_Cli est à 255 caractères (valeur max pour access) et que l'url que vous voulez insérer fait 256 caractères ou plus ça plante !

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par guznat Voir le message
    Non, il n'y a aucune message d'erreur.
    Citation Envoyé par guznat Voir le message
    La mise en place d'un catch exception dans vb m'a permis d'avoir les détails de l'exception.
    ...


    insérer les lignes 10 par 10 ne changera rien, le message explique qu'un champ est trop petit (genre tu essaye de mettre un varchar de 80 caractères dans une colonne qui accepte des varchar de 50 seulement)

    si tu peux te passer d'access il y a des sgbdr qui aident plus le développeur que ca !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Tu as la réponse.

    Il faut redimensionner le(s) colonne(s) de la table de destination et vérifier qu'ils soit au moins de la même taille (et du même type aussi) que ceux de ta requête select.

    Au passage s'il n'y a pas de gestion d'erreur, ce genre de truc bloque direct ton application en principe. Si ça tourne sans rien dire c'est probablement parce qu'il y a un gros bloc try catch avec une gestion d'erreur d'autruche dans ton application et ça c'est pas bien...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Geo2A Voir le message
    Bonjour,
    Cela veut simplement dire qu'il y a un champs de type texte de votre table qui est trop petit pour recevoir la quantité de données que vous voulez insérer.
    Si votre champs Site_Cli est à 255 caractères (valeur max pour access) et que l'url que vous voulez insérer fait 256 caractères ou plus ça plante !
    Citation Envoyé par sinople Voir le message
    Tu as la réponse.
    Il faut redimensionner le(s) colonne(s) de la table de destination et vérifier qu'ils soit au moins de la même taille (et du même type aussi) que ceux de ta requête select.
    Au risque de paraître insistante, je me permet de revenir encore sur ce problème. J'ai, selon vos suggestions, repris le type de chaque colonne pour en vérifier la compatibilité. Il n'y a pas de souci à ce sujet.
    De plus, la requête exécutée directement dans access ne pose aucun problème après validation de la msgbox D'ACCESS me demandant de confirmer l'insertion des 985 lignes.
    A mon humble avis, le problème réside bel et bien dans le fait que cette confirmation n'est pas faite quand la requête d'insertion est exécutée depuis mon application.

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le fait qu'access demande une confirmation n'est pas le problème
    le logiciel access a une surcouche graphique sur la base de données access
    cette surcouche n'existe pas depuis .net, et l'insertion doit se passer correctement, même avec des milliers de lignes à insérer

    de plus le message ne parle pas du tout de ca


    j'ai eut le meme message d'erreur récemment, et moi aussi ma requete passait sous access (le logiciel)
    mais moi ca venait de mes dbparameters, mais à priori tu n'en utilises pas ...
    et malheureusement je ne vois pas trop comment on pourrait t'aider, même en nous donnant le résultat concaténé (chose que tu n'as pas encore faite) il y a encore une chance qu'on ne trouve rien qui cloche

    pour en revenir à ce que je disais, access n'est pas un outils pour développeur dans le sens ou il n'explicite pas ses messages d'erreur, sur un autre sgbdr tu aurais un message beaucoup plus détaillé et tu pourrais réparer plus rapidement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. INSERT INTO dans un champ avec contrainte.
    Par Brofestor dans le forum SQL
    Réponses: 7
    Dernier message: 16/09/2011, 14h34
  2. Réponses: 2
    Dernier message: 27/01/2011, 16h42
  3. Insert into matable (Chp1, Chp2, Chp3) select distinct
    Par Perplexe dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/09/2009, 14h52
  4. Réponses: 9
    Dernier message: 07/02/2008, 13h44
  5. Probleme avec INSERT INTO et select
    Par jmjmjm dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/01/2007, 22h51

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