verif d'un critère de requête ajout dans table destination pour eviter doublons

Le
sylvere
Je dois copier des enregistrements d'une table à une autre selon critères
par requête d'ajout.
je choisis dans cette requête le critère de copie d'enregistrements dans le
champ critere_a de la table "source"
Pour interdire les doublons de copie dans la table "destination", je
souhaite pouvoir vérifier dans la table "destination" si un enregistrement
avec le critere existe déjà, quelle que soit sa place dans le champ que nous
appelons critere_b de la table "destination", et interdire la requête si tel
est le cas.
ex :si je choisis le critère_a = 1 de la table "source", vérifier su ce
critère existe déjà quelque part dans le champ critere_b de la table
"destination" et interdire l'exécution de la requête.
Je sais le faire sur le dernier enregistrement de la table "destination"
avec un test sur le Dmax du champ "critere", mais cela ne résoud pas tout
mes problèmes et interdit l'ajout d'enregistrements inférieurs à Dmax et qui
n'auraient pas encore été ajoutés.
Merci d'avance.

Sylvere
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien
Le #6329791
Je dois copier des enregistrements d'une table à une autre selon critères
par requête d'ajout.
je choisis dans cette requête le critère de copie d'enregistrements dans le
champ critere_a de la table "source"
Pour interdire les doublons de copie dans la table "destination", je
souhaite pouvoir vérifier dans la table "destination" si un enregistrement
avec le critere existe déjà, quelle que soit sa place dans le champ que nous
appelons critere_b de la table "destination", et interdire la requête si tel
est le cas.
ex :si je choisis le critère_a = 1 de la table "source", vérifier su ce
critère existe déjà quelque part dans le champ critere_b de la table
"destination" et interdire l'exécution de la requête.
Je sais le faire sur le dernier enregistrement de la table "destination"
avec un test sur le Dmax du champ "critere", mais cela ne résoud pas tout
mes problèmes et interdit l'ajout d'enregistrements inférieurs à Dmax et qui
n'auraient pas encore été ajoutés.
Merci d'avance.

Sylvere


Salut Sylvere

