Requete update fait des caprices
Résolu
laetitia02
Messages postés
424
Date d'inscription
Statut
Membre
Dernière intervention
-
laetitia02 Messages postés 424 Date d'inscription Statut Membre Dernière intervention -
laetitia02 Messages postés 424 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Requete update fait des caprices
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Wsus offline update - Télécharger - Systèmes d'exploitation
- Nettoyage windows update - Guide
10 réponses
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
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
"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.
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.
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
;o)
Polux
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
"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
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