IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Delphi , transaction , SQL server


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut Delphi , transaction , SQL server
    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....

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    En faite , ma procédure GetSQLGenerator est bonne, mais le problème vient du fait que SQL server, utilise des transactions implicitement.

    Dans ma procédure de facturation, j'utilise déja mon SQLConnection et je pense que le programme n'aime pas trop cela.

    Je vais donc mettre ma transaction coté serveur.

Discussions similaires

  1. [vb.net] transaction sql server
    Par iamunknown dans le forum Windows Forms
    Réponses: 9
    Dernier message: 05/02/2006, 17h08
  2. connexion Delphi avec SQL Server en réseau
    Par da_latifa dans le forum Bases de données
    Réponses: 4
    Dernier message: 22/11/2005, 14h24
  3. Réduction du Journal de transactions SQL Server
    Par Aki dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/10/2004, 09h15
  4. DELPHI et SQL Server
    Par sessime dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/09/2004, 20h15
  5. Delphi et Sql Server
    Par Mylvain dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/05/2004, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo