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 6 et antérieur Discussion :

ADO: Modification d'une base


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut ADO: Modification d'une base
    Bonjour,

    j'essaie de supprimer un enregistrement d'une table avec une requete SQL toute simple du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM NOMS WHERE ID=1
    Si j'utilise une source de données ODBC avec un DSN, aucun problème.
    Si je me connecte directement au fichier .MDB avec le provider MS Jet 4, meme en mode "adModeShareDenyWrite" côté serveur, j'obtiens toujours cette erreur:
    "Impossible de supprimer dans les tables spécifiées".

    J'ai pourtant besoin de pouvoir utiliser les 2 types de connexion (DSN ou fichier+provider) pour modifier ma base.
    Après avoir longuement cherché sur ce site et d'autres, rien ne m'explique clairement la raison.

    Quelqu'un peut-il m'aiguiller?

    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Par défaut
    Peux tu nous montrer un bout de code pour pouvoir t'aider

  3. #3
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Peut être qu'une relation d'integrité empeche la supression.

    Exemple classique : impossible de supprimer un client si il y a des commandes en cours pour lui !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    Oui mais non...
    ma base est quasi-vide.

    Pour moi, c'est clairement un problème soit de provider, soit de cursorlocation, car les modifs se passent bien lorsque je me connecte à la base par les sources de données ODBC du panneau de config (DSN). Il s'agit evidemment du même fichier. Donc aucun rapport avec son contenu et ses relations.

    Si d'autres idées vous viennent, n'hésitez pas...

    Voici ma fonction de connexion:

    Elle est appelée sous différentes formes par une autre procédure.
    J'utilise comme provider "Microsoft.Jet.OLEDB.4.0" et la base est un fichier MDB (Access 2000).

    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
     
    Function ConnexionBase(DSN As String, CheminFichierMDB As String, Provider As String, GenererErreur As Boolean, Optional DSN_Manuel As Boolean = False, Optional LectureSeule As Boolean = False) As Boolean
     
    ' COnnexion à une base de données soit par DSN soit sur un fichier directement.
    ' 3 méthodes:
    ' DSN normal: on fourni uniquement un DSN
    ' Direct: on fourni un CheminFichierMDB et un Provider
    ' Manuel: on fourni en lieu et place du DSN la chaine de connexion à utiliser, sans manipulation par le programme. Il faut activer DSN_Manuel
     
    ' Si DSN et CheminFichier+Provier fournis, tente en priorité le DSN, sinon, tente le fichier+Provider (pilote)
    ' Renvoit Vrai si reussite.
     
    On Error GoTo Erreur
    Dim ParametresConnexionOK As Boolean, ConnectionString As String
    ParametresConnexionOK = False
    'Cree l'objet au moment de la connexion
    Set BDD = New ADODB.Connection
     
     
     
    If DSN <> "" Then
        'Utilise le DSN
        'Connexion au DSN (Pas besoin de fournir le fichier ni le pilote (défini dans Panneau de Config, Outils d'administration, Sources de données (ODBC))
        If DSN_Manuel Then
            ConnectionString = DSN 'Mode manuel (DSN contient la chaine de connexion originale)
        Else
            ConnectionString = "DSN=" & DSN  'Mode assisté: DSN est uniquement le nom de la base de donnée
        End If
     
        ParametresConnexionOK = True
    ElseIf (CheminFichierMDB <> "") And (Provider <> "") Then
        'Utilise le fichier directement avec le pilote specifié
        If FileObject.FileExists(CheminFichierMDB) Then
            'Définition du pilote de connexion
            ' Si chaine incorrecte (min/maj, version..), il y aura une erreur
            ' Pour info, si on arrive à connecter GeoConcept à une base, il suffit de copier la chaine "Provider" qu'il utilise.
            BDD.Provider = Provider
     
            'Connexion au fichier MDB:
            ConnectionString = CheminFichierMDB
            ParametresConnexionOK = True
        Else
            Erreur "ConnexionBase", 0, "Infos d'accès à la base de données incorrectes:" & Chr(10) & "Fichier: '" & CheminFichierMDB & "'" & Chr(10) & "Provider: '" & Provider & "'" & Chr(10) & "Vérifiez ces paramètres dans la configuration de ce programme.", vbExclamation
        End If
    Else
    End If
     
     
    If ParametresConnexionOK Then 'Tente de se connecter?
        If Not LectureSeule Then
            BDD.Mode = adModeShareDenyWrite  'Acces en ecriture, restreindre en ecriture
        Else
            BDD.Mode = adModeRead 'Lecture seule
        End If
        BDD.CursorLocation = adUseServer 'Demande une connexion coté serveur (par defaut, deja coté serveur...)
        BDD.ConnectionString = ConnectionString
        BDD.Errors.Clear
        BDD.Open
     
        If BDD.State = 1 Then
            ConnexionBase = True 'en cas d'erreur on n'arrive meme pa sici
            If LectureSeule Then Erreur "ConnexionBase", 1, "La base est actuellement inaccessible en écriture, un accès en lecture seule a cependant été ouvert..." & Chr(10) & "Vous ne pourrez pas effectuer de modification!", vbInformation, True
        End If
    End If
     
    Erreur:
    If Err Then
        Dim ErreurN As Long
        ErreurN = BDD.Errors.Item(BDD.Errors.Count - 1).NativeError
        Erreur "ConnexionBase", Err.Number, Err.Description & " (" & ErreurN & ")" & Chr(10) & "ConnectionString=""" & ConnectionString & """", vbExclamation, GenererErreur
        ' Je ne suis pas bien sur du fait que le code -2147467259 signifie que l'acces est refusé en ecriture...meme ca semble marcher malgré tout.
        If (ErreurN = -536937472) And (LectureSeule = False) Then 'Tente de se connecter avec memes parametres en lecture seule
            ConnexionBase = ConnexionBase(DSN, CheminFichierMDB, Provider, GenererErreur, DSN_Manuel, True)
        End If
    End If
     
    End Function

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 143
    Par défaut
    Je n'ai jamais eu ce genre de problème mais je n'utilise pas tout à fait la même méthode de connexion.

    A titre d'information essai d'ouvrir la base en mode exclusif pour faire la suppression afin de voir si ce n'est pas un problème de droit d'accès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        If Not LectureSeule Then
            BDD.Mode = adModeShareExclusive 'Acces en mode exclusif
        Else
            BDD.Mode = adModeRead 'Lecture seule
        End If
    Même si cette solution ne conviens pas à ce que tu veux faire cela nous permettra déjà de mettre ce problème de coté si ça ne fonctionne pas en mode exclusif afin de nous concentrer sur les autres éléments de ta connexion.

    Edit : ce n'est pas un problème de provider car j'utilise également "Microsoft.Jet.OLEDB.4.0" pour les bases Access 2000 sans soucis

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    A titre d'information essai d'ouvrir la base en mode exclusif pour faire la suppression afin de voir si ce n'est pas un problème de droit d'accès
    Bien vu Cravis!

    Ca fonctionne en mode adModeShareExclusive.

    Maintenant, des idées pour obtenir cet accès en écriture sans monopoliser le fichier ?

Discussions similaires

  1. [ADO] Schema d'une base
    Par eric.pommereau dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/09/2006, 17h43
  2. Modification d'une base
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 25/07/2006, 08h28
  3. Modification d'une base de donnée
    Par scorpion37 dans le forum C++Builder
    Réponses: 70
    Dernier message: 16/06/2006, 09h08
  4. Probleme de mise à jour et de modification d'une base
    Par flambo88 dans le forum Requêtes
    Réponses: 17
    Dernier message: 07/12/2005, 14h27
  5. Modification d'une base Access avec MySQL
    Par Wyatt dans le forum Administration
    Réponses: 2
    Dernier message: 07/01/2005, 19h20

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