OVH Cloud OVH Cloud

paramètre d'une requête

4 réponses
Avatar
Pascal
bonjour,
comment passer en paramètre le nom de ma table à traiter dans ma requète
en clair:
dans du code VBA je fais appel à une requète comme ceci:
stDocName = "Rechercher les doublons"
DoCmd.OpenQuery stDocName, acNormal, acEdit

dontvoici le contenu:
DELETE [matable].[N°]
FROM matable
WHERE matable.N° In (SELECT [N°] FROM [matable] As Tmp GROUP BY [N°] HAVING
Count(matable.N°)>1);

merci de votre aide

Pascal

4 réponses

Avatar
Pierre CFI [mvp]
bonjour
sous réserve que ta requéte soit bonne
Dim matable as string
matable = // soit un controle soit un InputBox
CurrentDb.Execute "DELETE [N°]
FROM " & matable & " WHERE N° In (SELECT [N°] FROM " & matable & " As Tmp GROUP BY [N°] HAVING Count(N°)>1);"


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:uR%
bonjour,
comment passer en paramètre le nom de ma table à traiter dans ma requète
en clair:
dans du code VBA je fais appel à une requète comme ceci:
stDocName = "Rechercher les doublons"
DoCmd.OpenQuery stDocName, acNormal, acEdit

dontvoici le contenu:
DELETE [matable].[N°]
FROM matable
WHERE matable.N° In (SELECT [N°] FROM [matable] As Tmp GROUP BY [N°] HAVING
Count(matable.N°)>1);

merci de votre aide

Pascal




Avatar
Pascal
bonsoir pierre, merci pour la réponse,
dans le même genre j'essaie de faire ceci dans mon code:

MaTable = cboTable.Value
'on ouvre la table choisie
Set t1 = CurrentDb.OpenRecordset(MaTable)
'tester si la table possède au minimum 1 enregistrement
If t1.RecordCount = 0 Then
reponse = MsgBox("La table " & MaTable & " est vide, impossible de
vérifier " & vbCrLf & _
"insérer au minimum 1 enregistrement",
vbOKOnly, "Erreur Utilisateur")
Exit Sub
End If
'excécuter la requête
On Error GoTo Err_requête
CurrentDb.Execute "SELECT First(" & MaTable & ".N°) AS N°Champs, First("
& MaTable & ".col1) AS col1Champs," & _
"First(" & MaTable & ".col2) AS col2Champs, First(" &
MaTable & ".col3) AS col3Champs," & _
"First(" & MaTable & ".col4) AS col4Champs, First(" &
MaTable & ".col5) AS col5Champs, " & _
"First(" & MaTable & ".col6) AS col6Champs, Count(" &
MaTable & ".N°) AS NombreDeDbls " & _
"FROM " & MaTable & " GROUP BY " & MaTable & ".N°," &
MaTable & ".col1," & MaTable & ".col2, " & _
"" & MaTable & ".col3," & MaTable & ".col4," & MaTable
& ".col5," & MaTable & ".col6 " & _
"HAVING (((Count(" & MaTable & ".N°))>1) AND ((Count("
& MaTable & ".col6))>1));"

UN MSGBOX INDIQUE : IMPOSSIBLE D'EXCECUTER REQUETE SELECTION , comment
puis-je parer à cela?
merci de toutes suggestions
Pascal


"Pierre CFI [mvp]" a écrit dans le message de
news:OL79$
bonjour
sous réserve que ta requéte soit bonne
Dim matable as string
matable = // soit un controle soit un InputBox
CurrentDb.Execute "DELETE [N°]
FROM " & matable & " WHERE N° In (SELECT [N°] FROM " & matable & " As Tmp
GROUP BY [N°] HAVING Count(N°)>1);"


Avatar
Pierre CFI [mvp]
.../...
avec execute il faut des req actions (delete, insert....)
dans ton cas , c'est un OpenRecordset(""SELECT First(" & MaTable & ".N°) AS N°Champs, First("
& MaTable & ".col1) AS col1Champs........
de plus utilise une variable objet pour la base

dim Db as dao.database
set db = currentdb
db.execute ou db.openrecordset
oublie pas à la fin
set db = nothing
pas obligatoire mais ...


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:%
bonsoir pierre, merci pour la réponse,
dans le même genre j'essaie de faire ceci dans mon code:

