VB6 et Access97/Access2000

goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008 - 14 avril 2008 à 16:51
goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008 - 25 avril 2008 à 16:20
Bonjour les gens,



Jusqu'à aujourd'hui j'ai toujours trouvé une solution à mes problèmes en VB6 en fouillant sur ce forum, mais là je suis un peu perdu...

Explication: au boulot, je dois connecter 3 machines sur un PC, afin de vérifier si les pièces sont passées bonnes en lisant un code barre et en vérifiant dans les base de données des machines, via un programme en VB6 déjà existant (servant à générer des étiquettes avec datamatrix), en utilisant l'ADO.
dans form_load():

    DBS.DB1.ConnectionString = strDB1 (string avec le chemin de la base)

    DBS.DB1.Open

    Set cn1 = DBS.DB1

    Set RS1 = New Recordset

    RS1.Open "DataPoste", cn1, adOpenDynamic, adLockReadOnly, adCmdTable

Puis dans une fonction, je fais un MoveFirst
& MoveNext pour vérifier ligne par ligne jusqu'à trouver le bon
numéro.

J'aimerais lire dynamiquement dans les bases, mais je n'y arrive pas. Les pièces passées juste après la connexions sont introuvables, pourtant bien inscrites dans les bases dans les machines
Je suis obligé de refaire une connexion (new recordset...) aux bases, mais elles sont assez conséquentes, les re-connexions sont assez longues (10-15s pour me connecter aux 3 DB).

Peut-on lire dynamiquement dans une base en tant que client dans une base distante?

Merci d'avance j'espère avoir été clair

9 réponses

Cramfr Messages postés 160 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 juillet 2008
14 avril 2008 à 19:02
bonjour,

Je ne comprends pas ce que tu écris. Je ne sais pas à quoi correspond  chaque objet. pourrais-tu être plus précis ?

@+
cramfr

Cramsoturf le VBien en quête de nouveau programme
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2008 à 06:11
utilises plutot une requete SQL... se sera plus rapide que de devoir parcourir toi ême tous les enregistrements...

SQL = "SELECT COUNT(0) FROM `DataPoste` WHERE `Clef`='" & sKey & "' "
RS1.Open SQL, cn1
if RS1.Fields(0) = 0 then
Msgbox "enregistrement non trouvé"
else
Msgbox "trouvé !"
endif
RS1.Close
0
goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008
15 avril 2008 à 09:18
@Cramfr: oui bien sûr
DBS: dataenvironment
DB1: connexion
cn1: ADODB.Connection
RS1: ADODB.Recordset

@Renfield:
En effet ça serait plus pratique, surtout lorsqu'il doit scuter 30000 enregistrements pour ne rien trouver

Mon soucis est que je suis obligé de refaire un RS1.open a chaque cycle pour pouvoir voir les derniers enregistrements. Apparemment le curseur adOpenDynamic ne fonctionne pas.

J'ai fait un essai en faisant un enregistrement dans une base sur mon PC et de lire sans la rouvrir, et ça fonctionne. Mais sur les bases distantes ça fonctionne pas...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2008 à 09:35
"refaire un RS1.open a chaque cycle pour pouvoir voir les derniers enregistrements"

je ne te suis pas ....

(recadre ton architecture, stp... parce que je me perds, avec ces trois bases)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008
16 avril 2008 à 08:49
bon allez, je la refais mais en plus clair (j'vais essayer )

j'ai un PC en bout de ligne de production. Sur ce PC il y a deja un soft en VB6 où je dois me connecter à 3 machines via ethernet. Sur ces 3 machines, il y a 1 base de données (Access97/2000).
                 PC
                   |
            SWITCH
     ______|_______
    |              |               |
DB1       DB2        DB3
Mon but est de connecter ce PC aux machines afin d'y vérifier une données (à savoir si la pièce est bonne ou non), pour pouvoir finaliser le produit.

Dans le principe ça fonctionne pas mal. Sauf que, une fois les recordsets (1 pour chaque machine: RS1,RS2,RS3) ouvert, je ne vois pas les données ajoutées (par les machines) après l'ouverture des bases (sur le PC).
Je déclare puis ouvre les bases à l'ouverture du soft:
    DBS.DB1.ConnectionString = "chemin database"
    DBS.DB1.Open
    Set cn1 = DBS.DB1
    Set RS1 = New Recordset
    RS1.Open "Dataposte", cn1, adOpenDynamic, adLockOptimistic, adCmdTable
puis je refais:
    Set RS1 = New Recordset
    RS1.Open "Dataposte", cn1, adOpenDynamic, adLockReadOnly, adCmdTable (idem pour RS2 et RS3)
tous les 2min, pour pouvoir faire une "mise à jour" des bases. Mais ce principe prend 10s à chaque fois.
Pourtant, j'ai déclarer le CursorType en dynamique, c'est là où je comprends pas pourquoi je ne vois pas les données ajoutées après l'ouverture du recordset.

en espérant que cette explication soit plus clair
Merci d'avance
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 avril 2008 à 09:04
ok, c'est plus clair.

ton code est équivalent à un RS1.Requery ?
http://msdn2.microsoft.com/en-us/library/ms680936(VS.85).aspx

lequel peut par contre être executé en mode asynchrone, ce qui ferais que ton application de serait pas bloquée pendant le refresh (un évènement t'avertit de la fin du refresh)
0
goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008
21 avril 2008 à 15:52
désolé pour le retard, mais j'étais en plein installation de ce soft.

Donc le problème du temps de connexion est toujours là.
Mon code n'est pas équivalent à un RS1.Requery. Mais en effet, ça pourrait résoudre qlq soucis à ce niveau...

Pour le moment, le new recordset et le open est exécute toutes les 5 minutes, le flux des pièces le permet.

J'ai aussi remarqué que le temps d'accès aux PC des machines sont très long, c'est peut-être pas dû aux bases elles-mêmes.
0
Cramfr Messages postés 160 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 juillet 2008
24 avril 2008 à 10:36
Bonjour,

Ce que j'ai pu remarqué c'est que la connection est ce qui a de plus long. le recordset, en revanche, est relativement cours selon si il est utilisé correctement.
si tu laisses ouvert tes 3 connections au démarrage et que tu refais tes recordsets peut-être va tu gagné du temps...

@+

Cramsoturf le VBien en quête de nouveau programme
0
goldoyaxx Messages postés 5 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 25 avril 2008
25 avril 2008 à 16:20
ben c'est ce que je fais, c'est là où je comprends pas...

c'est installé comme ça, aujourd'hui personne ne s'est encore plaint, wait&see

Mais bon c'est étrange, mais j'ai un doute sur la partie matériel aussi.

merci les gens...
0
Rejoignez-nous