Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il s'agit
de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR &
"', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine & "')"
cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il s'agit
de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR &
"', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine & "')"
cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il s'agit
de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR &
"', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine & "')"
cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR
& "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR
& "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" & NOMMR
& "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnproasp/html/batchtransactionmanagement.asp
"Eric Dev" a écrit dans le message de news:
43171963$0$17241$Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnproasp/html/batchtransactionmanagement.asp
"Eric Dev" <eric.developpeur@wanadoo.fr> a écrit dans le message de news:
43171963$0$17241$8fcfb975@news.wanadoo.fr...
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnproasp/html/batchtransactionmanagement.asp
"Eric Dev" a écrit dans le message de news:
43171963$0$17241$Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit 8
valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit 8
valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit 8
valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE)
VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE)
VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" & 1 & "')"
cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
Je comprends mais seulement je ne peux pas passer les 8 paramètres parce
que deux sont dynamiques c'est à dire
MAX_IDSOURCE et MAX_IDCLIENT
La variable MAX_IDCLIENT correspond au dernier client inséré après
l'exécution de 1ere l'insertion.
de même que la variable MAX_IDSOURCE correspond au dernier IDSOURCE inséré
ce qu'il me faut c'est pourvoir la récupérer une fois le client inséré et
c'est pareil pour la deuxième insertion
Merci encore, je continue de mon côté.
"Fred BROUARD" a écrit dans le message de
news:Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit
8 valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT,
DATE_SOURCE) VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT,
ID_AFFAIRE) VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" &
1 & "')" cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
Je comprends mais seulement je ne peux pas passer les 8 paramètres parce
que deux sont dynamiques c'est à dire
MAX_IDSOURCE et MAX_IDCLIENT
La variable MAX_IDCLIENT correspond au dernier client inséré après
l'exécution de 1ere l'insertion.
de même que la variable MAX_IDSOURCE correspond au dernier IDSOURCE inséré
ce qu'il me faut c'est pourvoir la récupérer une fois le client inséré et
c'est pareil pour la deuxième insertion
Merci encore, je continue de mon côté.
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de
news: 43172CE8.1090708@club-internet.fr...
Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit
8 valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:
Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT,
DATE_SOURCE) VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT,
ID_AFFAIRE) VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" &
1 & "')" cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
Je comprends mais seulement je ne peux pas passer les 8 paramètres parce
que deux sont dynamiques c'est à dire
MAX_IDSOURCE et MAX_IDCLIENT
La variable MAX_IDCLIENT correspond au dernier client inséré après
l'exécution de 1ere l'insertion.
de même que la variable MAX_IDSOURCE correspond au dernier IDSOURCE inséré
ce qu'il me faut c'est pourvoir la récupérer une fois le client inséré et
c'est pareil pour la deuxième insertion
Merci encore, je continue de mon côté.
"Fred BROUARD" a écrit dans le message de
news:Le mieux est d'écrire une proc stok et de la lancer depuis ton code comme
s'il s'agissait d'une requête.
Voici la procédure stiockée (incomplète au niveau des types de données :
A lancer dans l'analyseur de requête sut ta base de prod :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@MAX_IDSOURCE ???
@MAX_IDCLIENT ???
@origine ???
@typepret ???
AS
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
/**************************************************************************/
dans ton code :
SQLInsertClient = "PROCEDURE P_MES_5_INSERTIONS " & NOMMR & "', '" &
PRENOMMR...
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
Il faut passer tous les paramètres de la procédure en un seul coup, soit
8 valeurs.
Pour en savoir plus :
1) A quoi servent les transactions ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
2) A quoi servent les procédure stockées ?
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6
3) écrire des procédures stockées sous MS SQL Server 2000
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Eric Dev a écrit:Bonjour à tous
Je souhaite faire 5 insertions dans ma base de données mais vu qu'il
s'agit de tables différentes comment faire des transactions en effet
l'ensemble doit s'arreter si un insertion ne fonctionne pas aidez moi
voici ce que j'ai essayé
BEGIN TRAN
SQLInsertClient = "INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES('" &
NOMMR & "', '" & PRENOMMR)"
cmdInsert.commandText = SQLInsertClient
cmdInsert.Execute
SAVE TRAN P1
SQLInsertSC = "INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT,
DATE_SOURCE) VALUES ('" & ets & "', '" & date() & "')"
cmdInsert.commandText = SQLInsertSC
cmdInsert.Execute
SAVE TRAN P2
SQLInsertLS = "INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT,
ID_AFFAIRE) VALUES ('" & MAX_IDSOURCE & "', '" & MAX_IDCLIENT & "', '" &
1 & "')" cmdInsert.commandText = SQLInsertLS
cmdInsert.Execute
SAVE TRAN P3
SQLInsertLM = "INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE,
ID_ORIGINE) VALUES ('" & MAX_IDSOURCE & "', '" & 2 & "', '" & origine &
"')" cmdInsert.commandText = SQLInsertLM
cmdInsert.Execute
SAVE TRAN P4
SQLInsertA = "INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET)
VALUES ('" & MAX_IDCLIENT & "', '" & 1 & "', '" & typepret & "')"
cmdInsert.commandText = SQLInsertA
cmdInsert.Execute
SAVE TRAN P5
COMMIT TRAN P1, P2, P3, P4, P5
Merci de m'aider
Raison de plus pour une procédure :/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identityINSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identityINSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
Raison de plus pour une procédure :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identity
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identity
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
Raison de plus pour une procédure :/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identityINSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identityINSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
En effet non seulement benoit à raison, mais vous en faisant cela dans du
code client vous avez toutes les chances que cela se passe mal un jour ou
l'autre :
Si, entre votre requête 1 et la requête 2, un autre poste démarre le même
process, alors vous aller récupérer dans le max, non pas celui que vous
venez d'insérer, mais celui que l'autre poste à insére !!!
De toute façon récupérer le max suite à l'insertion d'une ligne ne vous
garantiera JAMAIS que c'est bien le dernier soue VOUS avez inséré, mais
que c'est le dernier qui a été inséré par n'importe qui.
Seule la variable local @@IDENTITY vous le garantrie car elle est propre à
la session.
Donc procédure stockée si vous ne voulez pas pourrir vos données !!!
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Benoit a écrit:Raison de plus pour une procédure :/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identityINSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identityINSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
En effet non seulement benoit à raison, mais vous en faisant cela dans du
code client vous avez toutes les chances que cela se passe mal un jour ou
l'autre :
Si, entre votre requête 1 et la requête 2, un autre poste démarre le même
process, alors vous aller récupérer dans le max, non pas celui que vous
venez d'insérer, mais celui que l'autre poste à insére !!!
De toute façon récupérer le max suite à l'insertion d'une ligne ne vous
garantiera JAMAIS que c'est bien le dernier soue VOUS avez inséré, mais
que c'est le dernier qui a été inséré par n'importe qui.
Seule la variable local @@IDENTITY vous le garantrie car elle est propre à
la session.
Donc procédure stockée si vous ne voulez pas pourrir vos données !!!
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Benoit a écrit:
Raison de plus pour une procédure :
/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER
-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identity
INSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identity
INSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION
En effet non seulement benoit à raison, mais vous en faisant cela dans du
code client vous avez toutes les chances que cela se passe mal un jour ou
l'autre :
Si, entre votre requête 1 et la requête 2, un autre poste démarre le même
process, alors vous aller récupérer dans le max, non pas celui que vous
venez d'insérer, mais celui que l'autre poste à insére !!!
De toute façon récupérer le max suite à l'insertion d'une ligne ne vous
garantiera JAMAIS que c'est bien le dernier soue VOUS avez inséré, mais
que c'est le dernier qui a été inséré par n'importe qui.
Seule la variable local @@IDENTITY vous le garantrie car elle est propre à
la session.
Donc procédure stockée si vous ne voulez pas pourrir vos données !!!
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 *************************
Benoit a écrit:Raison de plus pour une procédure :/**************************************************************************/
-- création de la procédure stockée
CREATE PROCEDURE P_MES_5_INSERTIONS
@NOMMR VARCHAR(???),
@PRENOMMR VARCHAR(???),
@ets INTEGER,
@Madate DATETIME,
@origine ???
@typepret ???
AS
DECLARE @MAX_IDSOURCE INTEGER, @MAX_IDCLIENT INTEGER-- démarrage de la transaction
BEGIN TRANSACTION
-- première insertion
INSERT INTO CLIENT(NOM_MR, PRENOM_MR) VALUES(@NOMMR, @PRENOMMR)
-- si erreur se brancher à l'étiquette "LBL_ERROR"
IF @@ERROR <> 0 GOTO LBL_ERROR
-- seconde insertion...
INSERT INTO SOURCE_CONTACT (ID_ETABLISSEMENT, DATE_SOURCE) VALUES (@ets,
@Madate)
-- si erreur ..
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDSOURCE = @@identityINSERT INTO LISTE_SOURCE (ID_SOURCE, IDCLIENT, ID_AFFAIRE) VALUES
(@MAX_IDSOURCE, @MAX_IDCLIENT, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
SET @MAX_IDCLIENT = @@identityINSERT INTO LISTE_MOYENORIGINE (ID_SOURCE, ID_MODE, ID_ORIGINE) VALUES
(@MAX_IDSOURCE, 2, @origine)"
IF @@ERROR <> 0 GOTO LBL_ERROR
INSERT INTO AFFAIRE (IDCLIENT, ID_AFFAIRE, CODETYPE_PRET) VALUES
(@MAX_IDCLIENT, 1, @typepret)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- si l'on arrive ici c'est que les 5 INSERT se sont bien passés :
-- on valide la transaction, tout est écrit
COMMIT TRANSACTION
-- et on sort
RETURN
-- c'est ici que l'on arrive en cas d'erreur
LBL_ERROR:
-- annule la transaction : rien n'est écrit
ROLLBACK TRANSACTION