Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
31 août 2006 à 09:52
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 2013
-
1 sept. 2006 à 19:16
Avant de me faire traiter de feignait je tien à dire que
j'ai regarder sur le net avant de posée cette question (rapidement c'est vrais
mais j’ai plein de truc à faire et je ne peut pas me permettre d’y passée deux
heures).
J'aurais en faite simplement voulut avoir des précisions et savoir si il y des
"trucs" à savoir pour l'utilisé correctement.
Déjà voila ce que j'ai compris :
Un commit s'utilise pour versifier l'exécution de requête afin
d'exécuter toute les requête ou aucune, et, cas ce passerais de la façon
suivante :
Désactivation du commit automatique (à priori
avec un "BEGIN TRANSACTION" mais en fais cette commande c'est quoi?
Une sorte de requête ???)
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
On fais les requête normalement ("INSERT
INTO ..." cas je sais quand même ce que cas veut dire! )
Effectue une commit ("COMMIT
TRANSACTION" alors si j'ai bien compris on ne fait cas que si on n'a pas
d'erreur durant les "INSERT" ? Mais cette commande aussi je ne sais
pas ce que c'est! )
En cas d'erreur durant les "INSERT"
on fait ("ROLLBACK TRANSACTION" Donc ca c'est pour annulé tout les
"INSERT" effectuer depuis le dernier commit? Heeee, cas non plus je ne
sais pas si c'est une requête ou autre !)
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"
o:href="/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
Bon alors en résumé je crois avoir compris ce que c'est qu'un
"commit" tout du moins en théorie mais je ne sais pas command on s'en
sert en vrais.
Merci d'avance.
Ce soir dans "triste monde tragique" :
Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !
BEGIN TRANSACTION marque le début d'une transaction... Quand on se trouve dans le cadre d'une transaction, toutes les requêtes de modification (INSERT / DELETE / UPDATE) executées seront toutes refusées ou acceptées en bloc.
Je fais pas exemple ceci :
BEGIN TRANSACTION
INSERT INTO TableA (ChampA)
VALUES (1)
UPDATE TableB
SET ChampB = 7
DELETE FROM TableC
WHERE Id = 89
COMMIT TRANSACTION
Toutes les requêtes entre BEGIN TRAN et COMMIT TRAN sont validées. Si par contre je remplace COMMIT par ROLLBACK, toutes les modifications seront annulées.
Le principe de la transaction c'est tout ou rien... soit tout passe (COMMIT) soit rien (ROLLBACK).
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 31 août 2006 à 10:58
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile_blush.gif"/>
</v:shape><![endif]-->
<!--[if !vml]-->
<!--[endif]--> Donc si j'ai bien compris "BEGIN TRANSACTION",
"COMMIT TRANSACTION", "ROLLBACK TRANSACTION" sont des
commandes (je ne sais pas si c'est comme cas qu'on dit<!--[if gte vml 1]><v:shape
id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->) SQL (soit ~ la même chose qu'une requête).
Mes erreur (en cas d'erreur) me sont quand même remonté au moment des
"INSERT"/"UPDATE"/"DELETE". Donc pour faire une
transaction en bloc (je ne sais pas non plus si c'est comme cas qu'on dit) j'exécute le commande "BEGIN
TRANSACTION" je fais ensuite mes requête ou je vérifie qu’elles ne me
remontent pas d'erreur, et, en cas d'erreur j'exécute "ROLLBACK
TRANSACTION", si non (pas d’erreur) "COMMIT TRANSACTION" pour
valider toutes mes requête.
Dite moi si je me trompe.
Merci bien.
CodeS-SourceS c'est vraiment vachement bien (tout langage
confondu)
Vive cette communauté!!!
Ce soir dans "triste monde tragique" :
Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 1 sept. 2006 à 19:15
C'est ca effectivememt
pour capturer les erreurs tu peux faire un truc de se genre :
--Début de la transaction
BEGIN TRANSACTION
--Capture des erreurs
BEGIN TRY
--ICI tu fais tes requettes
..........................
..........................
--Validation de la tranxsaction
COMMIT TRANSACTION
--Fin du block de capture d'erreur
END TRY
--Gestion des erreurs
BEGIN CATCH
--Annulation de la transaction
ROLLBACK TRANSACTION
--la je sauveguarde les informations d'érreur dans une table
INSERT INTO Erreurs
(ERROR_NUMBER,
ERROR_SEVERITY,
ERROR_STATE,
ERROR_PROCEDURE,
ERROR_LINE,
ERROR_MESSAGE)
VALUES
(ERROR_NUMBER(),
ERROR_SEVERITY(),
ERROR_STATE(),
ERROR_PROCEDURE(),
ERROR_LINE(),
ERROR_MESSAGE())
--Fin du block de gestion d'erreur
END CATCH
Il y'a beaucoup a dire sur les transaction je te conseille de te familiarisé avec et d'aller voir sur MSDN pour plus d'infos