{Access} Utilisation de requete Update sous vb [Résolu/Fermé]

Signaler
-
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
-
Bonjour,
Je suis sur access que depuis une semaine et je suis sur un petit projet et je suis confronter a une difficulté de puis 2 jours. je dispose d'une table prêt ( à trois champ : id-prêt, id-utilisateur, id-tiers, montant et date) et d'un formulaire qui me permet de modifier ces différents champs.

Donc je voulais au départ faire une liste déroulante de recherche qui affiche les différents champ l utilisateur choisi l'un d'eux, cette liste retourne l' id-prêt, sa j y suis arriver. A

Après sus mon formulaire j ai 4 autres champs qui me permettent de rentrer les nouvelles valeurs pour id-utilisateur, id-tiers, montant et date et la je voudrais que l 'utilisateur n'est plus qu'a appuyer sur le bouton modifier pour que les champ soit automatiquement modifier et c la que je tourne en rond.
voici mes différentes tentatives :
1)
Dim req As String
Dim rs As Recordset
Dim mabase As Database
Set mabase = CurrentDb()
' Exécution de la requête
req = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "'"
Set rs = mabase.OpenRecordset(req)

2)
Dim sdl As String
Dim rs As DAO.Recordset
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "';"
Set rs = CurrentDb.OpenRecordset(sql)

3)
Set db = CurrentDb
Set req = db.OpenRecordset("PRÊT")
req.Edit
req("IDENTIFIANT_TIERS") = txtNomTier
req("IDENTIFIANT_UTILISATEUR") = ValeurNumUtilisateur
req("MONTANT_PRÊT") = txtMontantAvoir
req("DATE_PRÊT") = txtDateAvoir
req.Update
req.Close

Avec cette dernière méthode j'arrive a faire un mise jour mais sur la première ligne de ma table je n'arrive pas a lui dire d'aller à l'id-prêt qui retourné par la liste de recherche

Cordialement merci de votre aide
jph

13 réponses

Salut

Je connais pas Access, mais je peux te garantir que tes requêtes update ne te renvoient pas un recordset (il y a donc peu de chances qu'OpenRecordset arrive à faire exécuter un update).
il doit exister une instruction genre ExecuteCommand pour faire executer tes requetes update.
Salut,
ok merci je vais chercher sa

++
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
bonjour

tu peux faire:

docmd.runsql(sql)
ou sql est egal a ta requete
Salut,
ok j'essayerai ceci vers midi car la je suis pas sur mon pc et je n'ai pas accès a mon fichier je vous tient au courant et merci encore

++
Salut je viens tester avec ceci et voici ce que j obtiens
Dim sdl As String
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "';"
DoCmd.RunSQL (sql)

et il m a mit une erreur qui est :
type de de donnée incompatible dans l'expression du critère

Voila désoler mais je ne comprend pas quelqu'un peut m'aider s'il vous plait merci

++
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 023
Salut,

sûrement un champ numérique que tu as mis entre quote, alors que celles-ci sont réservées aux chaines...

ValeurNumUtilisateur ?
txtMontantAvoir ?
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
deja ton dim né pas bon:
dim sql as string
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = [txtNomTier], PRÊT.IDENTIFIANT_UTILISATEUR =ValeurNumUtilisateur , PRÊT.MONTANT_PRÊT =txtMontantAvoir, PRÊT.DATE_PRÊT = txtDateAvoir Where PRÊT.IDENTIFIANT_PRÊT = txtNumAvoir"


essai ca voir

je comprend pas pourquoi tu concatenne tout tu execute ta requete depuis vb dc je suppose que tu l'execute depuis un bouton situé sur le formulaire dc pas besoin de concatenner peur etre il faudra les mettre entre [ ]
Lu,
oui désoler j aurai du préciser que tout ce qui txt...... sont des champ present sur mon formulaire et ValeurNumUtilisateur est une variable global contenant mon id-utilisateur car pour accéder a ce formulaire il faut s authentifier et je garde le numéro ds cette variable, blux.

Je vais essayer tout de suite cette syntaxe merci moiced59
++
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
ok tiens nous o courant
Re alors c super sa marche merci beaucoup dim sql as string
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = [txtNomTier], PRÊT.IDENTIFIANT_UTILISATEUR =ValeurNumUtilisateur , PRÊT.MONTANT_PRÊT =txtMontantAvoir, PRÊT.DATE_PRÊT = txtDateAvoir Where PRÊT.IDENTIFIANT_PRÊT = txtNumAvoir"

par contre jute une petite dernière chose pourrait tu m expliquer ou me donner l adresse d'un tuto qui explique comment fonctionne exactement pourquoi on doit mettre des crochets ou rien ou guillemet et dans quel cas aussi ^^ et aussi c'est comment enlever le message d alerte qui apparait : " Vous allez mettre à jour une ligne(s). dès que vous cliquerez sur oui, il vous sera impossible de ......"

encore merci
++
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 023
On met des [] lorsque l'on fait référence à un nom qui a un blanc à l'intérieur, afin d'éviter qu'access ne croie que c'est un séparateur...

[champ 1] et non champ 1

On met entre quote (l'apostrophe simple, touche 4 du clavier) les données qui sont de type chaine. Les numériques n'ont pas besoin de cela, et pour les dates, il faut mettre des # au début et à la fin...

SELECT * FROM [table 1] WHERE champ1 = 'toto' AND [champ suivant] = 12 AND champ_date = #01/01/2010#;

Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
alors des crochets: reference a un champ du formulaire
rien : reference a une variable
"" : concatenne du texte brut exemple select * from personne where nom = pierre !!! where nom = "pierre"
supprimer message d'alerte :
au debut du code vb:
docmd.setwarnings false
a la fin du code
docmd.setwarnings true

voila
OK merci beaucoup de ton aide
je te souhaite de passé de bonen fête de fin d 'année et une bonne journée et merci encore
++
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
les ' ' ne fonctionne pas sous sql access !!!
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 023
depuis quelle version ?
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
G rien dis ca fonctionne !!!!
je pensais que non dsl ;)