Donner une valeur à une variable recuperée d'une base access

skyzofrenzz Messages postés 35 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 septembre 2004 - 2 sept. 2004 à 20:10
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008 - 4 sept. 2004 à 00:02
Bonjour à tous :

J'ai dans une base de donnée avec une table contenant plusieurs champs.

J'ai un champ nommé XXX qui contient des valeurs text du type :

0.81*T+0.015*T*T
0.98*T+016*T*T
etc...

Je recupere facilement cette valeur (ex: 0.81*T+0.015*T*T) sous VB dans une textbox mais je voudrai dans mon programme pouvoir donner une valeur à T.

Que dois je faire ! Merci de me donner un bout de code SVP

Merci par avance de votre aide !!!

-=[s]=-=[k]=-=[Y]=-=[z]=-=[o]=-

10 réponses

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
2 sept. 2004 à 20:25
dim Resultat as string
Resultat=""
For i= 1 to Len(text1)
if mid(text1,i,1)="T" then Resultat=Resultat+ Str(Valeur) else Resultat=Resultat+mid(text1,i,1)
Next

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
skyzofrenzz Messages postés 35 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 septembre 2004
2 sept. 2004 à 21:06
Voila mon code avec votre soluce mais j'ai l'erreur " bloc next sans for"
Je ne peux pas tester si ca fonctionne

Private Sub valider_Click()
Dim I As Variant
Dim Resultat As String
Tjmax = 100

If Val(TexteIntensite.Text) > Adodc1.Recordset.Fields("Imax") Then
Y = MsgBox("Choisissez un relais de calibre supérieur")
Left = (Screen.Width - Width) / 2 ' on centre sur la gauche
Top = (Screen.Height - Height) / 2 ' et en hauteur
Exit Sub
Else

If Val(TexteTemperature.Text) > 100 Then
Y = MsgBox("La Tempérture choisie dépasse la température de jonction maximum")
Left = (Screen.Width - Width) / 2 ' on centre sur la gauche
Top = (Screen.Height - Height) / 2 ' et en hauteur
Exit Sub
Else
I = Val(TexteIntensite.Text)
Text11.Text = Adodc1.Recordset.Fields("Pd")
Text12.Text = Val(TexteIntensite.Text)

E = MsgBox("La resistance thermique du dissipateur est : " & I)

Resultat = ""
For j = 1 To Len(Text11)
If Mid(Text11, j, 1) = "I" Then
Resultat = Resultat + Str(Valeur)
Else: Resultat = Resultat + Mid(text1, I, 1)
Next
-=[s]=-=[k]=-=[Y]=-=[z]=-=[o]=-
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
2 sept. 2004 à 21:14
Resultat = ""
For j = 1 To Len(Text11)
If Mid(Text11, j, 1) = "I" Then
   Resultat = Resultat + Str(I)
Else
   Resultat = Resultat + Mid(text11, I, 1)
endif
Next j

msgbox Resultat


En sachant que I est la valeur à ajouter donc la ligne "Resultat = Resultat + Str(I)", est juste sinon modifie str(i) par Text12.text
Si c
:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
2 sept. 2004 à 21:27
Salut,

Ca m'a l'air bien compliquer tout ca, alors je me dis que j'ai du mal comprendre. Pour ma part j'aurais fait :

Dim NewValue as string
NewValue = 32
Text1.Text = Replace(Text1.Text, "T", NewValue)

Bonne prog, poele_a_frire@hotmail.com
liquide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 sept. 2004 à 22:14
Salut,
OK avec liquide, le plus simple et plus rapide est un Replace.

Maintenant, si tu veux en plus le résultat de la formule, il faut passer par une astuce.
Explication de l'astuce : on crée une base de donnée bidon avec une table bidon, le tout en format texte. Ensuite, on utilise l'interpréteur SQL pour traduire les formules qu'on lui passe.

Cette astuce a déjà été signalée sur le site mais je ne sais plus quand ni par qui, je crois qu'il s'agissait de conception de calculatrice.

De toutes façons, voilà mon code pour faire ça et ça peut être testé tel quel puisque la variable Resultat a été initialisée avec une valeur citée en exemple par skyzofrenzz :

' Dans projet/références, cocher : Microsoft DAO 3.51 Object Library
' Pour les utilisateurs d'ADO, pas eu le temps de traduire
Private Sub Form_Load()
Dim db As Database
Dim rs As Recordset
Dim Resultat As String

