OVH Cloud OVH Cloud

Copier d'une table à l'autre

23 réponses
Avatar
Luis
Bonjour,
Je reviens sur un probl=E8me que Ilan m'a tr=E8s gentillement=20
aid=E9 =E0 r=E9soudre.
Mais j'ai toujours un probl=E8me.
J'ai un formulaire 'Clients' dans lequel il y a 24 champs=20
pour noter les contacts qui sont [RESPONSABLE];=20
[RESPONSABLE1]; [RESPONSABLE2]; [POLITESSE];=20
[POLITESSE1];...etc

La saisi dans ces champs se passe tr=E8s bien.
Je veux selon le cas copier toutes ces donn=E9es 'Contacts'=20
d'un client dans une autre table=20
appel=E9e 'Contacts_Clients' en utilisant la fonction=20
suivante:
Dim Db As Database
Dim TABLE1, TABLE2 As Recordset
Dim CONTACT, INFOCONTACT, INDICEINFO As Integer

Function SetContact()
Set Db =3D CurrentDb

Chaine =3D "SELECT NClient, RESPONSABLE, RESPONSABLE2,=20
RESPONSABLE3, NATEL, fonction, POLITESSE, POLITESSE2,=20
POLITESSE3, FONCTION2, FONCTION3, TELDIRECT1, TELDIRECT2,=20
TELEDIRECT3, e-mail1, e-mail2, e-mail3, NATEL2, NATEL3,=20
FAX1, FAX2, FAX3, DEPARTEMENT1, DEPARTEMENT2, DEPARTEMENT3=20
FROM Clients ORDER BY NClient"
Set TABLE1 =3D Db.OpenRecordset(Chaine)
Set TABLE2 =3D Db.OpenRecordset("SELECT * FROM=20
Contacts_Clients ORDER BY NClient,")

If Not (TABLE1.BOF Or TABLE1.EOF) Then

TABLE2.FindFirst ("NClient=3D" & TABLE1!NClient)
If TABLE2.NoMatch Then
For CONTACT =3D 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next CONTACT
Else
For CONTACT =3D 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient) Then
GoSub AjouterContact
Else
TABLE2.Edit
Contact,Politesse,....,Email
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next CONTACT
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient =3D TABLE1!NClient
Return

EcrireInfo:
For INFOCONTACT =3D 1 To 8
INDICEINFO =3D 8 * (CONTACT - 1) + INFOCONTACT
TABLE2.Fields.Item(INFOCONTACT + 1) =3D=20
TABLE1.Fields.Item(INDICEINFO)
Next INFOCONTACT
TABLE2.Update
Return
End Function

Malheuresement j'ai: Erreur d'ex=E9cution '3061'
Trop peu de param=E8tres. 4 attendu

Et dans le code:
Set TABLE1 =3D Db.OpenRecordset(Chaine) en surbrillance.

Si vous pouvez continuer =E0 m'aider.
Luis

3 réponses

1 2 3
Avatar
Ilan
Bonjour,
la ligne : Exit Function doit se trouver tout de suite en dessous de la
ligne
TABLE2.Close

remplacer :
TABLE2.Fields.Item(InfoContact + 1) par TABLE2.Fields.Item(InfoContact)

2) Il y avait la semaine derniere une Clause WHERE dans l'instruction SQL de
TABLE1 pour modifier uniquement les contacts du client choisis. Depuis ??

En clair ,la fonction aujourd'hui lit le premier client de la table Clients
modifie les
Contacts associes dans la table Contacts_Clients et c'est tout.

Bref, 2 semaines pour transferer des donnees d'une table a une autre. Tu
aurais ete plus vite en effectuant tout ca a la main. La fonction etait
sensee te permettre
d'effectuer rapidement ce transfert, on en est loin.
Avatar
Luis
Bonjour Ilan,
Je tiens à te remercier très sincèrement pour ta patiance,
mais maintenant ça marche.
J'ai mis:
Exit Function sous TABLE2.Close
remplacé:
TABLE2.Fields.Item(InfoContact + 1) par TABLE2.Fields.Item
(InfoContact)
Et j'ai ajouté la Clause WHERE que j'avais sauté par
Chaine = "SELECT NClient, RESPONSABLE, DEPARTEMENT1,.....
FROM Clients ORDER BY NClient =" & Forms!
[Clients].NClient & ""
Je ne sais pas si c'est très élégant mais ça marche.
Je te remercie encore.
Luis
-----Message d'origine-----
Bonjour,
la ligne : Exit Function doit se trouver tout de suite
en dessous de la

ligne
TABLE2.Close

remplacer :
TABLE2.Fields.Item(InfoContact + 1) par TABLE2.Fields.Item
(InfoContact)


2) Il y avait la semaine derniere une Clause WHERE dans
l'instruction SQL de

TABLE1 pour modifier uniquement les contacts du client
choisis. Depuis ??


En clair ,la fonction aujourd'hui lit le premier client
de la table Clients

modifie les
Contacts associes dans la table Contacts_Clients et c'est
tout.


Bref, 2 semaines pour transferer des donnees d'une table
a une autre. Tu

aurais ete plus vite en effectuant tout ca a la main. La
fonction etait

sensee te permettre
d'effectuer rapidement ce transfert, on en est loin.

.



Avatar
Ilan
Bonjour,
en fait il faut ecrire
Chaine = "SELECT NClient, RESPONSABLE, DEPARTEMENT1,.....
FROM Clients WHERE NClient =" & Forms![Clients].NClient

Puisque tu ne prends qu'un seul enregistrement l'instruction de tri ORDER BY
n'est plus necessaire pour TABLE1 (ne change rien pour TABLE2).

Si ca marche. Faut dire enfin!! ca a ete plutot laborieux.
Je ferais un peu mieux la prochaine fois.



Bonjour Ilan,
Je tiens à te remercier très sincèrement pour ta patiance,
mais maintenant ça marche.
J'ai mis:
Exit Function sous TABLE2.Close
remplacé:
TABLE2.Fields.Item(InfoContact + 1) par TABLE2.Fields.Item
(InfoContact)
Et j'ai ajouté la Clause WHERE que j'avais sauté par
Chaine = "SELECT NClient, RESPONSABLE, DEPARTEMENT1,.....
FROM Clients ORDER BY NClient =" & Forms!
[Clients].NClient & ""
Je ne sais pas si c'est très élégant mais ça marche.
Je te remercie encore.
Luis
-----Message d'origine-----
Bonjour,
la ligne : Exit Function doit se trouver tout de suite
en dessous de la

ligne
TABLE2.Close

remplacer :
TABLE2.Fields.Item(InfoContact + 1) par TABLE2.Fields.Item
(InfoContact)


2) Il y avait la semaine derniere une Clause WHERE dans
l'instruction SQL de

TABLE1 pour modifier uniquement les contacts du client
choisis. Depuis ??


En clair ,la fonction aujourd'hui lit le premier client
de la table Clients

modifie les
Contacts associes dans la table Contacts_Clients et c'est
tout.


Bref, 2 semaines pour transferer des donnees d'une table
a une autre. Tu

aurais ete plus vite en effectuant tout ca a la main. La
fonction etait

sensee te permettre
d'effectuer rapidement ce transfert, on en est loin.

.






1 2 3