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 :

Partage tables par vb6 (parfois) désastreux


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 73
    Points
    73
    Par défaut Partage tables par vb6 (parfois) désastreux
    Bonjour à tous !

    Après quelques recherches sur le forum (que je trouve très riche) je n'ai malgré tout pas trouvé de réponse à mon problème :

    Je partage une base access qui se trouve sur un serveur NAS. Mon appli VB6 (je sais, cela commence à faire vieillot... ) accède aux tables par des requêtes SQL. Tout marche bien sur 5 postes en simultané (accès au programme pas permanent).
    Mais parfois (3 fois en un mois tout de même), l'ajout de lignes se passe mal et la table se retrouve corrompue. (tous les champs de la ligne affiche #ERREUR et j'ai <signet non valide> en accès).

    Je ne vais vous demander de déboguer mes requêtes, j'aimerais surtout savoir si le fait de partager cette base (ou je n'utilise pas de formulaires, états ou requêtes enregistrées), malgré un fichier sécurisé.mdw bien configuré et en dehors d'un serveur type SQLserveur peut à priori créer ce type de problème ?

    D'avance merci pour vos réponses...

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 136
    Points : 127
    Points
    127
    Par défaut
    mmmmm. ouais ouais. Ça sent peut-être un bogue copyright Microsoft. Faut dire que Access n'est pas conçu pour les réseaux mais bien pour une bd locale seulement. J'te conseille d'utiliser un SGBD réseau comme MySQL qui est tout à fait offert gratuitement sur le web oubien si tu es un vrai informaticien qui boit du café 24 hres sur 24 (on se comprend) j'te conseille d'utiliser le monstre des non-informaticien nommé Oracle.

    Bonne champ!

  3. #3
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Comment accède tu aux données ? ADO , DAO ?

  4. #4
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 73
    Points
    73
    Par défaut
    Bonjour et merci pour vos réponses.
    J'utilise ADO ( référence msado25.tlb) et la fonction suivante pour mes requêtes insert et update :

    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
    Public Function rqSQL(requete As String) As Boolean
     
    Dim strCnn As String
    Set cnn1 = New ADODB.Connection
    Set rst = New ADODB.Recordset
     
     
    On Error GoTo err_execute
    'ouverture d'une table ou requete SQL
    cnn1.CursorLocation = adUseServer
    cnn1.Open chaine_connection 'Pour info "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & chemin_bd & ";User ID=" & utilisateur & ";SystemDB=" & chemin_mdw & ";"
     
    Dim rst_affected As Long
    cnn1.Execute requete, rst_affected, adCmdText
     
    If rst_affected = 0 Then
    rqSQL = False
    Else
    rqSQL = True
    End If
    cnn1.Close
     
    Exit Function
     
    err_execute:
     
    Call progerror(Err.Description & vbCrLf & requete) 
    rqSQL = False
     
    End Function
    Lorsque l'erreur se produit je n'ai pas de retour False de cette fonction.
    j'ai réfléchis depuis mon premier post et la 1ère réponse , je pense diviser en 3 bases en fonction des usages et limiter ainsi les accès simultanés.
    J'aurais effectivement préféré utiliser mySQL, mais le serveur utilise déjà la combinaison apache-mysql-php pour une autre appli.

    Bonne journée à tous.

  5. #5
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Personnellement j'utiliserais DAO

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 136
    Points : 127
    Points
    127
    Par défaut DAO ou ADO
    ouais vaut-il mieux utiliser DAO ou ADO?

    Voilà la question, mais moi personnellement j'utiliserais ni un ni l'autre voilà pourquoi?

    Depuis très longtemps, un magnifique langage (si vous me le permettez) est arrivé pour communiquer avec une bd. Et oui, je parle du DAO. Maintenant, il y a le ADO et par la suite il est venu le puissant ADO.NET. Si j'aurais le choix je choisirais sans aucune doute le ADO.NET pour la performance avec la communication avec la bd.

    Pour ce qui est de ton problème, peut-être que c'est la façon que tu ajoutes dans une table ou update qui n'est pas correct (dans ta méthode il y a peut-être un bogue copyrithé Microsoft) . Je vais te donner une autre manière.

    cré toi un recorset comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Dim rst as Recordset
    Set rst = tonobjetConnexion.openrecordset (NomTable)
    with rst
     'mode ajout
     rst.addnew
     rst.update
    end with
    sinon tu veux faire un update meme principe sauf que le nom de ta table devient ta requete SQL quand tu ouvres le recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set rst = tonobjetConnexion.openrecordset (SQL)
    with rst
     'mode update modifie ce que tu veux faire
     rst.update
    end with
    j'espère que tu comprends le principe

  7. #7
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    DAO a été spécialement conçu pour travailler avec des bases de données Access. Quant à ADO.Net, il n'est utilisable que sous la plateforme .Net. Pas VB 6, ce qui ne correspond pas du tout au problème

  8. #8
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 73
    Points
    73
    Par défaut
    Bonsoir,
    Merci beaucoup pour vos réponses et suggestions. J'avais commencé le dévelloppement de ce programme il y a quelques temps en utilisant DAO, mais je trouvais ADO plus simple et plus souple.

    Je vais donc pour une partie du programme revenir à DAO : je vais vers les tests et je donnerais les résultats sur la fiabilité des résultats pour marquer la discussion comme résolue.

    Un dernier élément : les erreurs rencontrées semblent venir après répétition de requêtes insertion sur la même table.

    Encore merci !

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    j'ignore pourquoi un grand nombre d'articles et de développeurs VB sont les prescripteurs de ADO même lorsqu'ils ne traitent que des données Access.
    Effectivement DAO est spécialisé et me paraît plus puissant pour gérer des bases Access.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  2. Réponses: 9
    Dernier message: 27/10/2004, 01h31
  3. [sybase] Suppression de tables par lot
    Par Higgins dans le forum Sybase
    Réponses: 2
    Dernier message: 30/09/2004, 16h42
  4. liste des tables par base
    Par rupert dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/05/2004, 09h38
  5. Comment obtenir la description des tables par SQL
    Par rcastaldi dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/03/2004, 14h13

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