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

Développement SQL Server Discussion :

Calcul dans un dataset en utilisant les Variables


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2013
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 212
    Par défaut Calcul dans un dataset en utilisant les Variables
    Salut mes amis ,
    dans cette table je tente de faire des calcule en utilisant des variables (Dlphi 2010 + Sql server 2008)
    Nom : Sans titre.png
Affichages : 523
Taille : 7,3 Ko
    je prépare le code suivante pour daclarer mes lignes de la colonne [Code] comme des variables quelque soit le nombre des lignes et apres leurs donner des valeurs selon les lignes montant ,puis faire un Update selon les formules de calcule pour avoir le resultat .Normalement le montant de la ligne R300=2+20385 et = 20387.
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var text,s:string;
    begin
    tab.First;
    while not tab.Eof do
    begin
    text:='';
    text:=text + ' Declare @'+tab['code']+' float  set @'+tab['code']+' = '+floattostr(tab['montant']) ;
    s:='';
    if  (tab['formule'] <> '') then begin s:=s+' update tab set montant ='+tab['formule']+' where code='+tab['code'] ; end;
     
    tab.Next;
    end;
     
    q.SQL.Clear;
    q.sql.Add(text);
    q.sql.Add(s);
    q.ExecSQL;
    end;
    erreur:Must declare the scalar variable @2000.........

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Salut à toi l'ami donc,

    Désolé mais je ne sais pas lire ton script ; c'est ni du SQL ni du TRANSACT

    En t'inspirant de ce modèle de code :
    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
    DECLARE @FORMULA VARCHAR(500);
    DECLARE @CHARSPLITER CHAR(1) = ' ';
    DECLARE @ELEMENT VARCHAR(MAX)='';
    DECLARE @EXPR NVARCHAR(MAX)='';
     
    SELECT @FORMULA=formule+@CHARSPLITER FROM tab WHERE Formule IS NOT NULL;
    WHILE CHARINDEX( @CHARSPLITER, @FORMULA )>0
    BEGIN
        SET @ELEMENT=SUBSTRING( @FORMULA, 0, CHARINDEX( @CHARSPLITER, @FORMULA ) );
        SELECT @EXPR+=CASE
    				WHEN LEFT( @ELEMENT, 1 )='@'
    				    THEN (SELECT CAST( montant AS VARCHAR(MAX)) FROM dbo.tab WHERE Code=RIGHT( @ELEMENT, LEN( @ELEMENT )-1 ) )
    				WHEN @ELEMENT IN ('+', '-') 
    					THEN @ELEMENT
    				ELSE NULL
    			   END;
        SET @FORMULA=SUBSTRING(@FORMULA, CHARINDEX(@CHARSPLITER, @FORMULA )+1, LEN(@FORMULA) );
    END;
    SET @Expr='SELECT '+@Expr +' AS Résultat' ;
    SELECT * FROM tab;
    SELECT '{ ' + @expr +' }' as Ordre_SQL ;
    EXECUTE sp_executesql @stmt=@Expr;
    Attention à la clause WHERE ...

    Qui donne :
    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
    id          Code                                               Name                                               Formule                                                                                                                                                                                                                                                          montant
    ----------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------
    1           R1000                                              JRS                                                NULL                                                                                                                                                                                                                                                             2.00
    2           R2000                                              SBASE                                              NULL                                                                                                                                                                                                                                                             20385.00
    3           R300                                               SB                                                 @R2000 + @R1000                                                                                                                                                                                                                                                  NULL
     
    (3*lignes affectées)
     
    Ordre_SQL
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    { SELECT 20385.00+2.00 AS Résultat }
     
    (1 ligne affectée)
     
    Résultat
    ---------------------------------------
    20387.00
     
    (1 ligne affectée)
    Tu pourras faire une proc-stock (ou un trigger) pour ensuite avoir un script du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @value int;
    exec @value = get_proc param;
    update table1 set field1 = @value;
    Je te laisse ajouter toute la gestion des erreurs.

    En espérant que ça réponde à ta demande

Discussions similaires

  1. [9.6] CTE dans un trigger pour utiliser les variables NEW et OLD
    Par JeanYvette dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/04/2019, 09h24
  2. Utiliser les variables dans un lot DTS
    Par miniquick dans le forum Développement
    Réponses: 1
    Dernier message: 03/06/2008, 13h04
  3. Réponses: 3
    Dernier message: 09/01/2007, 09h44
  4. Réponses: 6
    Dernier message: 07/04/2006, 01h10
  5. Réponses: 2
    Dernier message: 17/09/2005, 17h43

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