problème avec curseur "for update"
Bonjour tout le monde,
Je travaille sur SQL server 2005 + Access 2003 et j'ai qql soucis avec un curseur qui est sensé me mettre 2 champs d'une table à jour mais sans succès.
L'appel de la procédure stockée de mise à jour depuis Access ne pose aucun problème. Le hic est dans SQL Server: il me dit que le curseur que j'utilise est en "READ ONLY", or je spécifie bien "FOR UPDATE" dans la déclaration de mon curseur.
Voici d'ailleur la procédure stockée en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| ALTER PROCEDURE [dbo].[sp_MAJ_pa_pourcentage_pour_validation_ART]
@PA_OBJ_FAM_NO AS BIGINT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ART VARCHAR(16)
DECLARE @QTE_CALC REAL
DECLARE @QTE_AJUST REAL
DECLARE @QTE_FINALE REAL
DECLARE @QTE_FAM BIGINT
DECLARE @POURCENT_NEW REAL
DECLARE c_ajust_art CURSOR SCROLL FOR
SELECT rq_ooep_obj_validArt_qte_pr_ajust.pa_art_cod , tb_OOEP_OBJ_pourcent_art.pa_qte_art_calc, rq_ooep_obj_validArt_qte_pr_ajust.delta_article, tb_OOEP_OBJ_pourcent_art.pa_qte_fam
FROM rq_ooep_obj_validArt_qte_pr_ajust INNER JOIN
tb_OOEP_OBJ_pourcent_art ON rq_ooep_obj_validArt_qte_pr_ajust.pa_art_cod = tb_OOEP_OBJ_pourcent_art.pa_art_cod
WHERE tb_ooep_obj_pourcent_art.pa_obj_fam_no = @PA_OBJ_FAM_NO
FOR UPDATE OF tb_ooep_obj_pourcent_art.pa_qte_art_man, tb_ooep_obj_pourcent_art.pa_pourcentage_man
-- mise à jour des quantités d'articles.
-- La différence (delta) entre la quantité initiale de la famille et la quantité finale après modification de l'utilisateur
-- est répartie ou retranchée entre les différents articles de la famille qui n'ont pas été modifiés.
-- calcul et mise à jour du nouveau pourcnetage de répartition des articles par rapport au total de la famille
OPEN c_ajust_art
FETCH c_ajust_art INTO @ART, @QTE_CALC, @QTE_AJUST, @QTE_FAM
IF (@@FETCH_STATUS = 0)
BEGIN
FETCH FIRST FROM c_ajust_art INTO @ART, @QTE_CALC, @QTE_AJUST, @QTE_FAM
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @QTE_FINALE = @QTE_CALC+@QTE_AJUST -- calcul de la nouvelle qtt de l'article
SELECT @POURCENT_NEW = @QTE_FINALE*100/@QTE_FAM -- calcul du nouveau pourcentage de répartition
UPDATE tb_ooep_obj_pourcent_art -- mise à jour de la table SQL
SET pa_qte_art_man = @QTE_FINALE -- maj de la quantité
WHERE CURRENT OF c_ajust_art
-- UPDATE tb_ooep_obj_pourcent_art
-- SET pa_pourcentage_man = @POURCENT_NEW -- mise à jour du pourcentage
-- WHERE CURRENT OF c_ajust_art
FETCH NEXT FROM c_ajust_art INTO @ART, @QTE_CALC, @QTE_AJUST, @QTE_FAM
END
END
CLOSE c_ajust_art
DEALLOCATE c_ajust_art
END |
Quelqu'un verrait-il pourquoi ma procédure ne s'exécute pas et comment je pourrais changer ce maudit curseur en "FOR UPDATE" et non pas en "READ ONLY)
Merci et bonne journée à tous
Julius