OVH Cloud OVH Cloud

VB : requete mise à jour

4 réponses
Avatar
soniagaubert
Bonsoir,
A chaque jour suffit sa peine, mais l=E0 je bloque : je voudrais, depuis
un bouton de formulaire, s=E9lectionner tous les enregistrements dont le
champ (AutreRefProjet) ont m=EAme valeur que l'enregistrement en cours,
et modifier cette valeur (dans l'exemple mettre en majuscule)
J'ai =E9crits ce qui suit et j'ai un joli bug qui me dit "Erreur 3061.
Trop peu de param=E8tres. 1 attendu" !
Mais pourquoi Access me hait-il tant ?
Merci de votre aide...
SoniaG


Dim NouvNomRepProj As String
NouvNomRepProj =3D UCase(Me.AutreRefProjet)

Dim db As Database
Dim rst As Recordset
Set db =3D CurrentDb()
Dim strSQL As String
'requ=EAte cherchant les repProjet =E9quivalents =E0 celui en cours...
strSQL =3D "SELECT ReqDocumentsListe.Fonds,
ReqDocumentsListe.Abreviation, ReqDocumentsListe.Cote,
ReqDocumentsListe.Numerise, ReqDocumentsListe.Refobjet,
ReqDocumentsListe.RefFonds, ReqDocumentsListe.RefobjDoc,
ReqDocumentsListe.AutreRefProjet, ReqDocumentsListe.Legende,
ReqDocumentsListe.CoteDoc, ReqDocumentsListe.Dimensions,
ReqDocumentsListe.RefDoc"
strSQL =3D strSQL & " FROM ReqDocumentsListe WHERE
((ReqDocumentsListe.RefDoc) Is Not null)"
strSQL =3D strSQL & " AND ((ReqDocumentsListe.AutreRefProjet) =3D
[Forms]![FmrExpositionsDocumentsListe]![AutreRefProjet])"
Set rst =3D db.OpenRecordset(strSQL)
rst.MoveFirst
While Not rst.EOF
rst.Edit
rst!AutreRefProjet =3D NouvNomRepProj
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst =3D Nothing

4 réponses

Avatar
Ilan
Bonjour,
vérifie l'orthographe de tes champs et essaie aussi en remplaçant :
strSQL = strSQL & " AND ((ReqDocumentsListe.AutreRefProjet) > [Forms]![FmrExpositionsDocumentsListe]![AutreRefProjet])"


par

strSQL = strSQL & " AND ((ReqDocumentsListe.AutreRefProjet) ='" &
[Forms]![FmrExpositionsDocumentsListe]![AutreRefProjet]) & "'"