et si tu utilises un dcount a la place de dmax ?
genre
if dcount("*","Destination","Critere_b="&critere_a)>0 then
msgbox("Le critere " & critere_a & " est déjà présent dans la table de
destination !")
else
docmd.runsql marequete
end if

sylvere
Le #6382341
Merci pour l'aide, mais ça coince :
"erreur de syntaxe, opérateur absent dans l'expression "nostage_b="
à la ligne suivante :
If DCount("*", "facturation", "nostage_b=" & nostage) > 0 Then
MsgBox ("le critere" & nostage & "est déjà present")
Else
DoCmd.RunSQL "R_transfert_facturation"
End If
"Facturation" est la table destination et "_b" est le critère à aller
vérifier en comparaison de "nostage" qui appartient à la table " source "

Merci pour l'aide..
Sylvere

"Fabien" 4732bb02$0$25934$
Je dois copier des enregistrements d'une table à une autre selon
critères


par requête d'ajout.
je choisis dans cette requête le critère de copie d'enregistrements dans
le


champ critere_a de la table "source"
Pour interdire les doublons de copie dans la table "destination", je
souhaite pouvoir vérifier dans la table "destination" si un
enregistrement


avec le critere existe déjà, quelle que soit sa place dans le champ que
nous


appelons critere_b de la table "destination", et interdire la requête si
tel


est le cas.
ex :si je choisis le critère_a = 1 de la table "source", vérifier su ce
critère existe déjà quelque part dans le champ critere_b de la table
"destination" et interdire l'exécution de la requête.
Je sais le faire sur le dernier enregistrement de la table "destination"
avec un test sur le Dmax du champ "critere", mais cela ne résoud pas
tout


mes problèmes et interdit l'ajout d'enregistrements inférieurs à Dmax et
qui


n'auraient pas encore été ajoutés.
Merci d'avance.

Sylvere


Salut Sylvere

et si tu utilises un dcount a la place de dmax ?
genre
if dcount("*","Destination","Critere_b="&critere_a)>0 then
msgbox("Le critere " & critere_a & " est déjà présent dans la table de
destination !")
else
docmd.runsql marequete
end if



Michel_D
Le #6382271
Bonjour,

J'ai l'impression que cela ressemble à une réponse que j'ai déja donné.

Donc, en partant du principe que les 2 tables (source et destination) ont
une structure identique, la requête suivante ajoute les enregistrements
de la table "AAA" dans la table "AA" à condition que la valeur du champ
"MOTO" de la table "AAA" n'existe pas dans la table "AA".

INSERT INTO AA
SELECT AAA.*
FROM AAA
WHERE Not([AAA].[MOTO] IN (SELECT [AA].[MOTO] FROM AA));


"sylvere"
Je dois copier des enregistrements d'une table à une autre selon critères
par requête d'ajout.
je choisis dans cette requête le critère de copie d'enregistrements dans le
champ critere_a de la table "source"
Pour interdire les doublons de copie dans la table "destination", je
souhaite pouvoir vérifier dans la table "destination" si un enregistrement
avec le critere existe déjà, quelle que soit sa place dans le champ que nous
appelons critere_b de la table "destination", et interdire la requête si tel
est le cas.
ex :si je choisis le critère_a = 1 de la table "source", vérifier su ce
critère existe déjà quelque part dans le champ critere_b de la table
"destination" et interdire l'exécution de la requête.
Je sais le faire sur le dernier enregistrement de la table "destination"
avec un test sur le Dmax du champ "critere", mais cela ne résoud pas tout
mes problèmes et interdit l'ajout d'enregistrements inférieurs à Dmax et qui
n'auraient pas encore été ajoutés.
Merci d'avance.

Sylvere




sylvere
Le #6381761
Merci, ça fonctionne très bien.
Un plus ?
peut on remplacer au moment de l'exécution de la requête, ce message " vous
allez ajouter 0 lignes" par "transfert déjà effectué" ?
et "vous allez ajouter 3lignes de code MOTO "xx" ?
merci d'avance
Sylvere

"Michel_D" news: fh15kc$sud$
Bonjour,

J'ai l'impression que cela ressemble à une réponse que j'ai déja donné.

Donc, en partant du principe que les 2 tables (source et destination) ont
une structure identique, la requête suivante ajoute les enregistrements
de la table "AAA" dans la table "AA" à condition que la valeur du champ
"MOTO" de la table "AAA" n'existe pas dans la table "AA".

INSERT INTO AA
SELECT AAA.*
FROM AAA
WHERE Not([AAA].[MOTO] IN (SELECT [AA].[MOTO] FROM AA));


"sylvere" news:47322f56$0$28497$

Je dois copier des enregistrements d'une table à une autre selon
critères


par requête d'ajout.
je choisis dans cette requête le critère de copie d'enregistrements dans
le


champ critere_a de la table "source"
Pour interdire les doublons de copie dans la table "destination", je
souhaite pouvoir vérifier dans la table "destination" si un
enregistrement


avec le critere existe déjà, quelle que soit sa place dans le champ que
nous


appelons critere_b de la table "destination", et interdire la requête si
tel


est le cas.
ex :si je choisis le critère_a = 1 de la table "source", vérifier su ce
critère existe déjà quelque part dans le champ critere_b de la table
"destination" et interdire l'exécution de la requête.
Je sais le faire sur le dernier enregistrement de la table "destination"
avec un test sur le Dmax du champ "critere", mais cela ne résoud pas
tout


mes problèmes et interdit l'ajout d'enregistrements inférieurs à Dmax et
qui


n'auraient pas encore été ajoutés.
Merci d'avance.

Sylvere







Eric
Le #6381741
Bonjour,

Avec ce genre de procédure, en adaptant le SQL de la requête à ton besoin :

Sub zz()
' Référence Microsoft DAO 3.x Object Library
Dim strSQL As String
Dim bd As DAO.Database, qry As DAO.QueryDef
strSQL = "Insert into employes1 " _
& "select * from employes where noemp " _
& "not in(select noemp from employes1);"
Set bd = CurrentDb
Set qry = bd.CreateQueryDef("", strSQL)
With qry
.Execute
If .RecordsAffected = 0 Then
MsgBox "Transfert déjà effectué"
Else
MsgBox .RecordsAffected & " enregistrement(s) transféré(s)"
End If
End With
Set qry = Nothing
Set bd = Nothing
End Sub



Merci, ça fonctionne très bien.
Un plus ?
peut on remplacer au moment de l'exécution de la requête, ce message " vous
allez ajouter 0 lignes" par "transfert déjà effectué" ?
et "vous allez ajouter 3lignes de code MOTO "xx" ?
merci d'avance
Sylvere



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

sylvere
Le #6381421
Merci, je vais tester...
"Eric"
Bonjour,

Avec ce genre de procédure, en adaptant le SQL de la requête à ton besoin
:


Sub zz()
' Référence Microsoft DAO 3.x Object Library
Dim strSQL As String
Dim bd As DAO.Database, qry As DAO.QueryDef
strSQL = "Insert into employes1 " _
& "select * from employes where noemp " _
& "not in(select noemp from employes1);"
Set bd = CurrentDb
Set qry = bd.CreateQueryDef("", strSQL)
With qry
.Execute
If .RecordsAffected = 0 Then
MsgBox "Transfert déjà effectué"
Else
MsgBox .RecordsAffected & " enregistrement(s) transféré(s)"
End If
End With
Set qry = Nothing
Set bd = Nothing
End Sub



Merci, ça fonctionne très bien.
Un plus ?
peut on remplacer au moment de l'exécution de la requête, ce message "
vous


allez ajouter 0 lignes" par "transfert déjà effectué" ?
et "vous allez ajouter 3lignes de code MOTO "xx" ?
merci d'avance
Sylvere



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Publicité
Poster une réponse
Anonyme