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 :

[ADO2.0][Access] Problème de suppression avec oledbcommandbuilder


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut [ADO2.0][Access] Problème de suppression avec oledbcommandbuilder
    Bonsoir,
    Je suis sur VB2005.
    J'ai une datatable dans un dataset liée à une table sous MsAccess.

    table access = t_CLIENTS
    datatable = dttCLIENTS

    j'ai donc codé un dataadaptater pour remplir ma table par la commande "select * from tbl"

    Tout se passe bien.

    Je fais mes trucs et mes machins pour mettre à jour ma datatable, puis je mets à jour access grâce à un commandbuilder: ça marche nickel.
    Je crée des enregistrements, ça roule.
    Je modifie des enregs, c'est parfait.
    Mais si je veux supprimer, que dalle, rien ne se passe.
    Pas de message d'erreur, seulement aucune suppression.
    J'ai beau chercher, je sèche total !

    Pourtant le code n'est pas sorcier, et le fait que j'arrive à insérer et modifier prouve que je vise bien la bonne table.

    Public adpCLIENTS As New OleDbDataAdapter
    Public Const TABLE_CLIENTS As String = "t_CLIENTS"

    adpCLIENTS.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_CLIENTS, adoBase)
    adpCLIENTS.Fill(dtsO2S, TABLE_CLIENTS)
    dttCLIENTS = dtsO2S.Tables(TABLE_CLIENTS)
    asqlCLIENTS = New OleDbCommandBuilder(adpCLIENTS)
    adpCLIENTS.Update(dttCLIENTS)

    Petite précision, lorsque je mets un espion sur la datatable, l'enregistrement à supprimer n'existe effectivement plus dans la dttCLIENTS.

    Help svp.

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bon, toujours rien trouvé sur le net, je craque et je vais me pieuter.

    Voici ma classe, si quelqu'un pouvait me sortir de là...

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    Option Explicit On
    Option Strict On
     
    Public Class DB
     
        Private m_strBaseAccess As String
        Private strConnectionString As String
        Private adoBase As New OleDb.OleDbConnection
     
        Public dtsO2S As DataSet
     
        Public adpENTREPRISE As New OleDbDataAdapter
        Public adpDIRIGEANTS As New OleDbDataAdapter
        Public adpCIBLES As New OleDbDataAdapter
        Public adpCLIENTS As New OleDbDataAdapter
        Public adpSTATUTS As New OleDbDataAdapter
        Public adpPAYS As New OleDbDataAdapter
        Public adpMAXS As New OleDbDataAdapter
     
        Public dttENTREPRISE As New DataTable
        Public dttDIRIGEANTS As New DataTable
        Public dttCIBLES As New DataTable
        Public dttCLIENTS As New DataTable
        Public dttSTATUTS As New DataTable
        Public dttPAYS As New DataTable
        Public dttMAXS As New DataTable
     
        Public relEntDir As DataRelation
        Public relPayEnt As DataRelation
        Public relEntCib As DataRelation
        Public relStaCib As DataRelation
        Public relCliCib As DataRelation
     
        Public asqlENTREPRISE As OleDbCommandBuilder
        Public asqlDIRIGEANTS As OleDbCommandBuilder
        Public asqlCIBLES As OleDbCommandBuilder
        Public asqlCLIENTS As OleDbCommandBuilder
        Public asqlSTATUTS As OleDbCommandBuilder
        Public asqlPAYS As OleDbCommandBuilder
     
        Public Sub New(ByVal strBase As String)
            m_strBaseAccess = strBase
            Call MiseEnCacheDeLaBase()
        End Sub
     
        Private Sub MiseEnCacheDeLaBase()
     
            Try
                adoBase.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_strBaseAccess
                adoBase.Open()
     
                Call DefinitionsSQL()
     
                dtsO2S = New DataSet("O2Sdata")
     
                Call ChargerDataset()
                Call DefinitionsDatatables()
                Call AjouterCles()
                Call AjouterRelations()
     
                dttCIBLES.Columns.Add("CLIENT", GetType(String), "Parent(relCliCib).NOM")
     
                adoBase.Close()
     
            Catch ex As Exception
                MsgBox("Impossible d'ouvrir la base" & vbCrLf & ex.Message)
                adoBase.Close()
            End Try
     
        End Sub
     
        Private Sub DefinitionsSQL()
            adpENTREPRISE.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_ENTREPRISES & " WHERE SUPTECH = '0'", adoBase)
            adpDIRIGEANTS.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_DIRIGEANTS & " WHERE SUPTECH = '0'", adoBase)
            adpCIBLES.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_CIBLES & " WHERE SUPTECH = '0'", adoBase)
            adpCLIENTS.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_CLIENTS, adoBase)
            adpSTATUTS.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_STATUTS, adoBase)
            adpMAXS.SelectCommand = New OleDbCommand("SELECT * FROM " & VUE_MAXS, adoBase)
            adpPAYS.SelectCommand = New OleDbCommand("SELECT * FROM " & TABLE_PAYS, adoBase)
        End Sub
     
        Private Sub ChargerDataset()
            adpENTREPRISE.Fill(dtsO2S, TABLE_ENTREPRISES)
            adpDIRIGEANTS.Fill(dtsO2S, TABLE_DIRIGEANTS)
            adpCIBLES.Fill(dtsO2S, TABLE_CIBLES)
            adpCLIENTS.Fill(dtsO2S, TABLE_CLIENTS)
            adpSTATUTS.Fill(dtsO2S, TABLE_STATUTS)
            adpPAYS.Fill(dtsO2S, TABLE_PAYS)
            adpMAXS.Fill(dtsO2S, VUE_MAXS)
        End Sub
     
        Private Sub DefinitionsDatatables()
            dttENTREPRISE = dtsO2S.Tables(TABLE_ENTREPRISES)
            dttDIRIGEANTS = dtsO2S.Tables(TABLE_DIRIGEANTS)
            dttCIBLES = dtsO2S.Tables(TABLE_CIBLES)
            dttCLIENTS = dtsO2S.Tables(TABLE_CLIENTS)
            dttSTATUTS = dtsO2S.Tables(TABLE_STATUTS)
            dttPAYS = dtsO2S.Tables(TABLE_PAYS)
            dttMAXS = dtsO2S.Tables(VUE_MAXS)
        End Sub
     
        Private Sub AjouterCles()
            dttENTREPRISE.Constraints.Add("priEnt", dttENTREPRISE.Columns(colENTREPRISE.Identifiant), True)
            dttDIRIGEANTS.Constraints.Add("priDir", dttDIRIGEANTS.Columns(colDIRIGEANTS.DIR_Identifiant), True)
            dttCIBLES.Constraints.Add("priCib", dttCIBLES.Columns(colCIBLES.Identifiant), True)
            dttCLIENTS.Constraints.Add("priCli", dttCLIENTS.Columns(colCLIENTS.Identifiant), True)
            dttSTATUTS.Constraints.Add("priSta", dttSTATUTS.Columns(ColSTATUTS.Statut), True)
            dttPAYS.Constraints.Add("priPay", dttPAYS.Columns(colPAYS.PaysCourt), True)
        End Sub
     
        Private Sub AjouterRelations()
            Try
                relEntDir = New DataRelation("relEntDir", dttENTREPRISE.Columns(colENTREPRISE.Identifiant), dttDIRIGEANTS.Columns(colDIRIGEANTS.DIR_IdEntreprise))
                relPayEnt = New DataRelation("relPayEnt", dttPAYS.Columns(colPAYS.PaysCourt), dttENTREPRISE.Columns(colENTREPRISE.Pays))
                relEntCib = New DataRelation("relEntCib", dttENTREPRISE.Columns(colENTREPRISE.Identifiant), dttCIBLES.Columns(colCIBLES.IdEntreprise))
                relStaCib = New DataRelation("relStaCib", dttSTATUTS.Columns(ColSTATUTS.Statut), dttCIBLES.Columns(colCIBLES.Statut))
                relCliCib = New DataRelation("relCliCib", dttCLIENTS.Columns(0), dttCIBLES.Columns(colCIBLES.IdClient), True)
     
                dtsO2S.EnforceConstraints = True
     
     
                dtsO2S.Relations.Add(relEntDir)
                dtsO2S.Relations.Add(relPayEnt)
                dtsO2S.Relations.Add(relEntCib)
                dtsO2S.Relations.Add(relStaCib)
                dtsO2S.Relations.Add(relCliCib)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Public Sub SynchroniserAccess()
     
            Try
                adoBase.Open()
            Catch
                MsgBox("Problème pour ouvrir la base" & vbCrLf & "Mise à jour annulée", MsgBoxStyle.Critical, "Ouverture de la base")
            End Try
     
            Try
     
                asqlENTREPRISE = New OleDbCommandBuilder(adpENTREPRISE)
                asqlDIRIGEANTS = New OleDbCommandBuilder(adpDIRIGEANTS)
                asqlCIBLES = New OleDbCommandBuilder(adpCIBLES)
                asqlCLIENTS = New OleDbCommandBuilder(adpCLIENTS)
                asqlSTATUTS = New OleDbCommandBuilder(adpSTATUTS)
                asqlPAYS = New OleDbCommandBuilder(adpPAYS)
     
                adpSTATUTS.Update(dttSTATUTS)
                MsgBox(adpCLIENTS.Update(dttCLIENTS))
                adpENTREPRISE.Update(dttENTREPRISE)
                adpDIRIGEANTS.Update(dttDIRIGEANTS)
                adpCIBLES.Update(dttCIBLES)
            Catch ex As Exception
                MsgBox("Problème de mise à jour" & vbCrLf & ex.Message)
            End Try
     
            adoBase.Close()
     
        End Sub
     
    End Class

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Ouarf, j'en ris, mais je devrais peut-être en pleurer...
    J'ai trouvé mon problème, et ça ne viens pas vraiment d'ADO.

    Je virais les données de ma datatable par la méthode dtt.rows.remove(row)

    on enlève bien de la table, mais il n'y a pas de filtrage de suppression. Sûrement une subtilité ou un besoin qu'il me reste à expliquer.

    Pour supprimer et marquer à supprimer, il faut utiliser row.delete

    Et là, c'est bonheur !

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

Discussions similaires

  1. Petit problème de suppression avec un requête
    Par Erakis dans le forum Requêtes
    Réponses: 8
    Dernier message: 12/10/2007, 15h54
  2. [Access] problème de sauvegarde avec suppression
    Par Malown dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2007, 17h16
  3. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  4. Réponses: 3
    Dernier message: 11/10/2004, 17h26
  5. [Access]Problème de sript avec LIKE
    Par Oberown dans le forum ASP
    Réponses: 3
    Dernier message: 06/10/2004, 17h55

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