'Création d'une base bidon
Open "c:\temp\trucbidule.dat" For Output As #1
Write #1, "truc"
Write #1, vbCrLf
Close #1

'Recup de la formule
Resultat = "0.81*T+0.015*T*T"

'Remplacement de la variable T par sa valeur, ici : 2
Resultat = Replace(Resultat, "T", 2)

'Ouverture de la base bidon
Set db = OpenDatabase("c:\temp", False, False, "text;")

'Création d'un recordset pour l'interro de la base
Set rs = db.OpenRecordset("select " & Resultat & " from trucbidule.dat")

'Affichage du résultat
MsgBox rs.Fields(0)

'Fermeture des objets
rs.Close
db.Close

'Libération de la mémoire utilisée par les objets
Set rs = Nothing
Set db = Nothing

'Destruction de la base bidon
Kill "c:\temp\trucbidule.dat"

End Sub


C'est juste un exemple, on peut l'adapter, en faire une function et mieux, trouver plus rapide avec moins de code et moins compliqué.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
0
skyzofrenzz Messages postés 35 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 septembre 2004
2 sept. 2004 à 23:33
Ce code ne fonctionne pas à priori car le resultat afficher est du type 0.81*2+0.015*2*2 et non pas en veritable resultat de cette operation. (ex: 0.79)

Si qqun connait le truc je desespere lol ....

Voila le nv code pour info

Private Sub valider_Click()
Dim Resultat As String
Tjmax = 100

If Val(TexteIntensite.Text) > Adodc1.Recordset.Fields("Imax") Then
Y = MsgBox("Choisissez un relais de calibre supérieur")
Left = (Screen.Width - Width) / 2 ' on centre sur la gauche
Top = (Screen.Height - Height) / 2 ' et en hauteur
Exit Sub
Else

If Val(TexteTemperature.Text) > 100 Then
Y = MsgBox("La Tempérture choisie dépasse la température de jonction maximum")
Left = (Screen.Width - Width) / 2 ' on centre sur la gauche
Top = (Screen.Height - Height) / 2 ' et en hauteur
Exit Sub
Else
I = Val(TexteIntensite.Text)
Resultat = Adodc1.Recordset.Fields("Pd")
Resultat = Replace(Resultat, "I", Val(TexteIntensite.Text))

Text12.Text = Val(TexteIntensite.Text)

E = MsgBox("La resistance thermique du dissipateur est : " & I)

E = MsgBox("La resistance thermique du dissipateur est : " & Resultat) 'ou Valresultat
-=[s]=-=[k]=-=[Y]=-=[z]=-=[o]=-
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 sept. 2004 à 23:46
Désolé, chez moi, le résultat de l'exemple que j'ai donné affiche 1.68 (vérifié avec la calculatrice) colle le tout dans une form et teste le. Après, c à toi de l'adapter en ADO et pour tes besoins.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
3 sept. 2004 à 09:43
Alors la !!!!! ouffffff j'ai peut etre la solution, j'ai cherché sur le site car on m'avait parlé d'une solution possible.
Rajoutes l'activex : MSSCRIPT.ocx(c'est sur, ca rajoute un activex, alors peut etre devras tu utiliser la dll si tu ne souhaites pas ce controle)

Dim NewValue as string
Text11.Text = Adodc1.Recordset.Fields("Pd")
NewValue = 2
Text11.Text = Replace(Text11.Text, "T", NewValue)
Label1.caption = ScriptControl1.Eval(Text1.Text)

Chez moi ca marche
la source vb que j'ai trouvé :
http://www.vbfrance.com/code.aspx?ID=22816

Bonne prog, poele_a_frire@hotmail.com
liquide
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
3 sept. 2004 à 09:45
Oupssss
Label1.caption = ScriptControl1.Eval(Text11.Text)

Bonne prog, poele_a_frire@hotmail.com
liquide
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
4 sept. 2004 à 00:02
Ou alors : made in renfield

Private Sub Command1_Click()
    Dim p As MSScriptControl.ScriptControl 'Ajouter la référence "Microsoft script contol 1.0"
    Set p = New MSScriptControl.ScriptControl
    p.Language = "VbScript"
    Call p.Eval("msgbox (6 * 5)")
End Sub

Private Sub Command2_Click()
Dim a As Object
    Set a = CreateObject("MSScriptControl.ScriptControl")
    a.Language = "VbScript"
    Call a.Eval("MsgBox (5*5)")
End Sub



Bonne prog, poele_a_frire@hotmail.com
liquide
0
Rejoignez-nous