Requete update fait des caprices

Résolu/Fermé
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 - 31 janv. 2008 à 10:37
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 - 1 févr. 2008 à 13:51
Bonjour,

voila j ai creer une requete update avec condition, mais lors d l execution mon programme beug sur la requete update, avec ce message: "no current record" voici mon programme sous access 97

req = "select fiche, date_cdao, num_dossier, prod_id_donnees from basi_cession where prod_id_donnees=" & val & "and fiche is null order by date_cdao desc"
Set rs = mabase.OpenRecordset(req)
If IsNull(rs) Then
Me.Fichep = ""
Else
req = "update basi_cession set fiche='PériméP' where num_dossier='" & rs!Num_Dossier & "' and prod_id_donnees=" & rs!prod_id_données
DoCmd.RunSQL (req)
end if

merci pour votre aide
A voir également:

10 réponses

phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
1 févr. 2008 à 06:34
en général Access demande une clé primaire pour faire des updates
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2008 à 07:01
Bonjour,

Le recordset (rs) contient plusieurs lignes d'enregistrement et tu fais un Update avec .... Si tu veux faire un Update sur toutes les lignes, il faut faire une boucle While rs.EOF ...

;o)

polux
0
phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
1 févr. 2008 à 12:17
"il faut faire une boucle While rs.EOF"
aie, non ! un update se fait juste comme il l'a écrit. surtout ne pas boucler SQL fait ça dans un 100ième de temps, si pas un 1000ième. seulement, il semble que le moteur n'arrive pas à trouver les bonnes lignes. normalement c'est parce qu'on a pas défini une clé primaire (clé unique). celle-là est absolument nécessaire sinon le moteur perd les pédales.
0
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 129
1 févr. 2008 à 12:27
merci probleme resolu
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2008 à 12:39
Heuuu Phil, je fais déjà comme ça et ça ne m'a jamais posé de problème ... Ici je pense que le blème vient du recorset qui contient tous les enregistrements donc difficile de vouloir faire un Update avec le résultat du recordset sans le lire ligne par ligne ... ça serait bien que Laetitia mette ici comment elle a résolu son blème

;o)

Polux
0
phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
1 févr. 2008 à 12:53
t'as raison que ça ne pose pas de pb (sauf c'est pas efficace, ça bouffe des ressources, ça charge le réseau (transfert de tous les records sur le client et le retour), mais tant que tu as un machine puissante avec beaucoup de RAM, ça marche. bon maintenant utilise ta méthode sur 1.000.000 de lignes, et ce serait toujours une petite bdd) . mais si qqun du coté base de données voit ton code tu est prêt pour www.theDailyWTF.com . il fait d'ailleurs pas de update sur le recordset. son programme a l'air un peu tordu mais le rs est là pour autre chose. pourtant j'aimerais savoir quel était le pb et comment il l'a résolu.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 129
1 févr. 2008 à 12:59
tout simplement
req = "select fiche, date_cdao, num_dossier, prod_id_donnees from basi_cession where prod_id_donnees=" & val & "and fiche is null order by date_cdao desc"
Set rs = mabase.OpenRecordset(req)
If(rs.EOF) Then
Me.Fichep = ""
Else
req = "update basi_cession set fiche='PériméP' where num_dossier='" & rs!Num_Dossier & "' and prod_id_donnees=" & rs!prod_id_données
DoCmd.RunSQL (req)
end if
0
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 129
1 févr. 2008 à 13:01
ma solution je l avais deja depuis hier, mais merci quand meme, et j voulais modifier seulement le premier enregistrement car c en fonction d date, alors pas besoin de while. pour information mon rs peut comprendre au maximum 2 enregistrements avec la condition fiche is null, voila
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2008 à 13:05
pour moi l'update se fait bien sur des éléments du recordset :

"update basi_cession set fiche='PériméP' where num_dossier='" & rs!Num_Dossier & "' and prod_id_donnees=" & rs!prod_id_données

Effectivement il serait préférable et plus sécurisant de récupérer la clé pour faire l'update.

La base étant coté serveur, le client, lui ne voit que le résultat ... et c'est le résultat attendu qui est important et pas la manière de l'obtenir.

;o)

polux
0
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 129
1 févr. 2008 à 13:30
non l update s'effectue sur ma table basi_cession, mais a partir des element du recordset, je cherche le numdosssier qui correspond au numdossier du recordset ainsi que id, mais je modifie fiche dans ma table basi_cession, la clé est récuperer grace a rs!prod_id_donnees
0
phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
1 févr. 2008 à 13:48
zuuuuut, j'avais pas vu le IsNull(rs). bien sur chaque fois qu'on ouvre un rs on teste sur rs.EOF est pa s'il est NULL. mea maxima culpa
0
laetitia02 Messages postés 424 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 12 mars 2009 129
1 févr. 2008 à 13:51
oui j avais fait une grosse erreur, j en ai honte. merci quand meme pour m avoir aider
0