Liaison entre deux BBDD

lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005 - 13 sept. 2005 à 15:07
lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005 - 14 sept. 2005 à 17:40
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

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 sept. 2005 à 15:47
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
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
13 sept. 2005 à 16:00
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!
0
lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005
13 sept. 2005 à 17:07
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
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 sept. 2005 à 17:37
As-tu testé le MoveLast et MoveFirst que je t'ai recommandé ?
0

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

Posez votre question
lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005
13 sept. 2005 à 23:35
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.
0
lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005
14 sept. 2005 à 08:19
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.
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
14 sept. 2005 à 10:52
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!
0
lasenka Messages postés 11 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 4 octobre 2005
14 sept. 2005 à 17:40
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
0
Rejoignez-nous