Bonjour Messieurs ,Dames
J'ai un gros problème et je commence a nager dans mes recherches.
Coté delphi j'ai :
Ma procedure stcokée SQL serveur 2000 :
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
25
26
27
28
29
30
31
32
33
34
35
36
37 function GetSQLGenerator(aTableName: string): LongInt; var Q : TSQLQuery; var td :TTransactionDesc; function GetUniqueId : integer; begin result := Random(10)+DateTimeToFileDate(Now); end; begin Q := nil; with Q do try try td.TransactionID := GetUniqueId; td.IsolationLevel := xilREPEATABLEREAD; //afin que la transaction attendent la fin des autres transaction Q := CreateQueryFmt('',[] ); SQLConnection.StartTransaction(td); //Q.SQLConnection.InTransaction SQL.Clear; SQL.Add('declare @NB D_NUMID ;'); SQL.Add(Format('execute SP_GENERATOR %s, @NB OUTPUT ; ', [QuotedSQL(aTableName)] )); SQL.Add('select @NB '); Open; result := Q.Fields[0].AsInteger; SQLConnection.Commit(td); except on e:EDatabaseError do begin Q.SQLConnection.Rollback(td); result := -1; end; end; finally FReeAndNil(Q); end; end;
Code SQL : 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 CREATE PROCEDURE "SP_GENERATOR" ( @TABLENOM D_NOM, @AVALUE D_NUMID OUTPUT ) as begin SET NOCOUNT ON; select @AVALUE = (SELECT COUNT(*) from TABLE_CPT where NOM = @TABLENOM); IF @AVALUE = 0 BEGIN INSERT INTO TABLE_CPT(NOM, CPT) VALUES(@TABLENOM, 0); END; UPDATE TABLE_CPT SET CPT = CPT + 1 WHERE NOM= @TABLENOM; select @AVALUE = (SELECT CPT from TABLE_CPT where NOM =@TABLENOM); end; GO
Ces deux fonctions me servent pour avoir un identifiant unique par compteur dans une table Compteur (sans collision de données biensur) :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE "TABLE_CPT" ( NOM D_NOM, CPT D_INTEGER, CONSTRAINT PKTABLE_CPT PRIMARY KEY (NOM) );
Mais voila après quelques testes, ma procédure GetSQLGenerator marche pas totalement.
Je fais plusieurs appel sur ma fonction GEtSQLGenerator('BLTAXE'), tout se passe bien.
Puis dans une autre procédure je lance la facturation ,
qui utilise aussi cette fonction mais en utilisant un autre paramètre 'FACTB' .
Mais à ce moment la delphi subit une erreur lors du StartTransaction => 'Dépassement de capacité'.
Je ne vois pas d'ou peut venir l'erreur !
Quelqu'un aurait il une idéee ????
Help me please....
Partager