[VB6] Par quoi remplacer FExecuteCode ? (désépère) [Résolu]

cs_Axen 49 Messages postés mercredi 8 novembre 2000Date d'inscription 24 mars 2010 Dernière intervention - 5 juil. 2005 à 14:28 - Dernière réponse : crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention
- 8 juil. 2005 à 11:28
Salut,
bon je sais que le post va etre long mais j'en peu plus de chercher ce truc donc je vais essayer d'etre le plus clair possible pour esperer le plus de réponses positives. Mon application tourne a 60-70% autour de la fonction FExecuteCode, malheureusement celle-ci ne fonctionne pas une fois compilé (très utile comme fonction), donc je cherche une méthode de remplacement.

Genre si y'a moyen d'executer une ligne qui ressemblerait a :

dim tmp as string
tmp = "Form1"
tmp & ".Text1.Text = Bonjour"

Sinon voila une vu synthétique de mon programme :

La Mdi se présente comme cela
_____________________________
Private Sub MDIForm_Load()
chemApp = App.Path
Load FormBurea
End Sub

Le formulaire Burea
___________________
Private Sub Form_Load()
'appel de la fonction affichage d'ecran
'nomfonction Formulaire Table Champ
Call affichEcranLoad("FormBurea", "LogBurea", "LogBu_Date")
End Sub

Le module contenant la fonction
_______________________________
Sub affichEcranLoad(nomForm As String, nomTab As String, nomChp As String)

cnx.Open "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & chemApp & ".\maDB.mdb"
While (cnx.State = adStateConnecting)
DoEvents
Wend
req = "Select * From " & nomTab & " Order By " & nomChp & " Desc"
rst.Open req, cnx
'I permet de lire les 10 premiers enregistrements et J comptabilise le nombre de lignes
I = 0
While (I < 10)
If (Not (rst.EOF)) Then
'Affichage des 10 derniers logs
If (I = 0) Then
FExecuteCode (nomForm & ".TextListDate.Text = rst.Fields(1) & vbCrLf")
FExecuteCode (nomForm & ".TextListNoJob.Text = rst.Fields(3) & vbCrLf")
FExecuteCode (nomForm & ".TextListEtat.Text = rst.Fields(4) & vbCrLf")
FExecuteCode (nomForm & ".TextListReste.Text = rst.Fields(5) & vbCrLf")
Else
FExecuteCode (nomForm & ".TextListDate.Text = " & nomForm & ".TextListDate.Text & rst.Fields(1) & vbCrLf")
FExecuteCode (nomForm & ".TextListNoJob.Text = " & nomForm & ".TextListNoJob.Text & rst.Fields(3) & vbCrLf")
FExecuteCode (nomForm & ".TextListEtat.Text = " & nomForm & ".TextListEtat.Text & rst.Fields(4) & vbCrLf")
FExecuteCode (nomForm & ".TextListReste.Text = " & nomForm & ".TextListReste.Text & rst.Fields(5) & vbCrLf")
End If
rst.MoveNext
J = I + 1
End If
I = I + 1
Wend
End Sub

Le module contenant la fonction FExecuteCode
____________________________________________
Option Compare Text
Option Explicit

