2017-03-06 2 views
0

J'ai donc cette requête pour obtenir les résultats de mes tables de base de données avec les colonnes in et out.Ajouter et soustraire des valeurs flottantes de la base de données

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

Maintenant, ce que je dois faire est de prendre un nombre statique, par exemple; 100, et AJOUTEZ le in et SOUSTRACTEZ le out à partir de ce nombre statique.

donc ce que j'ai essayé:

<cfquery name="getInfo" datasource="testing"> 
    select in, out from test 
</cfquery> 

<table> 
    <cfset balance = 100> 
    <cfloop query="getInfo"> 

    <cfset balance = balance + in - out> <!--- THIS IS WHAT I TRIED ---> 

    <tr> 

     <td>#in#</td> 
     <td>#out#</td> 
     <td>#balance#</td> 

    </tr> 
    </cfloop> 
</table> 

Comme vous pouvez le voir, je ne mets ce code <cfset balance = 100 + in - out>. Fondamentalement, ce que j'essaye de faire est d'obtenir la valeur originale de l'équilibre qui est 100 et ajouter les valeurs de dans et soustraire la valeur de dehors et l'enregistrer comme nouvel équilibre.

Cependant, j'obtiens une erreur en disant The value '' cannot be converted to a number..

J'ai défini les valeurs d'entrée et de sortie pour être flottantes dans la base de données.

Où est-ce que je me trompe?

+1

N'utilisez pas de types approximatifs comme 'float' pour représenter la devise. Au lieu de cela, utilisez un type de données exact comme 'decimal'. – Leigh

Répondre

5

Vous devez mettre à jour votre requête pour couvrir les conditions NULL

<cfquery name="getInfo" datasource="testing"> 
    select ISNULL([in], 0) AS [in], ISNULL([out], 0) AS [out] 
    FROM test 
</cfquery> 

Aussi je mets entre crochets in et out parce qu'ils regardent comme ils pourraient être des mots clés

Voir également faire le calcul sur la DB, vous pourriez obtenir de meilleures performances

+0

J'ai ajouté une valeur par défaut de 0 dans la base de données. Ça ne marche toujours pas. – gosi123

+0

Essayez 'balance' d'être' variables.balance'. Déterminez également quel champ crache encore un blanc après tout cela. Je suggère d'utiliser un '' –

+4

RE: * ajouté une valeur par défaut de 0 dans la base de données * Ce n'est pas ce que James a suggéré. Normalement, l'application d'une valeur par défaut n'affecte que les nouveaux enregistrements insérés dans la table. La modification de la valeur des enregistrements existants nécessite une mise à jour. L'alternative est de simplement modifier les résultats de la requête. Une façon est d'utiliser des fonctions de base de données comme 'COALESCE()', 'ISNULL()', etcetera pour retourner zéro (0) au lieu de 'null'. La syntaxe exacte dépend de votre SGBD. Une autre consiste à utiliser 'VAL()' dans votre code CF, qui convertit les valeurs non numériques à zéro (0). – Leigh