'" => Simple cote (') + guillemet (")
"'" => guillemet + simple cote + guillemet

Une requete de mise à jour est peut-être aussi mieux appopriée.
dim MajQuery as QueryDef
dim SQLMajQuery as string
SQLMajQuery="UPDATE RepDocumentsListe SET
AutreRefProjet=UCase(AutreReProjet) WHERE RefDocs IS NOT NULL AND
AutreRefProjet='" & Me.AutreRefProjet & "'"

Set MajQuery=Currentdb.CreateQueryDef("",SQLMajQuery)
MajQuery.execute






Bonsoir,
A chaque jour suffit sa peine, mais là je bloque : je voudrais, depuis
un bouton de formulaire, sélectionner tous les enregistrements dont le
champ (AutreRefProjet) ont même valeur que l'enregistrement en cours,
et modifier cette valeur (dans l'exemple mettre en majuscule)
J'ai écrits ce qui suit et j'ai un joli bug qui me dit "Erreur 3061.
Trop peu de paramètres. 1 attendu" !
Mais pourquoi Access me hait-il tant ?
Merci de votre aide...
SoniaG


Dim NouvNomRepProj As String
NouvNomRepProj = UCase(Me.AutreRefProjet)

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb()
Dim strSQL As String
'requête cherchant les repProjet équivalents à celui en cours...
strSQL = "SELECT ReqDocumentsListe.Fonds,
ReqDocumentsListe.Abreviation, ReqDocumentsListe.Cote,
ReqDocumentsListe.Numerise, ReqDocumentsListe.Refobjet,
ReqDocumentsListe.RefFonds, ReqDocumentsListe.RefobjDoc,
ReqDocumentsListe.AutreRefProjet, ReqDocumentsListe.Legende,
ReqDocumentsListe.CoteDoc, ReqDocumentsListe.Dimensions,
ReqDocumentsListe.RefDoc"
strSQL = strSQL & " FROM ReqDocumentsListe WHERE
((ReqDocumentsListe.RefDoc) Is Not null)"
strSQL = strSQL & " AND ((ReqDocumentsListe.AutreRefProjet) > [Forms]![FmrExpositionsDocumentsListe]![AutreRefProjet])"
Set rst = db.OpenRecordset(strSQL)
rst.MoveFirst
While Not rst.EOF
rst.Edit
rst!AutreRefProjet = NouvNomRepProj
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing




Avatar
soniagaubert
Bonjour et merci Ilan,

Finalement je m'en suis sortie : ta première intuition était la bonne
sauf que la synthaxe que tu proposais ne l'était pas... Donc après
quelques heures de galères (j'ai cherché dans d'autres directions
entre-temps), j'ai eu l'idée de voir ce qu'un bouton automatique sur
ouverture de formulaire comportant le même champ me donnait comme
syntaxe...
Effectivement c'est une recherche sur du texte et c'est pas si souvent
qu'on recherche sur du texte en demandant une équivalence (= et non
like...)
Donc pour ceux que ça intéresse, voilà ce qui marche bien :
Dim db As Database
Dim NomRepProjet As String
NomRepProjet = UCase(Me![AutreRefProjet])
Dim strSQL As String
Dim rst As Recordset
strSQL = "SELECT Documents.* FROM Documents WHERE
Documents.AutreRefProjet = " & "'" & Me![AutreRefProjet] & "'"

Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then 's'il en existe
rst.MoveFirst
While Not rst.EOF
rst.Edit
rst!AutreRefProjet = NomRepProjet
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End If

Bon dimanche,
SoniaG
Avatar
Ilan
Pardon Me!AutreRefProjet


Bonjour et merci Ilan,

Finalement je m'en suis sortie : ta première intuition était la bonne
sauf que la synthaxe que tu proposais ne l'était pas... Donc après
quelques heures de galères (j'ai cherché dans d'autres directions
entre-temps), j'ai eu l'idée de voir ce qu'un bouton automatique sur
ouverture de formulaire comportant le même champ me donnait comme
syntaxe...
Effectivement c'est une recherche sur du texte et c'est pas si souvent
qu'on recherche sur du texte en demandant une équivalence (= et non
like...)
Donc pour ceux que ça intéresse, voilà ce qui marche bien :
Dim db As Database
Dim NomRepProjet As String
NomRepProjet = UCase(Me![AutreRefProjet])
Dim strSQL As String
Dim rst As Recordset
strSQL = "SELECT Documents.* FROM Documents WHERE
Documents.AutreRefProjet = " & "'" & Me![AutreRefProjet] & "'"

Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then 's'il en existe
rst.MoveFirst
While Not rst.EOF
rst.Edit
rst!AutreRefProjet = NomRepProjet
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End If

Bon dimanche,
SoniaG




Avatar
Ilan
Effectivement, j'ai repris le nom de la variable qui fait référence au
formulaire alors que ma syntaxe ne tient compte que de la valeur. Soit
Me.AutreRefProjet et non Forms!......
Les guillements sont utilisés pour les chaines de caractères; je l'ai
supposé parce que tu mets le tout en majuscule.

texte

Bonjour et merci Ilan,

Finalement je m'en suis sortie : ta première intuition était la bonne
sauf que la synthaxe que tu proposais ne l'était pas... Donc après
quelques heures de galères (j'ai cherché dans d'autres directions
entre-temps), j'ai eu l'idée de voir ce qu'un bouton automatique sur
ouverture de formulaire comportant le même champ me donnait comme
syntaxe...
Effectivement c'est une recherche sur du texte et c'est pas si souvent
qu'on recherche sur du texte en demandant une équivalence (= et non
like...)
Donc pour ceux que ça intéresse, voilà ce qui marche bien :
Dim db As Database
Dim NomRepProjet As String
NomRepProjet = UCase(Me![AutreRefProjet])
Dim strSQL As String
Dim rst As Recordset
strSQL = "SELECT Documents.* FROM Documents WHERE
Documents.AutreRefProjet = " & "'" & Me![AutreRefProjet] & "'"

Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then 's'il en existe
rst.MoveFirst
While Not rst.EOF
rst.Edit
rst!AutreRefProjet = NomRepProjet
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End If

Bon dimanche,
SoniaG