begin process at 2012 05 27 03:31:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Débutant(s)

 > 

Traduction de code en fonction pour SQL 2005


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Traduction de code en fonction pour SQL 2005

mardi 4 août 2009 à 16:44:05 | Traduction de code en fonction pour SQL 2005

anspauldou

Bonjour

Je suis débutant en MS SQL 2005 j'ai vu ce code sur le net et souhaiterai le traduire en une fonction pour SQL 2005. Le code le voici :

Private Function CalcEx(ByVal Text As String)
'------------------------
'Buffer de charactere
Dim Char As String * 1
'Mot temporaire
Dim Word As String
'Operateur en cours
Dim Oprd As String
'------------------------
'Tableau d'operateurs indentés
Dim Opr() As String
'Tableau de valeurs indentées
Dim Res() As Double
'Valeur en cours
Dim Value As Double
'------------------------
'Compteur d'indentation
Dim j As Long
'Variable de boucle
Dim i As Long

ReDim Res(0)
ReDim Opr(0)

Text = Text & " "
For i = 1 To Len(Text)
'Recuperation du charactere
Char = Mid(Text, i, 1)
'Selection en fonction de la valeur du charactere
Select Case Char
'Si c'est un chiffre ajoute dans le buffer
Case "0" To "9": Word = Word & Char
'Si c'est un point fait de meme /!\ regional settings /!\
Case ".": Word = Word & Char
'Si c'est un espace calcule l'expression
Case " ": GoSub Calc
'Si c'est une operation calcule et conserve l'operation en memoire
Case "+": GoSub Calc: Oprd = Char
Case "-": GoSub Calc: Oprd = Char
Case "*": GoSub Calc: Oprd = Char
Case "/": GoSub Calc: Oprd = Char
Case "^": GoSub Calc: Oprd = Char
Case "\": GoSub Calc: Oprd = Char
'Si c'est une debut paranthese indente la valeur
Case "(":
'Redimentionne le tableau
ReDim Preserve Res(j)
ReDim Preserve Opr(j)
'Sauve la valeur et l'operande
Res(j) = Value
Opr(j) = Oprd
'Increment
j = j + 1
'Initialize les variables temporaires
Value = 0
Word = ""
Oprd = ""

'Si c'est une fin de paranthere decremente la hierarchie
Case ")"
'Si on n'est en indentation "positive"
If j Then
'Calcule l'expression
GoSub Calc
'Decremente
j = j - 1
'Si on dispose d'un operateur
If Opr(j) = "" Then
'NOP
Else
'Calcule
Select Case Opr(j)
Case "+": Value = Res(j) + Value
Case "-": Value = Res(j) - Value
Case "*": Value = Res(j) * Value
Case "/": Value = Res(j) / Value
Case "\": Value = Res(j) \ Value
Case "^": Value = Res(j) ^ Value
'-----------------------------------
'Extra fonction
Case "MOD": Value = Res(j) Mod Value
Case "AND": Value = Res(j) And Value
Case "XOR": Value = Res(j) Xor Value
Case "OR": Value = Res(j) Or Value
'-----------------------------------
End Select
End If
Else
'NOP
End If

'Sinon recupere la valeur pour analyse ulterieure
Case Else: Word = Word & Char
End Select
Next

'That it ! Renvoi le resultat ! (En double precision)
CalcEx = Value

Exit Function

Calc:
'Si on dispose d'un operateur
If Oprd = "" Then
'Si le mot est un chiffre
If IsNumeric(Word) Then
'La valeur egale le mot
Value = CDbl(Word)
Else
'L'operateur egale le mot
If Len(Word) Then Oprd = UCase(Word)
End If
'Initialise le mot (buffer d'expression)
Word = ""
Else
'Si le mot est numerique
If IsNumeric(Word) Then
'Calcule
Select Case Oprd
Case "+": Value = Value + CDbl(Word)
Case "-": Value = Value - CDbl(Word)
Case "*": Value = Value * CDbl(Word)
Case "/": Value = Value / CDbl(Word)
Case "\": Value = Value \ CDbl(Word)
Case "^": Value = Value ^ CDbl(Word)
'---------------------------------------
'Extra fonction
Case "MOD": Value = Value Mod CDbl(Word)
Case "AND": Value = Value And CDbl(Word)
Case "XOR": Value = Value Xor CDbl(Word)
Case "OR": Value = Value Or CDbl(Word)
'---------------------------------------
End Select
'Initialise l'operateur
Oprd = ""
Else
'L'operateur prend la valeur du mot
If Len(Word) Then Oprd = UCase(Word)
End If
'Initialise le mot
Word = ""
End If
Return

End Function
' ==== Utilisation :
' CalcEx("1 + 2 - 3")

Merci d'avance

jeudi 6 août 2009 à 16:49:20 | Re : Traduction de code en fonction pour SQL 2005

nivsql

Ne connaissant pas VB j'aimerais que tu me dise ce qu'est sensée faire cette fonction ?

vendredi 7 août 2009 à 11:58:35 | Re : Traduction de code en fonction pour SQL 2005

anspauldou

Je voudrai un script qui va traduire mes formules de calcul par exemple :
- @a+@b
- (@a+@b)*(@c*@d)
- (-@a)*@b/@c
- etc

vendredi 7 août 2009 à 21:51:18 | Re : Traduction de code en fonction pour SQL 2005

nivsql

Je comprend toujours pas ....



Cette discussion est classée dans : case, word, value, res, oprd


Répondre à ce message

Sujets en rapport avec ce message

Case Sensitive / Sensible a la case [ par AbriBus ] Salut,J'ai pas trouver de question poser en relation avec ca... peut etre c'est trop evident mais je suis un peu... nul...Je crois avoir entendu parle Like dans Where... [ par FREESLY ] Bonjour tout le monde, voila je suis un peu perdu sur une requete que j'ai fais...Elle fonctionne trés bien, mais la difficulté se trouve dans la bdd Programme VBA (copie d'une ligne) [ par pepette54 ] Bonsoir à tous. Il faut que je créé un programme permettant à un utilisateur d'entrer un nom afin de créer une nouvelle feuille excel et de copier les des exceptions d’une procédure stocké [ par salimdz2004 ] Salut je cherche comment je peux gérer des exceptions d’une procédure stocké qui ajoute des nouveau enregistrement</p Fusion depuis un projet Access (ADP) vers un document Word [ par tilomon ] Bonjour,Dans un projet Access (adp), je tente d'effectuer une fusion d'une vue vers un document Word, dans un programme VBA.La fusion s'opère, mais le Somme en sql [ par yaya2669 ] Bonjour,Voila la requete de baseSelect 'Montant'=Case WHEN T0.PRICE=100 then 10 else 20 end,'Montant2'=Case WHEN T0.PRICEFROM ITM1 T0Je voudrais maint mailing avce Word [ par garnier54 ] Bonjour,j'essaye en vain de faire une connection de word avce sql 2005 express pour fair un mailing (ma base sqp sur trouve sur une autre PC), cela ma Besoin d'aide pour une requete [ par ranouf ] Bonjour,Je me demande si c'est possible de résoudre ce problème par une requete :Imaginez un cube de 5*5*5 cases.Dans ce cube 2 cases appartiennent à Alias de colonne [ par Tofetlui ] bonjour,Voila mon soucis dans une requete je fais des alias sur des colonnes qui sont calculés.Jusqu'a là pas grand chose de grave.Cependant je dois  Problèmes sur des Case When imbriqués [ par Orion01 ] Bonjour, J'ai un souci sur des case when que je veux imbriquer.Je suis sous SQL7 et le code suivant se trouve dans une vue. <


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,872 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales