OVH Cloud OVH Cloud

Pourquoi ma Procedure stockée ne s'execute pas ?

6 réponses
Avatar
TF
Bonjour,

Je souhaite inserer des enregistrements à partir d'une table dans une une
autre table, l'insertion ne se fait pas.
Je ne vois pas pourquoi ?
Merci
Voilà le code de la SP :
ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
varchar(16), @RV int output)

AS

begin

SET NOCOUNT ON

BEGIN TRANSACTION

insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle, Quantite,
DateEdition, TVA, Prix)

select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition,
TVA, Prix From T_Devis_TMP

where sNumeroDevis = @sNumeroDevis And PC = @PC

set @RV = @@ERROR

COMMIT TRANSACTION

end

6 réponses

Avatar
Patrice
Le SELECT retourne t'il quelque chose ?

Patrice




"TF" a écrit dans le message de
news:40a32ecb$0$12743$
Bonjour,

Je souhaite inserer des enregistrements à partir d'une table dans une une
autre table, l'insertion ne se fait pas.
Je ne vois pas pourquoi ?
Merci
Voilà le code de la SP :
ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
varchar(16), @RV int output)

AS

begin

SET NOCOUNT ON

BEGIN TRANSACTION

insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle, Quantite,
DateEdition, TVA, Prix)

select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition,
TVA, Prix From T_Devis_TMP

where sNumeroDevis = @sNumeroDevis And PC = @PC

set @RV = @@ERROR

COMMIT TRANSACTION

end




Avatar
TF
Les enregistrements ne sont pas insérés dans la table T_Devis.

"Patrice" a écrit dans le message de
news:
Le SELECT retourne t'il quelque chose ?

Patrice




"TF" a écrit dans le message de
news:40a32ecb$0$12743$
> Bonjour,
>
> Je souhaite inserer des enregistrements à partir d'une table dans une


une
> autre table, l'insertion ne se fait pas.
> Je ne vois pas pourquoi ?
> Merci
> Voilà le code de la SP :
> ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
> varchar(16), @RV int output)
>
> AS
>
> begin
>
> SET NOCOUNT ON
>
> BEGIN TRANSACTION
>
> insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle,


Quantite,
> DateEdition, TVA, Prix)
>
> select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition,
> TVA, Prix From T_Devis_TMP
>
> where sNumeroDevis = @sNumeroDevis And PC = @PC
>
> set @RV = @@ERROR
>
> COMMIT TRANSACTION
>
> end
>
>




Avatar
Fred BROUARD
ALTER PROCEDURE sp_TransfererDevis
@PC Varchar(50),
@sNumeroDevis varchar(16),
@RV int output)

AS

SET NOCOUNT ON

insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition, TVA, Prix)
select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition, TVA, Prix
From T_Devis_TMP
where sNumeroDevis = @sNumeroDevis
And PC = @PC

set @RV = @@ERROR

***

La gestion de la transaction est inutile dans ce cas et pour 2 raisons :
1) une requête est une transaction même si elle comporte 3278 sous requêtes ...
2) il est inutile de gérer un COMMIT si pas de voie au ROLLBACK !

Le code est correct. Comme la lance tu ?

A +



--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

TF a écrit:
Bonjour,

Je souhaite inserer des enregistrements à partir d'une table dans une une
autre table, l'insertion ne se fait pas.
Je ne vois pas pourquoi ?
Merci
Voilà le code de la SP :
ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
varchar(16), @RV int output)

AS

begin

SET NOCOUNT ON

BEGIN TRANSACTION

insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle, Quantite,
DateEdition, TVA, Prix)

select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition,
TVA, Prix From T_Devis_TMP

where sNumeroDevis = @sNumeroDevis And PC = @PC

set @RV = @@ERROR

COMMIT TRANSACTION

end




Avatar
Patrice
J'ai bien compris et je suggérais que le select ne retourne aucune ligne ce
qui ne provoque donc aucune insertion. Si tu te contentes de metre la
partire INSERT en commentaire pour ne faire que le SELECT est ce qu'il
retourne des lignes ?

Sinon il pourrait y avoir un déclencheur qui annule silencieusement tes
modifs...

Tu ne vois aucune erreur ?

"TF" a écrit dans le message de
news:40a340a7$0$12732$
Les enregistrements ne sont pas insérés dans la table T_Devis.

"Patrice" a écrit dans le message de
news:
> Le SELECT retourne t'il quelque chose ?
>
> Patrice
>
>
>
>
> "TF" a écrit dans le message de
> news:40a32ecb$0$12743$
> > Bonjour,
> >
> > Je souhaite inserer des enregistrements à partir d'une table dans une
une
> > autre table, l'insertion ne se fait pas.
> > Je ne vois pas pourquoi ?
> > Merci
> > Voilà le code de la SP :
> > ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
> > varchar(16), @RV int output)
> >
> > AS
> >
> > begin
> >
> > SET NOCOUNT ON
> >
> > BEGIN TRANSACTION
> >
> > insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle,
Quantite,
> > DateEdition, TVA, Prix)
> >
> > select sNumeroDevis, NumeroClient, NumeroArticle, Quantite,


DateEdition,
> > TVA, Prix From T_Devis_TMP
> >
> > where sNumeroDevis = @sNumeroDevis And PC = @PC
> >
> > set @RV = @@ERROR
> >
> > COMMIT TRANSACTION
> >
> > end
> >
> >
>
>




Avatar
TF
A partir d'un code VBA comme suit :

''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ADO_TransfererDevis(sNumeroDevis, PC)
Dim Cmd As New ADODB.Command
Dim Prm As ADODB.Parameter

Set Prm = Cmd.CreateParameter("sNumeroDevis", adVarChar, adParamInput, 16)
Cmd.Parameters.Append Prm
Prm.Value = sNumeroDevis

Set Prm = Cmd.CreateParameter("PC", adVarChar, adParamInput, 50)
Cmd.Parameters.Append Prm
Prm.Value = PC
Cmd.Parameters.Append Cmd.CreateParameter("RV", adInteger, adParamOutput)

Cmd.CommandText = "sp_TransfererDevis" <<<<<<<<<<<<<<<<<<<<< c'est ma SP
Cmd.CommandType = adCmdStoredProc
Set Cmd.ActiveConnection = CurrentProject.Connection
Cmd.Execute
ADO_TransfererDevis = Cmd.Parameters("RV").Value
Set Cmd = Nothing
Set Prm = Nothing
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Fred BROUARD" a écrit dans le message de
news:

ALTER PROCEDURE sp_TransfererDevis
@PC Varchar(50),
@sNumeroDevis varchar(16),
@RV int output)

AS

SET NOCOUNT ON

insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle, Quantite,


DateEdition, TVA, Prix)
select sNumeroDevis, NumeroClient, NumeroArticle, Quantite,


DateEdition, TVA, Prix
From T_Devis_TMP
where sNumeroDevis = @sNumeroDevis
And PC = @PC

set @RV = @@ERROR

***

La gestion de la transaction est inutile dans ce cas et pour 2 raisons :
1) une requête est une transaction même si elle comporte 3278 sous


requêtes ...
2) il est inutile de gérer un COMMIT si pas de voie au ROLLBACK !

Le code est correct. Comme la lance tu ?

A +



--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

TF a écrit:
> Bonjour,
>
> Je souhaite inserer des enregistrements à partir d'une table dans une


une
> autre table, l'insertion ne se fait pas.
> Je ne vois pas pourquoi ?
> Merci
> Voilà le code de la SP :
> ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
> varchar(16), @RV int output)
>
> AS
>
> begin
>
> SET NOCOUNT ON
>
> BEGIN TRANSACTION
>
> insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle,


