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 :

Base de Données ou objet en lecture seule?


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut Base de Données ou objet en lecture seule?
    PB2 : ici Access me dit que ma BdD ou l'objet est en lecture seule.

    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
    Set Db = CurrentDb
    
        SqlFichier = "SELECT T_FICHIER.NOMFICH, T_FICHIER.ASSIGNATION, T_FICHIER.LONGUEUR, T_TYPE.LIBELLETYPE, T_DESCRIPTION.NOMDES, " & _
                        "T_CLE.LONGUEUR, T_CLE.POSITION, T_CLE.DUPLIQUE " & _
                        "FROM T_TYPE, T_DESCRIPTION, T_FICHIER, T_CLE " & _
                        "WHERE T_FICHIER.NUMFICH = T_CLE.NUMFICH " & _
                        "AND T_DESCRIPTION.NUMDES = T_FICHIER.NUMDES " & _
                        "AND T_TYPE.NUMTYPE = T_FICHIER.NUMTYPE;"
                        
        
        Set RsFichier = Db.OpenRecordset(SqlFichier, dbOpenDynaset)
    
    If RsFichier.NoMatch Then        
        If MsgBox("Le fichier " & ZT_NomFich & _
                        " n'est pas référencé, voulez-vous l'ajouter maintenant?", vbQuestion & vbYesNo, "Ajouter un fichier") = vbYes Then
                        
    'peux allez plus loin pas pb de lecture seule
                        
            RsFichier.AddNew
                RsFichier.Fields("T_FICHIER.NOMFICH").Value = ZT_NomFich.Text
                RsFichier.Fields("T_FICHIER.ASSIGNATION").Value = ZT_Assignation.Text
                RsFichier.Fields("T_FICHIER.LONGUEUR").Value = ZT_Longueur.Text
                RsFichier.Fields("T_TYPE.LIBELLETYPE").Value = LST_Type.Value
                RsFichier.Fields("T_DESCRIPTION.NOMDES").Value = LST_Description
                
                If LST_Type.Value = "Indexé" Then
                    If ZT_Longueur1.Text <> "" Then
                        RsFichier.Fields("T_CLE.LONGUEUR").Value = ZT_Longueur1.Text
                        RsFichier.Fields("T_CLE.POSITION").Value = ZT_Position1.Text
                        RsFichier.Fields("T_CLE.DUPLIQUE").Value = Duplique1
                        If ZT_Longueur2.Text <> "" Then
                            RsFichier.Fields("T_CLE.LONGUEUR").Value = ZT_Longueur2.Text
                            RsFichier.Fields("T_CLE.POSITION").Value = ZT_Position2.Text
                            RsFichier.Fields("T_CLE.DUPLIQUE").Value = Duplique2
                            If ZT_Longueur3.Text <> "" Then
                                RsFichier.Fields("T_CLE.LONGUEUR").Value = ZT_Longueur3.Text
                                RsFichier.Fields("T_CLE.POSITION").Value = ZT_Position3.Text
                                RsFichier.Fields("T_CLE.DUPLIQUE").Value = Duplique3
                                                    
                                If ZT_Longueur4.Text <> "" Then
                                    RsFichier.Fields("T_CLE.LONGUEUR").Value = ZT_Longueur4.Text
                                    RsFichier.Fields("T_CLE.POSITION").Value = ZT_Position4.Text
                                    RsFichier.Fields("T_CLE.DUPLIQUE").Value = Duplique4
                                    If ZT_Longueur5.Text <> "" Then
                                        RsFichier.Fields("T_CLE.LONGUEUR").Value = ZT_Longueur5.Text
                                        RsFichier.Fields("T_CLE.POSITION").Value = ZT_Position5.Text
                                        RsFichier.Fields("T_CLE.DUPLIQUE").Value = Duplique5
                                    End If
                                End If
                            End If
                        End If
                     End If
                End If
                RsFichier.Fields.Refresh
            End If
    End If
    End Sub

    donc voilà mon code, j'ai ouvert mon Recordset en dynaset pour pouvoir ajouter des valeur dans une table sans requête, procédure algo
    RS.ADDNEW
    RS.Fields
    RS.Fields
    ...
    ...
    ...
    RS.UPDATE

    dans le code je fait un Refresh car c'est qui correspondrais le mieux à l'update, mais est-ce seulement possible de le faire en VBA-Access.
    J'ai aussi essayer avec les autres dbOpen... ou sans et sa ne marche pas mieux.
    ensuite, j'ai vérifier sur mon DD ma base n'est pas en lecture seul, sauf si lorsque l'on travail avec elle s'ouvre en lecture seule!!!
    Mes Question :
    1) est-il possible de faire
    RS.ADDNEW
    RS.Fields
    RS.Fields
    ...
    ...
    ...
    RS.UPDATE
    en VBA?
    2) comment faire pour enlever le pb de lecture seule?
    si vous avez pas tout comprit, j'esseyerais de répondre à vos question, moi j'ai essayer de vous donner un max d'info pour que vous puissiez m'aider.
    à vous.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    toujours personne pour m'aider sur ce problème??

  3. #3
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    1) Oui, bien sûr. Ou RS.Edit si tu veux modifier un enregistrement existant. Ou est-ce que j’ai pas compris la question...?
    Dans ton code tu devrais mettre RsFichier.Update au lieu de RsFichier.Fields.Refresh (.Fields.Refresh s’utilise si tu as changé la structure d’une table).
    Au lieu de RsFichier.fields(“nom”).value=..., tu peux te contenter de RsFichier!nom =... ou RsFichier![nom composé] = ...

    2)Je peux seulement te dire d’étudier soigneusement l’aide sur la méthode OpenRecordset, il y a peut-être une subtilité qui s’applique à ton cas.
    Est-ce que tu as essayé de faire la même chose avec une autre table de la même BdD ? Ca permettrait de savoir si le problème vient du fichier MDB ou de la table en particulier.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    1 ok je m'était trompé en vérifiant un exo de cours lorsque j'ai fait mon code j'était persuader d'avoir écrit correctement, et ben non il y avait le fields qui trainait MERCI

    2 j'essay d'appliquer mon cours, donc je ne pense pas que du coté du recordset sa foir mais je vais essayer un autre truc auquel je viens de penser, dans mon RS il y a plusieurs table est-ce que sa viendrais pas de là?

  5. #5
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Mais oui bien sûr, j’avais pas fait gaffe: tu n’as pas de jointures dans ta requête, c’est pour ça qu'elle ne peut pas être éditée. Essaie de la recopier dans une requête d’Access, tu vas voir qu’elle est bloquée et qu’elle contient probablement des centaines de lignes idiotes.

    Les jointures doivent être incluses dans la clause FROM, pas dans WHERE. La syntaxe correcte est quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_FICHIER.NOMFICH, T_FICHIER.ASSIGNATION, T_FICHIER.LONGUEUR, T_TYPE.LIBELLETYPE, T_DESCRIPTION.NOMDES, T_CLE.LONGUEUR, T_CLE.POSITION, T_CLE.DUPLIQUE
    FROM ((T_FICHIER INNER JOIN T_CLE ON T_FICHIER.NUMFICH = T_CLE.NUMFICH) INNER JOIN T_DESCRIPTION ON T_DESCRIPTION.NUMDES = T_FICHIER.NUMDES) INNER JOIN T_TYPE ON T_TYPE.NUMTYPE = T_FICHIER.NUMTYPE;
    Mais attention: même comme ça, si tes tables sont mal indexées Access continuera probablement de refuser toute modification.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    Moi on ma appris a faire des jointure de 2 façons différente, avec le INNER JOIN ... ON ... (façon access parfaitement incompréhenssible du premier regard 'pour moi') mais je l'essayerais après le test que je suis entraint de faire, et tel que je l'ai faite. La requette n'est pas le pb je l'ai testé et elle marche parfaitement. ayant résolut d'autre problèmes avant, je me panche à nouveau sur celui-ci, j'ai tout séparé dans des jeux d'enregistrement différent pour voir ce qu esa donnera quand à changer les tables pour voir, je préfert attendre d'avoir fini le reste du code. car tout est lié et ce sur quoi sa ause pb c'est de la que tout dépends, merci pour tout aide, je vous avertirais si j'y arriverais.
    sauf si il y d'autre solutions qui pourrais être tester

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    j'ai presque réussi, en séparant les table sa résous partiellemant le problème, car en fait quand je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RS.Addnew
    RS.Fields("NomChamp") = Valeure
    RS.Update
    et que après je fait une recherche dans la table ou l'insertion a dû être effectuer il n'y a rien??
    ai-je oublié quelque chose??
    j'ai rien dit il manquais des ' ' la vleur étant du texte
    je ne met pas tout de suite le tag résolut, j'attend de voir si ma procédure marche comme il faut avant.
    @ toute

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

Discussions similaires

  1. [AC-2010] Erreur '3027' : mise à jour impossible, base ou objet en lecture seule
    Par sangoke dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/07/2013, 12h38
  2. [AC-2010] mettre une base de données access 2010 en lecture seule
    Par mo9rissat dans le forum Runtime
    Réponses: 7
    Dernier message: 06/08/2012, 18h09
  3. Réponses: 5
    Dernier message: 13/11/2008, 13h57
  4. [Access 2003]- erreur 3027 : base ou objet en lecture seule
    Par metallica_fr dans le forum Access
    Réponses: 5
    Dernier message: 15/12/2006, 17h36
  5. [SGBDOO] Base de données orientée objet
    Par Jaona dans le forum Décisions SGBD
    Réponses: 19
    Dernier message: 14/04/2003, 11h07

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