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

Access Discussion :

[DAO]erreur d'ecriture


Sujet :

Access

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut [DAO]erreur d'ecriture
    bonjours,

    j'ai une erreur lorsque j'essaie d'ecrire sur ma BDD depuis Excel.Où est l'erreur (ça doit venir d'un probleme de droit d'ecriture) ?

    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
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    Option Explicit
     
    Public MaBDD As String
    Public MaTable As String
     
    Public MaConnexion As DAO.Database
    Public MonRecordset As DAO.Recordset
    Public MonField As DAO.Field
     
    Public MaRequete As String
     
    Sub OuvrirConnection(Optional MonMotDePasse As String = "")
    'Se connecte à la BDD
    'MaBDD = Chemin d'acces à la BDD
     
        Dim MonMessageErreur As String
     
        On Error GoTo ErreurOuvrirConnection
     
        ' Ouverture de la base de données
        Set MaConnexion = DBEngine.OpenDatabase(MaBDD, False, False, "MS Access;PWD=" & MonMotDePasse)
     
        Exit Sub
     
    ErreurOuvrirConnection:
        MonMessageErreur = "BDD : " & MaBDD & vbCr & Err.Description
        MsgBox MonMessageErreur
        End
    End Sub
     
    Sub ExecuteRequete()
     
        Dim MonMessageErreur As String
     
        On Error GoTo ErreurExecuteRequete
        Set MonRecordset = MaConnexion.OpenRecordset(MaRequete)
     
        Exit Sub
     
    ErreurExecuteRequete:
        MonMessageErreur = "BDD : " & MaBDD & vbCr & _
                           "Table : " & MaTable & vbCr
     
        MonMessageErreur = MonMessageErreur & vbCr & Err.Description
     
        MsgBox MonMessageErreur
        End
    End Sub
     
    Function RecupereRecordset() As Collection
        Dim MaCollection1 As Collection
        Dim MaCollection2 As Collection
        Dim MonElement1 As Variant
        Dim MonElement2 As Variant
     
        Set MaCollection2 = New Collection
     
        'il n'y a pas d'element dans le Recordset
        If MonRecordset.EOF And MonRecordset.BOF Then
            Set RecupereRecordset = Nothing
            Exit Function
        End If
     
        'initialise le pointeur (peut éviter certains bug)
     
        MonRecordset.MoveLast
        MonRecordset.MoveFirst
     
        Do Until (MonRecordset.EOF)
            Set MaCollection1 = New Collection
     
            For Each MonElement1 In MonRecordset.Fields
                MaCollection1.Add MonElement1.Value
            Next MonElement1
     
            MaCollection2.Add MaCollection1
            MonRecordset.MoveNext
        Loop
     
        Set RecupereRecordset = MaCollection2
    End Function
     
    Sub FermeConnection()
        On Error Resume Next
        MonRecordset.Close
        Set MonRecordset = Nothing
     
        MaConnexion.Close
        Set MaConnexion = Nothing
        On Error GoTo 0
    End Sub
     
    Sub RequeteRecherche(MonElement As String, Optional MaColonne As String, Optional NbreElement As Integer = 0, Optional NomTable As String = "")
    'recherche d'un ou plusieurs elements
     
        'active la table par defaut
        If NomTable = "" Then
            NomTable = MaTable
        End If
     
        If NbreElement > 0 Then 'renvoie n elements
            MaRequete = "SELECT TOP " & NbreElement & " * FROM " & NomTable
        Else 'renvoie tous les elements
            MaRequete = "SELECT * FROM " & NomTable
        End If
     
        If MonElement <> "*" Then ' n'affiche pas tous les elements
            MaRequete = MaRequete & " WHERE " & MaColonne & "='" & MonElement & "'"
        End If
     
    End Sub
     
    Sub RequeteAjout(TableauValeur As Collection)
        Dim Valeur As String
        Dim i As Integer
     
        Valeur = "'" & TableauValeur(1) & "'"
        For i = 2 To TableauValeur.Count
            Valeur = Valeur & ", '" & TableauValeur(i) & "'"
        Next i
     
        MaRequete = "INSERT INTO " & MaTable & " VALUES (" & Valeur & ")"
    End Sub
     
    Sub RequeteSupprime(Optional MonElement As String = "", Optional MaColonne As String = "", Optional NomTable As String = "")
    'recherche d'un ou plusieurs elements
     
        'active la table par defaut
        If NomTable = "" Then
            NomTable = MaTable
        End If
     
        If MonElement = "" Or MaColonne = "" Then 'efface la table complete
            MaRequete = "DELETE * FROM " & NomTable
        Else 'efface certains eleements
            MaRequete = "DELETE * FROM " & NomTable & " WHERE " & MaColonne & "='" & MonElement & "'"
        End If
    End Sub
     
    Sub RequeteModifie(MonElement1 As String, MaColonne1 As String, MonElement2 As String, MaColonne2 As String)
        'là ou il y a MonElement dans la colonne MaColonne, on remplace MaColonne2 par MonElement2
     
        MaRequete = "UPDATE " & MaTable & " SET " & MaColonne2 & " = '" & MonElement2 & "' WHERE " & MaColonne1 & "='" & MonElement1 & "'"
    End Sub
     
    Sub RequeteNomTable()
    'renvoie le nom des tables qui sont dans la BDD
     
        MaRequete = "SELECT Name FROM MSysObjects WHERE type=1"
        'MaRequete = "EXEC sp_columns 'Essai'"
     
    End Sub
     
    Sub Main()
     
        Dim MaCollection As Collection
        Dim MaCollection1 As Collection
     
        MaBDD = "c:\echange\bd1.mdb"
        MaTable = "Essai"
     
        Call OuvrirConnection
     
        '------ recherche nom des tables -----
        'Call RequeteNomTable
        'Call ExecuteRequete
     
        '-------- recherche element ------------
        Call RequeteRecherche("Val300", "Valeur", 1)
        Call ExecuteRequete
     
        Set MaCollection = RecupereRecordset
     
        '-------- Ajout ------------
        Set MaCollection1 = New Collection
     
        MaCollection1.Add "Ref12cs"
        MaCollection1.Add "Val"
        MaCollection1.Add "Des"
     
        Call RequeteAjout(MaCollection1)
        Call ExecuteRequete
     
        '------- suppression d'un element ----
        'Call RequeteSupprime("Réf20", "Reference")
        'Call ExecuteRequete
     
        '------- suppression de tous les elements ----
        'Call RequeteSupprime
        'Call ExecuteRequete
     
        '------- modification de plusieurs elements ----
     
        'Call RequeteModifie("Ref1", "Reference", "Valtoto", "Valeur")
        'Call ExecuteRequete
     
        'Call FermeConnection
    End Sub

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Quel est le message d'erreur et sur quelle ligne ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    lorsque j'execute la sub main, j'ai une erreur dans le Call ExecuteRequete
    (quand j'essaie d'ajouter un element) => j'ai une erreur sur le Set MonRecordset = MaConnexion.OpenRecordset(MaRequete) => operation non valide

  4. #4
    Membre chevronné
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Par défaut
    salut,

    je pense que c'est normal. quand tu appelles ta fonction ExecuteRequete() et que tu crées un recordset de "MaRequete" en fait cette derniere n'est pas encore construite. il y un ordre dans le traitement des instrustruction. de plus je ne vois pas l'interêt de déclarer tes variables en public si tu les utilises dans le même module. Dim (ou private) suffit. à moins que tu les réutilises dans toute l'application.
    nb : attention VBA n'est pas du C.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    je pense que c'est normal. quand tu appelles ta fonction ExecuteRequete() et que tu crées un recordset de "MaRequete" en fait cette derniere n'est pas encore construite
    => c'est à dire ?
    j'utilise bien RequeteAjout pour créer ma requete avant ExecuteRequete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call RequeteAjout(MaCollection1) 
    Call ExecuteRequete
    à moins que tu les réutilises dans toute l'application.
    => tu as tout compris

Discussions similaires

  1. ofstream: detecter les erreurs d'ecriture
    Par Romain93 dans le forum SL & STL
    Réponses: 5
    Dernier message: 27/04/2008, 14h09
  2. [DAO]Erreur sur dbOpenSnapshot
    Par lucienkany dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/03/2007, 14h56
  3. [Sécurité] Erreur d'écriture de session ?
    Par navis84 dans le forum Langage
    Réponses: 1
    Dernier message: 16/04/2006, 00h38
  4. Réponses: 2
    Dernier message: 09/01/2006, 10h04
  5. erreur d'ecriture dans un fichier
    Par fjp dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/07/2005, 12h31

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