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 :

Un INSERT dans plusieurs tables.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut Un INSERT dans plusieurs tables.
    Bonsoir à tous,
    Je programme sous VB.Net 2010 et je voudrais insérer des données dans deux tables d'une base de données Access 2007 : T_ANOMALIE et T_DEPASSEMENT.
    Chacune des tables posséde un champ NuméroAuto et ces deux tables possédent une relation de type 1 à 1 entre les champs IDAnomalie.
    Le problème n'est pas la création des objets d'accès aux données mais l'instruction SQL.
    Je crois qu'il n'est pas possible de faire une simple instruction INSERT sur les deux tables en même temps.
    Je fais donc une instruction INSERT sur ma première table puis une instruction INSERT sur ma deuxième table. Et le hic est içi... !
    Pour insérer dans T_DEPASSEMENT j'ai besoin de connaitre la clé (c'est le numéro auto) qui correspond à l'enregistrement dans la 1ère table c'est à dire dans T_ANOMALIE... et là est ma question !
    Comment connaitre la valeur du NuméroAuto de la ligne qui vient d'être insérée dans T_ANOMALIE ?
    Existe t-il une façon plus simple de faire ça ? parexemple avec une seule instruction.
    Par avance, merci.


    Schéma des tables :


    T_ANOMALIE
    ------------
    IDAnomalie (clé NumAuto)
    DateHeure (date)
    Duree (entier)


    T_DEPASSEMENT
    ----------------
    IDDepassement (clé NumAuto)
    IDAnomalie (clé étrangère)
    Compose (chaine de caractères)
    Valeur (entier)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Est-ce qu'une requête imbriquée de ce type pourrait être susceptible de t'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO T_DEPASSEMENT
    VALUES ...
    WHERE IDAnomalie = (SELECT IDAnomalie FROM T_ANOMALIE
                                  WHERE DateHeure = "la_date_que_tu_viens_de_rentrer")

    Sinon, si tu as besoin d'un minimum de sécurité, je te suggèrerais plutôt d'utiliser des requêtes de type Linq ou ESQL. Même si t'en as pas besoin, c'est aussi pas si mal.

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    Citation Envoyé par patxy Voir le message
    Est-ce qu'une requête imbriquée de ce type pourrait être susceptible de t'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO T_DEPASSEMENT
    VALUES ...
    WHERE IDAnomalie = (SELECT IDAnomalie FROM T_ANOMALIE
                                  WHERE DateHeure = "la_date_que_tu_viens_de_rentrer")
    Surtout pas, que se passerait-il si deux personne encodait la même date? On aurait le mauvais identifiant...
    la solution est dans le lien que Pol63 à posté, à savoir l'utilisation de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'VB
    Dim query As String = "Insert Into Categories (CategoryName) Values (?)"
    Dim query2 As String = "Select @@Identity"
    Dim ID As Integer
    Dim connect As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Northwind.mdb"
    Using conn As New OleDbConnection(connect)
      Using cmd As New OleDbCommand(query, conn)
        cmd.Parameters.AddWithValue("", Category.Text)
        conn.Open()
        cmd.ExecuteNonQuery()
        cmd.CommandText = query2
        ID = cmd.ExecuteScalar()
      End Using
    End Using
    The key to @@Identity is that it returns the value of an autoincrement column that is generated on the same connection.
    De cette manière, vous êtes sur de récupérer votre identifiant dernièrement inséré.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par patxy Voir le message
    Sinon, si tu as besoin d'un minimum de sécurité, je te suggèrerais plutôt d'utiliser des requêtes de type Linq ou ESQL. Même si t'en as pas besoin, c'est aussi pas si mal.
    Et par quelle magie une requête Linq ou ESQL serait elle plus sure qu'une sécurisée, controlèe et (très) efficace requête SQL ?????

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Bonsoir et merci à tous pour vos réponses. J'ai utilisé la technique de Pol63 et ca marche à merveille. Je vais pouvoir continuer mon projet.
    Merci encore

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

Discussions similaires

  1. procedure stockée pour insertion dans plusieurs tables
    Par bigwal2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 22/11/2007, 22h58
  2. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  3. Insertion dans plusieurs tables en meme temps
    Par weed dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2007, 11h13
  4. [SQL] Insertion dans plusieurs tables
    Par fadex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2007, 11h47
  5. Insertion dans plusieurs tables : Transaction ?
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2006, 18h25

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