Liaison entre deux BBDD

Signaler
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005
-
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005
-
Pour produir factures des ventes entre deux dates (ou dans un mois) j'ai fait le suivant procdmnt: Il s'agit de deux BBDD et un filtre.

Private Sub Imprimer_Click()
'Cycle des clients
Do While NOT Adodc1.Rs.EOF
- clientx = Adodc1.Rs.Fields("Clients").Value- condition "Client '" & clientx & "' And DateAchat >= "' & MaskedBox1 & "' And DateAchat <= '" & MaskedBox2 "'"
- Adodc2.Rs.Filter = condition
- jfin = Adodc2.Rd.Recordcount
- For j = o to ( jfin - 1)
-- Printer print...
- Next j
Adodc1.Rs.MoveNext
Loop
End Sub
.....Probleme: La variable clientx du premier cycle ne pase pas au seconde, ni de la façon que j'ai mis ni dans la façon: condition "Client '" & Adodc1.Rs.Fields("Clients)".Value & etc...
J'ai verifié que le probleme n'est pas dans les dates (que transitoirment j'ai eliminées), máis dans la lieaison entre les deux BBDD que je n'obtiens pas. Qu'est-ce que j'ai fait mal ???
Merci de tout coeur, Lasenka

8 réponses

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
Attention à la valeur du RecordCount sur le RS de ADODC2 qui ne vaut que le Nb d'enregistrement effectivement lu !! Donc zéro juste derrière ton .Filter = ...
Ajoute un Adodc2.RS.MoveLast puis un Adodc2.RS.MoveFirst entre le Adodc2.rs.Filter ... et le jfin adodc2.rs.recordcount ...
Et puis je ne me souvient plus s'il faut fair eun .refresh sur le RS après le Filter ou bien s'il le fait tout seul ? A vérifier ...

Christophe
Messages postés
314
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
31 août 2006
1
Désolé mais je ne comprends pas trop. Ton code manque un peut de clarté et de commentaires. Quel est les relations entre tes deux bases de données (liens sur un champs numérique ou texte), comment les ouvrent tu, comment sont déclarées tes variables?
Donne-nous le code complet ou plus d'informations si tu veux que l'on t'aide.


A bientôt!
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005

Mci. Quant a les liens entre les deux BBDD. Table Clients, ADODC1, clef principal le champ "Client". Table Ventes, ADODC2, sans clef, mais avec le champ commun "Client".
Bien sur, declaré texte. La variable "clientx" declarée comme String. Le cycle exterieur (Do While) travaille dans la table Clients. Le cycle intetieur (For... Next) dans la table Ventes. Faut il quelque renseignement additionelle ? Mci pour votre rapidité.
Lasenka
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
As-tu testé le MoveLast et MoveFirst que je t'ai recommandé ?
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005

Mci Chère Christophe: Oui, oui. Mais j'obtiens "EOF ou BOF trouvé". J'ai intercepté le message d'erreur, mais encore les conditions du premier cycle n'entrent dans le séconde. J'en sais pas quoi faire. C'est n'est pas une application complexe; seulement deux clefs principaux (Clients et Suppliers) et une seule table commune, cette de ventes. Le reste des tables con attachées a une ou une autre des clefs principaux. Mais ce proced est completement crucial. Mci pour ton interêt.
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005

Une correction: Je me suis exprimé incorrectement quand je parle de "Liaison entre deux BBDD". Réelment je voudrais et devrais dir : "Liaison entre deux TABLES d'une BDD". Vous aurez compris sans doute l'erreur. Merci.
Messages postés
314
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
31 août 2006
1
Pourquoi ne pas faire tout simplement une requête SQL. A mon avis ce serat bien moin lourd que deux recordset et plus rapide

Tu pourrais faire un truc du genre :

*************************** start code *****************************
' Tu creer une requête SQL directement en code sélectionnant les enregistrements selon tes critères
dim StrChaineSQL as string

StrChaineSQL = " SELECT Clients.Client, Clients.DateAchat, Ventes.DateAchat " & _
" FROM Clients INNER JOIN Ventes ON Clients.Client = Ventes.Client " & _
" WHERE (((Clients.DateAchat)>= '" & MaskedBox1 & "' And (Clients.DateAchat)<= '" & MaskedBox2& "'));"

' Et si tu souhaite avoir un recordset tu l'ouvre depuis ta requête SQL
Set db = CurrentDb
Set rcd = db.OpenRecordset(StrChaineSQL)

************************ end code ********************************


Attention je ne suis pas sûr de la requête SQL car je n'ai pas trop compris si le champ Date Achat et dans la table Clients ou Ventes. Ceci étant c'est plus pour te donner une idée, tu modifieras en conséquence

Voilà et bon courage


Courage et persévérance sont les mamelles de la réussite!
Messages postés
11
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
4 octobre 2005

Merci pour votre trës précieuse aide.Ça marche finalment. J'ai préféré maintiendre la "philosophie" initiale, ça sera pour moi plus aisé. Voici le code pour si il peut être util a un autre "patient" .
...
Private Sub Imprimer_.Click()
' Cycle des Clientes Adodc1
Do While NOT Adodc1.Rs.Eof
- Printer.print En-tête
- clientx = Adodc1.Rs.Fields("Client").Value- condition " Client ' " & Clientx & " ' And DateVente >= '" & MaskEdBox1 & " ' And DateVente <= ' " & MaskEdBox2 & "'"
- Adodc2.Rs.Filter = condition
- Adodc2.Rs.MoveFirst ' Ça était le point, Christophe !!
- jfin = Adodc2.Rs.RecordCount
' Cycle des Ventes
- For j = 0 To (jfin - 1)
-- printer.Print Detaill
-- Adodc2.Rs.MoveNext
-- If Adodc2.Rs.Eof Then
---- il faut ajouter quelque code
-- End If
-- Adodc2.Rs.Filter = ""
- Next j
- Printer.Print Resumé
- Actualiser ' la table Factures emises
- Adodc1.Rs.MoveNext
Loop
End Sub
...
Mci nouvellement, Alberto
-- Adodc2.Rs.MoveNext