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 :

Mettre à jour des tables liées entre elles


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut Mettre à jour des tables liées entre elles
    salut,
    je cherche un code (exemple) montrant comment mettre à jour 3 tables liées entre elles avec le code.
    Par exemple:

    Clients (IDclient, Nom, Adresse, Zip.....)
    Vente (IDVente , IDClient, DateVente...)
    DetailVente (IDDetailVente, IDVente, IDProduit, PrixUnitaire, Quantite)

    Je cherche si c'est possible de pouvoir ajouter, supprimer et modifier (Update) ces 3 table avec un seul bouton "Update". puisque le DatAdapter ne peut pas générer des commandes Update, Insert, Delete en cas de tables liées entre elles.

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    Bonjour,
    Tu peux créer les commandes sql pour chaque tables dans l'ordre des relations parent-enfants.(pour un delete, les enfants d'abord, un ajout les parents d'abord)
    Pour chaque tables extraires les ligne modifiées et traiter les maj

    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
    Dim DTAV As DataView
    Dim DTARV As DataRowView
    DTAV.RowStateFilter = DataViewRowState.Added Or DataViewRowState.Deleted Or DataViewRowState.ModifiedCurrent
          For Each DTARV In DTAV
            Select Case DTARV.Row.RowState
              Case DataRowState.Added           'ajouter 
                With DTARV
                  SCmd = "INSERT INTO ....."
    'utiliser un objet command pour la maj des tables
                  OCMD.commandetext = scmd
                  OCMD.executenonquery
                End With
              Case DataRowState.Deleted           'supprimer 
                'la requête de suppression
             case Datarowstate.modified
      'la requête de modification
           end select
        next
    Bon boulot Jean

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut
    d'habitude je fais ça:
    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
    22
     
    Private Sub updatedb2()
            If Me.achatDataSet.HasChanges Then
                Try
                    Dim deletedRecords() As DataRow = Me.achatDataSet.Tables("Achat").Select("", "", DataViewRowState.Deleted)
                    Dim deletedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Deleted)
     
                    Me.achatTableAdapter.Update(deletedRecords)
                    Me.achatDetailTableAdapter.Update(deletedChildsRecords)
     
                    Dim updateRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
                    Dim updateChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
     
                    Me.achatDetailTableAdapter.Update(deletedChildsRecords)
                    Me.achatTableAdapter.Update(updateRecords)
                    MsgBox("saved")
                Catch ex As Exception
                    MsgBox("not saved")
                End Try
     
            End If
        End Sub
    J'ai essayer aussi ça:

    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
    22
    23
    24
    25
    26
     
    Private Sub UpdateDB()
            Dim deletedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataRowState.Added)
            Dim addedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added)
            Dim modifiedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.ModifiedCurrent)
     
            Try
                If deletedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(deletedChildsRecords)
                End If
                achatTableAdapter.Update(Me.achatDataSet.Tables("Achat"))
     
                If addedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(addedChildsRecords)
                End If
     
                If modifiedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(modifiedChildsRecords)
                End If
     
                Me.achatDataSet.AcceptChanges()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.AbortRetryIgnore, "Error updating")
     
            End Try
        End Sub

    Mais je reçocis l'exception suivante:
    Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information

    Il me faut donc UpdateCommand/InsertCommand/DeleteCommand pour les 2 tables ici. chose que ne sais pas faire pour plusieurs table. J'a

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut
    Merci de m'avoir répondu assez vite
    d'habitude je fais ça:
    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
    22
     
    Private Sub updatedb2()
            If Me.achatDataSet.HasChanges Then
                Try
                    Dim deletedRecords() As DataRow = Me.achatDataSet.Tables("Achat").Select("", "", DataViewRowState.Deleted)
                    Dim deletedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Deleted)
     
                    Me.achatTableAdapter.Update(deletedRecords)
                    Me.achatDetailTableAdapter.Update(deletedChildsRecords)
     
                    Dim updateRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
                    Dim updateChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
     
                    Me.achatDetailTableAdapter.Update(deletedChildsRecords)
                    Me.achatTableAdapter.Update(updateRecords)
                    MsgBox("saved")
                Catch ex As Exception
                    MsgBox("not saved")
                End Try
     
            End If
        End Sub
    J'ai essayer aussi ça:

    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
    22
    23
    24
    25
    26
     
    Private Sub UpdateDB()
            Dim deletedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataRowState.Added)
            Dim addedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.Added)
            Dim modifiedChildsRecords() As DataRow = Me.achatDataSet.Tables("AchatDetail").Select("", "", DataViewRowState.ModifiedCurrent)
     
            Try
                If deletedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(deletedChildsRecords)
                End If
                achatTableAdapter.Update(Me.achatDataSet.Tables("Achat"))
     
                If addedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(addedChildsRecords)
                End If
     
                If modifiedChildsRecords IsNot Nothing Then
                    achatDetailTableAdapter.Update(modifiedChildsRecords)
                End If
     
                Me.achatDataSet.AcceptChanges()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.AbortRetryIgnore, "Error updating")
     
            End Try
        End Sub

    Mais je reçocis l'exception suivante:
    Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information

    Il me faut donc UpdateCommand/InsertCommand/DeleteCommand sous forme de procédures stockées pour les 2 tables ici. chose que ne sais pas faire pour plusieurs table.

Discussions similaires

  1. Mettre à jour des tables avec un trigger
    Par Titouf dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/01/2008, 15h57
  2. Réponses: 1
    Dernier message: 26/03/2007, 01h20
  3. Réponses: 2
    Dernier message: 07/12/2005, 13h25
  4. Mise à jour des tables liées + TIMESTAMP
    Par Homegrown dans le forum Access
    Réponses: 11
    Dernier message: 25/04/2005, 21h52

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