Quantite,
> DateEdition, TVA, Prix)
>
> select sNumeroDevis, NumeroClient, NumeroArticle, Quantite, DateEdition,
> TVA, Prix From T_Devis_TMP
>
> where sNumeroDevis = @sNumeroDevis And PC = @PC
>
> set @RV = @@ERROR
>
> COMMIT TRANSACTION
>
> end
>
>



Avatar
TF
Merci pour tous,
J'ai trouvé la solution :
Il faut executer la SP dans une commande : EXEC sp_TransfererDevis arg1,
arg2
Mais comme j'ai fait (création de paramètre, etc ...)
Merci
"TF" a écrit dans le message de
news:40a34aec$0$12725$
A partir d'un code VBA comme suit :

''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ADO_TransfererDevis(sNumeroDevis, PC)
Dim Cmd As New ADODB.Command
Dim Prm As ADODB.Parameter

Set Prm = Cmd.CreateParameter("sNumeroDevis", adVarChar, adParamInput, 16)
Cmd.Parameters.Append Prm
Prm.Value = sNumeroDevis

Set Prm = Cmd.CreateParameter("PC", adVarChar, adParamInput, 50)
Cmd.Parameters.Append Prm
Prm.Value = PC
Cmd.Parameters.Append Cmd.CreateParameter("RV", adInteger, adParamOutput)

Cmd.CommandText = "sp_TransfererDevis" <<<<<<<<<<<<<<<<<<<<< c'est ma SP
Cmd.CommandType = adCmdStoredProc
Set Cmd.ActiveConnection = CurrentProject.Connection
Cmd.Execute
ADO_TransfererDevis = Cmd.Parameters("RV").Value
Set Cmd = Nothing
Set Prm = Nothing
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Fred BROUARD" a écrit dans le message de
news:
>
> ALTER PROCEDURE sp_TransfererDevis
> @PC Varchar(50),
> @sNumeroDevis varchar(16),
> @RV int output)
>
> AS
>
> SET NOCOUNT ON
>
> insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle,


Quantite,
DateEdition, TVA, Prix)
> select sNumeroDevis, NumeroClient, NumeroArticle,


Quantite,
DateEdition, TVA, Prix
> From T_Devis_TMP
> where sNumeroDevis = @sNumeroDevis
> And PC = @PC
>
> set @RV = @@ERROR
>
> ***
>
> La gestion de la transaction est inutile dans ce cas et pour 2 raisons :
> 1) une requête est une transaction même si elle comporte 3278 sous
requêtes ...
> 2) il est inutile de gérer un COMMIT si pas de voie au ROLLBACK !
>
> Le code est correct. Comme la lance tu ?
>
> A +
>
>
>
> --
> Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
> Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
> Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
> ************************ www.datasapiens.com *************************
>
> TF a écrit:
> > Bonjour,
> >
> > Je souhaite inserer des enregistrements à partir d'une table dans une
une
> > autre table, l'insertion ne se fait pas.
> > Je ne vois pas pourquoi ?
> > Merci
> > Voilà le code de la SP :
> > ALTER PROCEDURE sp_TransfererDevis (@PC Varchar(50), @sNumeroDevis
> > varchar(16), @RV int output)
> >
> > AS
> >
> > begin
> >
> > SET NOCOUNT ON
> >
> > BEGIN TRANSACTION
> >
> > insert Into T_Devis (sNumeroDevis, NumeroClient, NumeroArticle,
Quantite,
> > DateEdition, TVA, Prix)
> >
> > select sNumeroDevis, NumeroClient, NumeroArticle, Quantite,


DateEdition,
> > TVA, Prix From T_Devis_TMP
> >
> > where sNumeroDevis = @sNumeroDevis And PC = @PC
> >
> > set @RV = @@ERROR
> >
> > COMMIT TRANSACTION
> >
> > end
> >
> >
>