MaTable = cboTable.Value
'on ouvre la table choisie
Set t1 = CurrentDb.OpenRecordset(MaTable)
'tester si la table possède au minimum 1 enregistrement
If t1.RecordCount = 0 Then
reponse = MsgBox("La table " & MaTable & " est vide, impossible de
vérifier " & vbCrLf & _
"insérer au minimum 1 enregistrement",
vbOKOnly, "Erreur Utilisateur")
Exit Sub
End If
'excécuter la requête
On Error GoTo Err_requête
CurrentDb.Execute "SELECT First(" & MaTable & ".N°) AS N°Champs, First("
& MaTable & ".col1) AS col1Champs," & _
"First(" & MaTable & ".col2) AS col2Champs, First(" &
MaTable & ".col3) AS col3Champs," & _
"First(" & MaTable & ".col4) AS col4Champs, First(" &
MaTable & ".col5) AS col5Champs, " & _
"First(" & MaTable & ".col6) AS col6Champs, Count(" &
MaTable & ".N°) AS NombreDeDbls " & _
"FROM " & MaTable & " GROUP BY " & MaTable & ".N°," &
MaTable & ".col1," & MaTable & ".col2, " & _
"" & MaTable & ".col3," & MaTable & ".col4," & MaTable
& ".col5," & MaTable & ".col6 " & _
"HAVING (((Count(" & MaTable & ".N°))>1) AND ((Count("
& MaTable & ".col6))>1));"

UN MSGBOX INDIQUE : IMPOSSIBLE D'EXCECUTER REQUETE SELECTION , comment
puis-je parer à cela?
merci de toutes suggestions
Pascal


"Pierre CFI [mvp]" a écrit dans le message de
news:OL79$
bonjour
sous réserve que ta requéte soit bonne
Dim matable as string
matable = // soit un controle soit un InputBox
CurrentDb.Execute "DELETE [N°]
FROM " & matable & " WHERE N° In (SELECT [N°] FROM " & matable & " As Tmp
GROUP BY [N°] HAVING Count(N°)>1);"






Avatar
Pascal
génial, grand merci
Pascal

"Pierre CFI [mvp]" a écrit dans le message de
news:OYFKJH%
.../...
avec execute il faut des req actions (delete, insert....)
dans ton cas , c'est un OpenRecordset(""SELECT First(" & MaTable & ".N°)
AS N°Champs, First("

& MaTable & ".col1) AS col1Champs........
de plus utilise une variable objet pour la base

dim Db as dao.database
set db = currentdb
db.execute ou db.openrecordset
oublie pas à la fin
set db = nothing
pas obligatoire mais ...


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de
news:%

bonsoir pierre, merci pour la réponse,
dans le même genre j'essaie de faire ceci dans mon code:

MaTable = cboTable.Value
'on ouvre la table choisie
Set t1 = CurrentDb.OpenRecordset(MaTable)
'tester si la table possède au minimum 1 enregistrement
If t1.RecordCount = 0 Then
reponse = MsgBox("La table " & MaTable & " est vide, impossible
de


vérifier " & vbCrLf & _
"insérer au minimum 1
enregistrement",


vbOKOnly, "Erreur Utilisateur")
Exit Sub
End If
'excécuter la requête
On Error GoTo Err_requête
CurrentDb.Execute "SELECT First(" & MaTable & ".N°) AS N°Champs,
First("


& MaTable & ".col1) AS col1Champs," & _
"First(" & MaTable & ".col2) AS col2Champs,
First(" &


MaTable & ".col3) AS col3Champs," & _
"First(" & MaTable & ".col4) AS col4Champs,
First(" &


MaTable & ".col5) AS col5Champs, " & _
"First(" & MaTable & ".col6) AS col6Champs,
Count(" &


MaTable & ".N°) AS NombreDeDbls " & _
"FROM " & MaTable & " GROUP BY " & MaTable &
".N°," &


MaTable & ".col1," & MaTable & ".col2, " & _
"" & MaTable & ".col3," & MaTable & ".col4," &
MaTable


& ".col5," & MaTable & ".col6 " & _
"HAVING (((Count(" & MaTable & ".N°))>1) AND
((Count("


& MaTable & ".col6))>1));"

UN MSGBOX INDIQUE : IMPOSSIBLE D'EXCECUTER REQUETE SELECTION , comment
puis-je parer à cela?
merci de toutes suggestions
Pascal


"Pierre CFI [mvp]" a écrit dans le message de
news:OL79$
bonjour
sous réserve que ta requéte soit bonne
Dim matable as string
matable = // soit un controle soit un InputBox
CurrentDb.Execute "DELETE [N°]
FROM " & matable & " WHERE N° In (SELECT [N°] FROM " & matable & " As
Tmp



GROUP BY [N°] HAVING Count(N°)>1);"