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

VBA Access Discussion :

erreur d'exécution '3251' ? opération non autorisée


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 38
    Points
    38
    Par défaut erreur d'exécution '3251' ? opération non autorisée
    Bonjour à tous,
    et déjà merci pour tout ce que j'ai appris en venant ici.
    Débutant en vba sous access, j'ai l'erreur '3251' opération non autorisée pour ce type d'objet.
    en gros,
    suite à un click, je souhaite lire une table [utilisateur] dont la clé est code et pour chaque record dans [utilisateur], je veux faire un FINDFIRST dans une table [utilisation] qui a comme clé code ; date_prestation. Si ce record n'existe pas, je vais l'ajouter dans [utilisation]
    voici le code que je tente d'exécuter :
    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
     
    Private Sub Commande9_Click()
    Dim r_utilisateur As DAO.Recordset
    Dim r_utilisation As DAO.Recordset
    Dim r_utilisation_date As String
    Dim bd As DAO.Database
    Dim critere As String
    Dim test As Integer
     
    test = 17
     
    Set bd = Application.CurrentDb
     
    Set r_utilisation = bd.openrecordset("utilisation", dbopentable, dbreadonly)
    Set r_utilisateur = bd.openrecordset("utilisateur", dbopentable, dbreadonly)
    r_utilisateur.MoveFirst
     
    Do While (r_utilisateur.EOF <> True)
    critere = buildcriteria("code",dbLong, test)
        r_utilisation.FindFirst (critere)  'cette ligne pose problème
        r_utilisateur.MoveNext
    Loop
     
    End Sub

    merci d'avance de me faire bénéficier de votre expérience

  2. #2
    Membre régulier
    Avatar de wape
    Profil pro
    Inscrit en
    Février 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2003
    Messages : 90
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Extrait de l'aide DAO :

    FindFirst, FindLast, FindNext, FindPrevious, méthodes

    Recherche, dans un objet Recordset de type Feuille de réponses dynamique (Dynaset) ou Instantané (Snapshot) le premier enregistrement, le dernier, le suivant ou le précédent qui répond aux critères indiqués et transforme cet enregistrement en enregistrement en cours (espaces de travail Microsoft Jet uniquement).
    La méthode FindFirst ne fonctionnera donc pas avec un Recorset de type Table, tel que tu l'as défini dans ton code
    (cf. paramètre dbopentable). D'autre part, en ouvrant le Recordset en lecture seule (cf. paramètre dbreadonly),
    tu ne pourras pas y ajouter d'enregistrements par la suite.

    Essaye de modiifer la ligne de création du Recordset comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r_utilisation = bd.openrecordset("SELECT * FROM utilisation", dbOpenDynaset)
    Pour tester si l'enregistrement existe (ou pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (...)
    r_utilisation.FindFirst (critere)
    If r_utilisation.NoMatch Then
       'Ajouter l'enregistrement dans la table [utilisation]
    End If
    r_utilisateur.MoveNext
    (...)
    wape

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    un grand merci, j'ai pas encore tout essayé mais c'est vrai qu'hier soir, je dsespérait de pas avoir de réponse et je me suis à nouveau plongé dans le tutoriel et j'avais fais la même conclusion sauf que je ne vois pas ce que je dois mettre si je ne met pas readonly? Appendonly me permet d'aouter sans modifier?? moi je veux et modifier et ajouter si non présent.
    Encore un tout grand merci...petits détails pour vous les boss mais montagne pour les p'tits développeurs => vive les forums!

  4. #4
    Membre régulier
    Avatar de wape
    Profil pro
    Inscrit en
    Février 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2003
    Messages : 90
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Il n'y a rien besoin de mettre à la place de dbreadonly. C'est le paramètre dbOpenDynaset qui
    va permettre l'ajout, la modification et la suppression des enregistrements dans la table sous-jacente.

    wape

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

Discussions similaires

  1. Erreur d'éxécution '3251': Opération non autorisée
    Par maxmusix dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/05/2013, 11h04
  2. Erreur 3251: opération non autorisée..
    Par gbzmt dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/02/2008, 22h01
  3. opération non autorisée erreur '3251'
    Par ttfme dans le forum VBA Access
    Réponses: 0
    Dernier message: 25/01/2008, 13h34
  4. Erreur 3251: Opération non autorisé pr ce type d'objet
    Par Ragnarok85 dans le forum Access
    Réponses: 10
    Dernier message: 14/02/2007, 09h52
  5. Erreur ASP 0104 Opération non autorisée
    Par mister_rom dans le forum ASP
    Réponses: 5
    Dernier message: 08/02/2007, 10h50

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