Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

6 réponses
Avatar
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

6 réponses

Avatar
Fabien
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

Avatar
sylvere
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" a écrit dans le message de news:
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



Avatar
Michel_D
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" a écrit dans le message de 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




Avatar
sylvere
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" a écrit dans le message de
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" a écrit dans le message de
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







Avatar
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

Avatar
sylvere
Merci, je vais tester...
"Eric" a écrit dans le message de news:

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