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.NET Discussion :

Réplication synchronisation Access qui marche sur Win 7 64 et pas sur les autres OS Windows


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut Réplication synchronisation Access qui marche sur Win 7 64 et pas sur les autres OS Windows
    Bonsoir

    Je me sers de la réplication Access pour synchroniser deux bases .mdb

    Sur l'ordi de develloppement (Windows 7 64bits) mon code marche bien.

    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
        Sub TwoWayDirectSync(ByVal strReplica1 As String, ByVal strReplica2 As String)
     
     
            Dim repReplica As New JRO.Replica
            Dim CONN As New ADODB.Connection
     
    OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & strReplica1 & "")
     
     
            CONN.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strReplica1 & "")
     
     
     
            repReplica.ActiveConnection = CONN
     
            Try
                repReplica.Synchronize(strReplica2, JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect)
                CONN.Close()
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
        End Sub

    Une fois l'appli mise sur un autre ordi j'ai une erreur qui apparait.

    D'aprés ce que j'ai compris de l'erreur cela proviendrait de win 64 qui bidouillerait le connection Id etc... du coup il ne serait plus reconnu par les autres xp, vista etc...

    voir ici pour les détails je suis dans le cas "message d'erreur 4"
    http://support.microsoft.com/kb/2517589/fr


    D'aprés microsoft soit je place sur les ordis finaux un fichier pour patcher les ordi 32bits (mais Microsoft ne conseil pas de le faire)

    Soit je traduis ce code en VB.net, et la j'ai grandement besoin d'un coup de main car je ne maitrise pas suffisamment pour m'en sortir seul.

    Je pense que c'est ici que le problème se trouve.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim CONN As New ADODB.Connection
    Merci d'avance à qui pourra m'aider

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    ton lien dit :
    Les techniques présentées dans cet article doivent uniquement servir comme mesure temporaire pendant la migration vers ADO.NET
    donc utilises ADO.NET plutot qu'ADO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim conn as new system.data.oledb.oledbconnection
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Merci Pol63 d'avoir pris du temps pour te pencher sur mon problème.

    C'est justement parce que le lien disait ca que je n'ai même pas voulu essayer d'installer le fichier qu'il donne sur les ordi 32 bits.

    J'avais bien essayé de faire la connection comme tu l'as it mais le probleme se retrouve du coup un peu plus loin.

    cela donne ca

    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
      Sub TwoWayDirectSync(ByVal strReplica1 As String, ByVal strReplica2 As String)
         Try
            Dim repReplica As New JRO.Replica
     
            Dim CONN As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & strReplica1 & "")
     
            CONN.Open()
     
            repReplica.ActiveConnection = CONN
     
     
                repReplica.Synchronize(strReplica2, JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect)
                CONN.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
        End Sub
    Mais a ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     repReplica.ActiveConnection = CONN
    j'ai cette erreur:
    Le cast spécifié n'est pas valide.
    Pourtant il faut bien que repReplica devienne la connexion active pour pouvoir dans l’instruction suivante synchroniser la connexion active avec repReplica2

    edit:
    Est ce que cette instruction ainsi que celle qui me donne une erreur ne serait pas uniquement sur ADO?
    Dim repReplica As New JRO.Replica
    Si oui connais tu la class qui permet de synchroniser deux BDD avec ado.net

    Merci d'avance

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    en effet, jro.replica n'est fait que pour un ado connection et non ado.net
    et access n'est plus que moyennement supporté par microsoft ...

    si tu peux, change de base de données pour une vraie base de données (sql server express (moteur réseau) ou sql server ce (base fichier) sont gratuits)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Pas possible de changer de BDD il me faut trouver une autre solution.

    C'est quand même fou qu'ado.net ne supporte pas la réplication access.

    Aurais tu une autre piste?
    Merci

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    Citation Envoyé par gilles_906 Voir le message
    C'est quand même fou qu'ado.net ne supporte pas la réplication access.
    c'est une question de point de vue
    pour moi ce qui est fou c'est qu'access existe encore et soit encore utilisé ...
    quand on a testé un vrai sgbdr, on comprend pourquoi access n'en est pas un !

    Citation Envoyé par gilles_906 Voir le message
    Aurais tu une autre piste?
    il faudrait que je comprenne exactement le souci ...
    vu que tu n'utilises pas ado.net et que ca bug, je pourrais supposer que vb.net n'est pas le problème ici, mais indirectement windows 7

    il faudrait donc identifier qui cause réellement le dysfonctionnement (vb.net ? ms jet ? ado ? jro ?)
    et remplacer cette partie
    vb.net => un petit exe vb6 qui ne fera que ca appelé par ton exe vb.net
    ms jet => je ne vois pas trop, jet est fournit avec windows sur les versions récentes
    ado => pas d'idée
    jro => il y a aussi plusieurs versions mais ca doit être fournit avec windows et un downgrade n'est peut etre pas possible
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    ADO.net je ne pense pas, car je l'utilise ailleurs dans mon prog pour me connecter a access et je n'ai pas de soucis.

    Je pense que le problème viens de ca (voir le lien plus bas)

    Dans Windows 7 et versions antérieures de Windows, le _Connection IID est 00000550-0000-0010-8000-00AA006D2EA4.
    Dans Windows 7 SP1, le _Connection IID est 00001550-0000-0010-8000-00AA006D2EA4 et l'IID pour _Connection_Deprecated est 00000550-0000-0010-8000-00AA006D2EA4.

    Si votre application utilise la liaison anticipée à _Connection, le nouveau IID est stocké dans l'application binaire pendant la compilation. Cela provoque une erreur lors de l'application s'exécute sur un système d'exploitation de bas niveau, car l'IID n'existe pas.

    Voila ce que je fais excatement avec ma BDD access.

    Des réplicats se trouve sur des ordis portables, un autre replicat se trouve sur mon espace internet et est zippé.

    Chaque ordi peut modifier comme il veut la BDD, des que l'ordi est connecté a internet:
    Il télécharge le replicat qui est son mon espace internet
    il synchronise son replicat avec celui téléchargé
    il renvoie sur l'espace internet le replicat qu'il avait téléchargé auparavent.

    Avantages pour moi:
    j'ai la bdd a quatre endroit différents, pour la perdre il faudrait que je me fasse volé tous les ordis et que les serveurs et sauvegarde d'ovh plante, et tout ca en meme temps.
    Chaque ordi est entièrement autonome et contient toutes les données.

    J'ai déja développée un autre programme sous vba qui gère la bdd access, si j'en change l'autre programme ne fonctionnera plus.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    à défaut de solution, je peux tout même ajouter, que quand on a une appli qui utilise des vieux standards, elle doit rester sur des vieux standard, donc éviter windows 7 sp1 s'il est trop récent pour les .mdb (dont la dernière version date de 2003 il me semble)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Vrai

    S'il faut je peux faire évoluer la BDD en la passant sous access 2007 mais cela ne va pas changer mon probleme.

    Pour ce qui est des ordi sous win 7, tu ne trouve plus que cela dans le commerce. Je ne vais pas me taper les réinstallations de xp sur des ordis neuf

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    il me semble que depuis 2007 access fait des .accdb au lieu des .mdb, c'est qu'il y a surement eut des modifications
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Effectivement il y a eu des modifications mais pas a ce niveau il me semble.

    Par contre je viens de demander a un copain qui a VS de me compiler les sources sur son ordi qui est sous vista 32bits.

    Eh bien l'exe généré fonctionne sur tous les OS y compris win7 64bits

    cela provient donc bien du mien qui est sous 64bits et qui a la compilation modifie quelque chose (voir explication plus haut de microsoft) du coup ADO n'est plus reconnu par les autres OS

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    oui ... c'est louche d'enregistrer ce genre de chose à la compilation ...
    mais au moins tu as ta solution, harceler ton copain à chaque fois que tu voudras compiler
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Ouais ca va pas durer

    Pas contre j'ai essayé de mettre en place le fichier téléchargé que microsoft donne dans sa page.
    D'aprés ce que j'ai compris il faut l'installer sur l'ordi xp 32bits, c'est bien ca? parce que je l'ai fait j'ai vérifier les clés mais j'ai toujours mon erreur.

    Puis en relisant, j'ai maintenant un doute, il ne faudrait pas installer ce fichier plutôt sur mon ordi de développement?

    http://support.microsoft.com/kb/2517589/fr

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    c'est pas évident de le dire
    mais tu peux tenter sur ton poste en win7 sp1 pour être fixé

    sinon la méthode 2 de la liaison tardive est une bonne piste aussi
    je pense que le principe et un declare sub/declare function en spécifiant sur quelle dll ca va
    comme ca il n'y a pas de vérification à la compilation
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    oui comme tu dis sur quelle dll ca va?

    Tu en connais une de dll qui fait ca?

    Je suis entrain d'essayer d'inscrire les deux fichiers sur mon ordi mais ca ne marche pas

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    oui sur la dll qui contient JRO
    dans vs, j'ai du ajouté une référence pour pouvoir taper JRO.replica
    c'est cette dll qui contient ce qu'il te faut
    donc la question n'est pas quelle dll mais comment

    après je suis pas expert en liaison tardive, en P invoke et autres éloignements de .net
    en théorie ce n'est pas quelque chose de très recommandé (surtout à grande échelle en fait), mais quand c'est utile, il ne faut pas hésiter à l'utiliser

    si tu veux plus de pistes sur le sujet, je te conseille de rouvrir un topic "créer un objet d'une dll par liaison tardive" et expliquant que tu veux un objet qui est dans une dll COM car c'est recommandé par la page de microsoft (à citer) pour régler ton problème
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Ah oui j'avais pas pensé a celle la de dll vu qu'elle ne fonctionne pas avec ado.net.
    Il faudra que je l'appelle avec ADO "en liaison tardive" sauf que je ne sais pas ce que ça veut dire

    Je vais ouvrir un autre topic sur tes conseils mais j'ai peur d'avoir une ou des réponses complexes.

    En tout cas merci d'avoir pris du temps pour mon soucis.


    PS: Une fois débloqué les deux fichiers de microsoft j'ai pu les inscrire sur l'ordi.
    Me reste a voir si cela fonctionne sur un ordi de bas niveau

    Je reviendrais donner le resultat

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    une liaison tardive c'est utiliser une dll sans la référencer, sans typer

    par exemple, tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim b as new button
    b.left = 50
    parce que system.windows.forms.dll est en référence dans le projet

    sans avoir la dll, dim b as new button ne serait pas reconnu et ca ne voudrait pas compiler
    il faudrait donc un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim b as object 
    b = createobject("telle dll.tel classe")
    pour les membres je ne sais pas à quoi ca ressemble, mais b.left = 50 serait aussi refusé car object n'a pas de .left
    mais sachant que b est de tel type et qu'il a un .left, tu peux aussi par liaison tardive dire que tu veux mettre 50 dans une propriété qui s'appelle left

    au final ca ne prend pas beaucoup plus de lignes, le seul truc c'est que ce n'est pas vérifié à la compilation mais à l'exécution, donc un faute de frappe fera planter le programme (ou la dll non présente)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Points : 122
    Points
    122
    Par défaut
    Super l'explication, je vais me coucher moins bête ce soir

    Cela n'a pas l'air d’être très compliqué, reste par contre a ce que la dll soit documentée, sinon bonjour l'angoisse pour connaitre ses class et ses propriétés

  20. #20
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    on fait ca avec des classes documentées en général oui

    mais ce que j'essaie de dire depuis le début, c'est que tu la connais la dll c'est celle que tu utilises actuellement pour faire la synchro

    si j'ai bien suivi le problème, c'est la ligne replica.synchronise qui pose problème
    le but sera alors d'appeler cette ligne en liaison tardive
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/05/2008, 15h59
  2. [WD9] Executable ne "tourne" pas sur win 98
    Par hamdi amine dans le forum WinDev
    Réponses: 1
    Dernier message: 01/04/2008, 15h14
  3. Réponses: 6
    Dernier message: 28/05/2007, 10h26
  4. script qui marche dans la console firebug mais pas a l'execution
    Par xclam dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/05/2007, 12h16
  5. Réponses: 4
    Dernier message: 30/08/2006, 08h37

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