Declare Function EbExecuteLine Lib "vba6.dll" _
(ByVal pStringToExec As Long, ByVal Foo1 As Long, _
ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Function FExecuteCode(stCode As String, _
Optional fCheckOnly As Boolean) As Boolean
'Exécution du code contenue dans une variable
FExecuteCode EbExecuteLine(StrPtr(stCode), 0&, 0&, Abs(fCheckOnly)) 0
End Function


Le probleme se pose avec la fonction FExecuteCode qui ne marche pas en compilé (donc quelle utilité ???????).

Y'a t'il une autre fonction pour exécuter un commande contenue dans une variable qui marche en compilé ? Et si oui, ou trouvé des infos dessus et la maniere de l'utiliser ?
Y'a t'il une autre méthode que j'aurais oublié puisqu'en fait FExecuteCode (nomForm & ".TextListDate.Text = rst.Fields(1) & vbCrLf") est juste la parceque j'ai une variable (nomForm) en debut de commande.
mais nomForm & ".TextListDate.Text = rst.fields(1) & vbCrLf ne fonctionne pas !

Merci de toute aide que vous pourrez m'apporter, merci aussi d'avoir lu jusqu'au bout.

N'ésitez pas a donner vos idées meme si elles ne vous semblent pas super je suis preneur, ça m'aidera p-e

PS : si j'ai l'air désepéré c'est normal, je le suis.... comment dire... AU SECOURS !!!!!
Afficher la suite 

7 réponses

Meilleure réponse
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 6 juil. 2005 à 13:15
3
Merci
Et pourquoi pas ca ...

Sub affichEcranLoad(TheForm As Form, nomTab As String, nomChp As String)

cnx.Open "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & chemApp & ".\maDB.mdb"
While (cnx.State = adStateConnecting)
DoEvents
Wend
req = "Select * From " & nomTab & " Order By " & nomChp & " Desc"
rst.Open req, cnx
'I permet de lire les 10 premiers enregistrements et J comptabilise le nombre de lignes
I = 0
While (I < 10)
If (Not (rst.EOF)) Then
'Affichage des 10 derniers logs
If (I = 0) Then
TheForm.TextListDate.Text = rst.Fields(1) & vbCrLf
TheForm.TextListNoJob.Text = rst.Fields(3) & vbCrLf
TheForm.TextListEtat.Text = rst.Fields(4) & vbCrLf
TheForm.TextListReste.Text = rst.Fields(5) & vbCrLf
else
TheForm.TextListDate.Text = FormA.TextListDate.Text & rst.Fields(1) & vbCrLf
TheForm.TextListNoJob.Text = FormA.TextListNoJob.Text & rst.Fields(3) & vbCrLf
etc...
End If
rst.MoveNext
J = I + 1
End If
I = I + 1
Wend
End Sub

Ettu appelles en faisant ca ...
AfficheEcranLoad ServeurA, "LaTable", "Lechamp"
ou
AfficheEcranLoad ServeurB, "LaTable", "Lechamp"

Merci crenaud76 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 5 juil. 2005 à 16:34
0
Merci
Regarde du cote de la fonction CallByName() ...
Cela devrait te dépanner
cs_Axen 49 Messages postés mercredi 8 novembre 2000Date d'inscription 24 mars 2010 Dernière intervention - 5 juil. 2005 à 17:19
0
Merci
euh tout ce que je trouve sur CallByName() c pour retourné la valeur d'un string donc a moins que je me trompe ça n'a rien a voir

merci qd meme
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 5 juil. 2005 à 23:53
0
Merci
Le CallByName()à permet de faire bien plus que cela, mais après réinspection de ce que tu veux, cela va coincer, car pour utiliser CallByName() il faut avoir un objet et une string contenant le nom d'une propriété/méthode de l'objet en question. Toi tu as le nom de l'objet en string, et ca va coincer avec le CallByName.
PAr contre, je pense que tu es en train de te fourvoiller un peu. Je penses que l'on peut faire bien plus simple ... Déjà, dans ta fonction AffichEcranLoad(), pourquoi reçois-tu une string contenant le nom de la form, plutot qu'un objet de type Form directement ? Ton pb serait alors réglé en trois lignes de code !!

Christophe R.
cs_Axen 49 Messages postés mercredi 8 novembre 2000Date d'inscription 24 mars 2010 Dernière intervention - 6 juil. 2005 à 09:36
0
Merci
salut,
en fait si je fais de cette maniere c'est parcequ'il y a pa smal de serveurs et donc ça m'evite de faire des conditions imbriquées du style :

Le module contenant la fonction
_______________________________
Sub affichEcranLoad(nomForm As String, nomTab As String, nomChp As String)

cnx.Open "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & chemApp & ".\maDB.mdb"
While (cnx.State = adStateConnecting)
DoEvents
Wend
req = "Select * From " & nomTab & " Order By " & nomChp & " Desc"
rst.Open req, cnx
'I permet de lire les 10 premiers enregistrements et J comptabilise le nombre de lignes
I = 0
While (I < 10)
If (Not (rst.EOF)) Then
'Affichage des 10 derniers logs
If (I = 0) Then
if nomForm = "serveurA" then
FormA.TextListDate.Text = rst.Fields(1) & vbCrLf
FormA.TextListNoJob.Text = rst.Fields(3) & vbCrLf
FormA.TextListEtat.Text = rst.Fields(4) & vbCrLf
FormA.TextListReste.Text = rst.Fields(5) & vbCrLf
Else if nomForm = "serveurB then
FormB.TextListDate.Text = rst.Fields(1) & vbCrLf
FormB.TextListNoJob.Text = rst.Fields(3) & vbCrLf
FormB.TextListEtat.Text = rst.Fields(4) & vbCrLf
FormB.TextListReste.Text = rst.Fields(5) & vbCrLf
Else if .....
etc... autant qu'il y a de serveur
end if
else
if nomForm = "serveurA" then
FormA.TextListDate.Text = FormA.TextListDate.Text & rst.Fields(1) & vbCrLf
FormA.TextListNoJob.Text = FormA.TextListNoJob.Text & rst.Fields(3) & vbCrLf
etc...
else if nomForm = "serveurB" then
....
end if
End If
rst.MoveNext
J = I + 1
End If
I = I + 1
Wend
End Sub

tu comprends bien que cela rend le code beaucoup plus lourd surtout qu'il y a pas mal de serveur, et qu'en plus il n'y a pas que la que j'utilise la fonction FExecuteCode (je l'utilise une bonne dixaine de fois...)

merci de ton aide
cs_Axen 49 Messages postés mercredi 8 novembre 2000Date d'inscription 24 mars 2010 Dernière intervention - 6 juil. 2005 à 13:36
0
Merci
13h38 : je teste ça dessuite....
13h42 : MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

ouha j'allucine je connaissais meme pas cette méthode, tu me sauve la vie et p-e meme mon examen (je sais pas comment j'aurais expliqué au jury que j'avais pas su compiler l'appli a cause d'une api toute pourrit).

merci mille fois (wow j'en ai des frissons tellement je suis aux anges lol)

Franchement, y'a des astuces comme ça, on passe a coté 50 fois et on pourrait ne jamais les voirs alors (meme si je me repete) Merci encore :-)
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 8 juil. 2005 à 11:28
0
Merci
De rien, et voici juste un petit eclaircissement
En fait, ce n'est pas une astuces. Cela part juste du principe qu'une form n'ets rien d'autre qu'un objet et qu'un objet est stocké dans une variable comme une autre et que l'on peut tranmettre n'importe quel variable en paramêtre d'une fonction ...

Christophe R.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.