delphi 2006 , SQL server 2008, ADO
bonjour,
j'ai fais une procédure qui montre mon problème.
je voulais exécuter des requêtes "insert","update" dans une base sans me préoccuper de l'ordre d'insertion, donc je désactive les contraintes, j’exécute les requêtes et je réactive les contraintes, jusque la, ça marche
mais quand je veux mettre ça dans une transaction, ça ne marche plus...., je peux plus exécuter de requête "select" (même dans une autre adoconnection) ça fige. j'ai le showmessage('2') mais pas le showmessage('3'); (si au moment du showmessage('2'), j’exécute une requête "select" a partir d'un éditeur de requête, j'ai pas accès non plus)
si j’enlève adoconnection_synchro.Execute('EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"') ça marche
si j’enlève BeginTrans , ça marche
j'ai oublié un paramètre quelque part ?
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure synchronise; var adoconnection_synchro : TADOConnection; begin adoconnection_synchro := TADOConnection.Create(nil); adoconnection_synchro.LoginPrompt := false; adoconnection_synchro.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ma_base;Data Source=(local)'; adoconnection_synchro.Connected := true; adoconnection_synchro.BeginTrans; try adoconnection_synchro.Execute('EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"'); showmessage('1'); adoconnection_synchro.Execute('update table1 set [name]=''test'''); showmessage('2'); nb := read_i('select max(id) from clients',adoconnection_synchro)); showmessage('3'); adoconnection_synchro.Execute('EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"'); adoconnection_synchro.CommitTrans; except on E:Exception do adoconnection_synchro.RollbackTrans; end; adoconnection_synchro.Free; end;
Partager