none
inserer des données dans plusieurs tables RRS feed

  • Question

  • Bonjour,

    je suis entrain de développer une application qui doit me permettre de manipuler une base de données Access.

    Je doit remplir trois tables à partir d'une interface windowsForm en vb.net. la structure de mes tables:

    Inspection(id_inspect, nom,prenom)

    Entreprises(id_Ent, RaisonSocial, Responsable, #id_inspect)

    Produits(id_Prod, designation, stock, #id_Ent)

    Je souhaiterais avoir la syntaxe sql me permettant d’insérer les informations du formulaire dans les tables correspondantes

    NB: sur le formulaire la table produit s'affiche dans un datagradview;

    Merci pour votre aide et bon week end

    vendredi 14 novembre 2014 10:55

Réponses

Toutes les réponses

  • Bonjour,

    Je suppose que votre application utilise un DataSet comme interface avec votre DB dans ce cas, c'est ce DataSet et les TableAdapter de chacune des tables que contient votre DB qui doivent faire le travail.

    Je n'ai pas de lien à vous fournir mais tapez simplement DataSet sur un moteur de recherche.

    Cordialement

    dimanche 16 novembre 2014 12:12
  • Bonjour, je ne maîtrise pas encore le principe et la synthaxe mais voici ce que j'ai fais:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    'Chaîne de connexion
    Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrateur\Documents\DonnéesPlastiques.accdb")
    'INSERTION DES DONNEES DANS INSPECTION
        con.Open()
        Dim Requete As String = "insert into inspection(nominspect, prenominspect, dateinspect) values('" & Me.NomInspectTextBox.Text & "','" & Me.PrenomInspectTextBox.Text & "', '" & Me.DateInspectDateTimePicker.Value & "')"
        Dim Commande As New OleDbCommand(Requete, con)
        Commande.ExecuteNonQuery()
        con.Dispose()
        con.Close()
    
        Me.NomInspectTextBox.Text = ""
        Me.PrenomInspectTextBox.Text = ""
    
    
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try
    
    'INSERTION DES DONNEES DANS ENTREPRISE
    Try
    'Chaîne de connexion
    Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrateur\Documents\DonnéesPlastiques.accdb")
        con.Open()
        Dim Requete As String = "insert into entreprises(RsonSociale, reponsable, qualite, contact ) values('" & Me.RsonSocialeTextBox.Text & "','" & Me.ReponsableTextBox.Text & "', '" & Me.QualiteTextBox.Text & "','" & Me.ContactTextBox.Text & "')"
        Dim Commande As New OleDbCommand(Requete, con)
        Commande.ExecuteNonQuery()
        con.Dispose()
        con.Close()
        Me.RsonSocialeTextBox.Text = ""
        Me.ReponsableTextBox.Text = ""
        Me.QualiteTextBox.Text = ""
        Me.ContactTextBox.Text = ""
    
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try
    
    End Sub
    End Class

    la table entreprise contient la clé étrangère inspection pour faire la correspondance entre les enregistrements de inspection et entreprise; Le problème est comment récupérer ou faire correspondre les enregistrements? car les identifiants (id_inspect de la table inspection) est auto-Incrementé.

    voici le formulaire:

    comme vous le voyez les champs id_ent et id_inspect ne figurent pas sur le formulaire car l'utilisateur

    ne doit pas rentrer ces informations le prgramme doit le faire automaatiquement.

    mais je ne sais pas comment m'y prendre

    lundi 17 novembre 2014 10:18
  • Bonjour Dinjer

    la solution serait de créer un  système d'auto-incrément, par exemple vous récupérez le nombre de ligne dans la table ou vous voulez rajouter votre ligne et vous définissez l'ID étant égale aux nombre de lignes + 1.

    SELECT COUNT(*) FROM inspection;
    
    
    SELECT COUNT(*) FROM entreprise;

    Normalement ces 2 requêtes devraient vous retournez le nombre de lignes dans vos tables :)

    lundi 17 novembre 2014 10:47
  • Salut Jérôme,

    si je comprend bien au chargement du formulaire je récupéré le nombre de ligne dans un

    textBox par exemple, et l'opérateur doit entrer manuellement le No+ 1 dans le champ clé externe de la deuxième table!

    lundi 17 novembre 2014 12:58
  • Non, l'utilisateur n'aura besoin de rien faire.

    il suffira de stocker le nombre de ligne dans un entier et d'ensuite l'incrémenter de 1, j'aurais bien écris une ébauche de code, mais je ne connais pas le VB. Mais l'algorythme ressemblerait à ça:

    string requete = "SELECT COUNT(*) FROM inspection";

    OleDbCommand command = new OLeDbCommand(requete,con);

    int nbligne = command.ExecuteScalar();

    nbligne ++

    ensuite il suffira lors de l'ajout il faudra passer la valeur de nbligne comme ID ;)

    lundi 17 novembre 2014 13:13
  • salut voici mon code:

     Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    'insertion des données de l'élève   
     Try
        Dim connexion As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrateur\Documents\TEST.accdb")
        Dim requet As String
        connexion.Open()
         requet = " insert into eleves(nomel) values('" & Me.NomEl.Text & "')"
          Dim comde As New OleDbCommand(requet, connexion)
            comde.ExecuteNonQuery()
            connexion.Dispose()
            connexion.Close()
            Me.NomEl.Text = ""
        Catch ex As Exception
        MessageBox.Show(ex.Message)
        End Try
    
    
    '*************************************************
    'RECUPERATION DU NOMBRE DE LIGNE
    
         Dim nomb As Integer
        Try
        Dim connexion As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrateur\Documents\TEST.accdb")
        Dim requet As String
    
        connexion.Open()
         requet = " select count(*) from eleves"
          Dim comde As New OleDbCommand(requet, connexion)
           nomb = comde.ExecuteScalar()
            nomb += 1
              connexion.Dispose()
              connexion.Close()
    
            Me.NomEl.Text = ""
    
        Catch ex As Exception
        MessageBox.Show(ex.Message)
        End Try
    
    '****************************************************
    
    'insertion des données des cours
    
        Try
        Dim connexion As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrateur\Documents\TEST.accdb")
        Dim requet As String
    
        connexion.Open()
         requet = " insert into cours(Nomcrs, id_el) values('" & Me.NomCrs.Text & "', '" & nomb & "')"
          Dim comde As New OleDbCommand(requet, connexion)
            comde.ExecuteNonQuery()
            connexion.Dispose()
            connexion.Close()
            Me.NomCrs.Text = ""
        Catch ex As Exception
        MessageBox.Show(ex.Message)
        End Try
    
    
        End Sub

    mais j'ai se message d'erreur 

    puis-je avoir un bout de code dans ton langage pour mieux comprendre

    merci

    lundi 17 novembre 2014 17:30
  • merci pour ton orientation

    j'ai trouvé la parade

    connexion.Open()
         requet = " select count(*) from eleves"
          Dim comde As New OleDbCommand(requet, connexion)
           nomb = comde.ExecuteScalar()
            
              connexion.Dispose()
              connexion.Close()
    
            Me.NomEl.Text = ""

    on n'a pas besoin d'incrementer la variable

    lundi 17 novembre 2014 18:10
  • D'accord, l'auto incrément de la clé primaire était déjà défini dans ce cas :)

    J'aurais du te le demander en premier ^^

    • Marqué comme réponse dinjer mardi 18 novembre 2014 09:51
    lundi 17 novembre 2014 18:14
  • merci,

    mais dis moi c'est comme ça qu'on fait dans tous les programme ou c'est une astuce?

    mardi 18 novembre 2014 09:53
  • Service,

    C'est plus une astuce, car certaines tables n'ont pas de clé primaires qui s'auto-incrémentent lors d'un ajout de valeurs.

    Normalement c'est défini lors de la création d'une table ;)

    mardi 18 novembre 2014 10:20