Prb de code en vb

Résolu
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005 - 7 sept. 2004 à 10:44
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 - 8 sept. 2004 à 12:08
salut a tous et a toute

voila j'ai arrange mon code

Sub copie1()

Dim i As Integer
Dim db As DAO.Database
Dim ajout As DAO.Recordset
Dim tbl As DAO.Recordset
Dim fld()
Dim modif As DAO.Recordset
Dim mot As String

mot = "serveur1"

Set db = CurrentDb
Set tbl db.OpenRecordset("select * from salut where nom_serveur'" & mot & "';")Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")

Do Until ajout.EOF
tbl.AddNew
For i = 0 To ajout.Fields.Count - 1

tbl.Fields(i) = ajout.Fields(i)

Next
ajout.MoveNext

If tbl.EOF Then
tbl.Update
tbl.MoveNext
End If
Loop
End Sub

le probleme c'est que quand je l'execute rien ne se passe
or il faudrait que la ligne serveur de la table temporaire
soit copier dans la ligne serveur de la table salut
par contre je ne sais pas comment faire si lorsque il n' ya pas de données dans un champs de la ligne dans la table temporaire
il laisse les données du champs de la table salut

mercii pour les reponses

18 réponses

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
8 sept. 2004 à 10:33
Bon alors, supposons que ta clé primaire se nomme PrimaryKey et que tu veux modifié la ligne serveur1 si ca existe et l'ajouter si ca n'existe pas alors voila le code :


Dim i As Integer
Dim db As DAO.Database
Dim ajout As DAO.Recordset
Dim tbl As DAO.Recordset
Dim fld()
Dim modif As DAO.Recordset
Dim mot As String

mot = "serveur1"

Set db = OpenDatabase("c:\facture.mdb")

Set tbl = db.OpenRecordset("salut")
tbl.Index = "PrimaryKey"'Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")
Set ajout = db.OpenRecordset("select * from temporaire")

Do Until ajout.EOF

tbl.Seek "=", ajout("nom_serveur")
If tbl.NoMatch Then
tbl.AddNew
tbl("nom_serveur") = ajout("nom_serveur")
Else
tbl.Edit
End If

For i = 0 To ajout.Fields.Count - 1
  If Not IsNull(ajout.Fields(i)) Then tbl.Fields(i) = ajout.Fields(i)
Next
tbl.Update

ajout.MoveNext
Loop



sinon si tu veux modifier uniquement la ligne avec serveur1 si elle existe et de l'ajouter si elle n'exsiste pas alors le code est le suivant :


Dim i As Integer
Dim db As DAO.Database
Dim ajout As DAO.Recordset
Dim tbl As DAO.Recordset
Dim fld()
Dim modif As DAO.Recordset
Dim mot As String

mot = "serveur1"

Set db = OpenDatabase("c:\facture.mdb")

Set tbl = db.OpenRecordset("salut")
tbl.Index = "PrimaryKey"Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")

Do Until ajout.EOF

tbl.Seek "=", ajout("nom_serveur")
If tbl.NoMatch Then
tbl.AddNew
tbl("nom_serveur") = ajout("nom_serveur")
Else
tbl.Edit
End If

For i = 0 To ajout.Fields.Count - 1
  If Not IsNull(ajout.Fields(i)) Then tbl.Fields(i) = ajout.Fields(i)
Next
tbl.Update

ajout.MoveNext
Loop



sinon si tu veux modifier uniquement la ligne avec serveur1 si elle existe et ne rien faire si elle n'exsiste pas alors le code est le suivant :


Dim i As Integer
Dim db As DAO.Database
Dim ajout As DAO.Recordset
Dim tbl As DAO.Recordset
Dim fld()
Dim modif As DAO.Recordset
Dim mot As String

mot = "serveur1"

Set db = OpenDatabase("c:\facture.mdb")

Set tbl = db.OpenRecordset("salut")
tbl.Index = "PrimaryKey"Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")

Do Until ajout.EOF

tbl.Seek "=", ajout("nom_serveur")
If Not tbl.NoMatch Then
tbl.Edit
For i = 0 To ajout.Fields.Count - 1
  If Not IsNull(ajout.Fields(i)) Then tbl.Fields(i) = ajout.Fields(i)
Next
tbl.Update
End If
ajout.MoveNext
Loop



Bonne chance

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
3
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
7 sept. 2004 à 10:54
Essayes Ca :

Do Until ajout.EOF
tbl.AddNew
For i = 0 To ajout.Fields.Count - 1
tbl.Fields(i) =iif(len(ajout.Fields(i))<>0,ajout.Fields(i),tbl.Fields(i))
Next
tbl.Update
ajout.MoveNext
Loop

It@li@
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
7 sept. 2004 à 11:02
Boucle for each est preferable dans ce cas :

Dim Var as Field
for each field in ajout.fields
'etc...
next

@+

E.B.
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
7 sept. 2004 à 11:19
merci pour les reponses

mais avec les deux code que vous me donner il me met une erreur a la compilation: modification non effectue, risque de doublons
0

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

