Bonjour Messieurs ,Dames

J'ai un gros problème et je commence a nager dans mes recherches.

Coté delphi j'ai :

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;
Ma procedure stcokée SQL serveur 2000 :

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....