Posez votre question
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
7 sept. 2004 à 11:22
Surement un probleme dans un champ qui n'accepte pas les doublon ou les valeurs null, genre ID

@+

E.B.
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
7 sept. 2004 à 11:39
Si t'as un champ NumeroAuto...il faut l'enlever de la Boucle..

For i = 1 To ajout.Fields.Count - 1
tbl.Fields(i) =iif(len(ajout.Fields(i))<>0,ajout.Fields(i),tbl.Fields(i))
Next

It@li@
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
7 sept. 2004 à 12:23
j'ai effectivement une clef primaire (nom_serveur)
dans ma table serveur

lorsque je la met pas dans la boucle il me met que un champs ne peut pas contenir de valeur nul

de plus les deux objet de mon recorset ont la meme clef primaire
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
7 sept. 2004 à 12:31
oui mais c pas un NumAuto... donc il doit bien être dans la Boucle
mais tu dois avoir des doublons...

It@li@
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
7 sept. 2004 à 12:40
mais dans mes deux tables

il n'y a qu'une ligne unique avec serveur 1
c'est pour ca que je comprend pas
normalement ca devrait marcher

or soit il ne se passe rien
ou si je change un peu le code comme marque precedement il me met erreur de doublons

si vous avez la reponse je suis preneur
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
7 sept. 2004 à 16:47
essais comme ca ;)


Dim i As Integer
Dim db As DAO.Database
Dim ajout As DAO.Recordset
Dim tbl As DAO.Recordset
Dim fld()
Dim modif As DAO.Recordset
Dim mot As String

mot = "serveur1"

Set db = CurrentDb

db.Execute "Delete * From salut where nom_serveur ='" & mot & "';"

Set tbl = db.OpenRecordset("salut")Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")

Do Until ajout.EOF
tbl.AddNew
For i = 0 To ajout.Fields.Count - 1

tbl.Fields(i) = ajout.Fields(i)

Next
tbl.Update
ajout.MoveNext
Loop



:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
7 sept. 2004 à 16:52
ou plutôt comme comme suit :


Dim db As DAO.Database
Dim mot As String

mot = "serveur1"

Set db = CurrentDb
db.Execute "Delete * From salut where nom_serveur ='" & mot & "';"
db.Execute "Insert into salut Select * From temporaire where nom_serveur ='" & mot & "';"



:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
7 sept. 2004 à 17:14
merci pour ton code frop 01

mais en fait lors de l'importation il ya des champs dans la table salut
ou les données doivent rester

si j'applique ton code (dis moi si je me trompe)
toutes les anciennes données sont effacées pour imorter la ligne
de l'autre table

donc je ne sais pas comment faire car pourtant le code me semble bon

merci
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
7 sept. 2004 à 17:31
Est-il posssible de nous donner un exemple des deux tables ?

ex:

Table Salut :

Nom_Serveur --- Champs1 ----Champs2
serveur1---------- 123------------ 456
serveur2---------- 123------------ 456

- c'est quoi le contenu de Temporaire
- d'où il provient (saisie par l'utilisateur ou à partir de "salut" )
- qu'est ce que tu veux en faire ?

PS : peut-être ca vous parait débile comme questions mais c'est juste pour savoir si c'est une question de synchronisation des tables ou c'est un nouvel ajout (Addnew ou Edit)

@+

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
7 sept. 2004 à 17:48
La table salut et la table temporaire ont la meme structure

a savoir

nom_serveur champs 2 champs3
serveur1 vcvf dsds
serveur 2fd 1212 212

j'importe des données dans la table temporaire a l'aide d'un fichier texte
ensuite
je veux les importer dans la table principale salut
je fais donc la requete dans chaque table pour trouver la ligne qui m'interesse puis on compare champs a champs
si il ya de nouvelle données on ecrase les ancienne
si il yen a pas on garde les anciennes

c'est donc plus une synchronisation des tables
j'espere avoir ete clair

merci
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
7 sept. 2004 à 18:08
Donc c'est pas un .Addnew qu'on utilise mais plutot un .Edit

Est-ce que pour le champ nom_serveur, il existe une seule ligne et unique valeur serveur1 dans la table salut et temporaire ?

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
8 sept. 2004 à 09:40
il ya dans la table salut et valeur

une unique ligne contenant la clef primaire serveur 1 et sur cette ligne des champs avec des données

voila
0
alex102 Messages postés 37 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 4 janvier 2005
8 sept. 2004 à 11:55
salut fro 01

merci beaucoups pour ton code

c'est bon ca marche la tu m'a sauve
le deuxieme code est approprie a ce que je veux faire
mais je n'ai pas tres bien compris la difference entre le 1er et 2eme code

encore merci

Fab
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
8 sept. 2004 à 12:08
Le 1er code selectionne toute la table temporaire. donc à utiliser si il existe Serveur1, Serveur2,Serveur3....

Set ajout = db.OpenRecordset("select * from temporaire")

et le deuxieme utilise la variable mot
Set ajout db.OpenRecordset("select * from temporaire where nom_serveur'" & mot & "';")

donc il charge uniquement serveur1 comme exemple.

Bonne continuation.

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
Rejoignez-nous