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

Résolu
cs_Axen Messages postés 49 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 24 mars 2010 - 5 juil. 2005 à 14:28
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 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 !!!!!

7 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
6 juil. 2005 à 13:15
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"
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
5 juil. 2005 à 16:34
Regarde du cote de la fonction CallByName() ...
Cela devrait te dépanner
0
cs_Axen Messages postés 49 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 24 mars 2010
5 juil. 2005 à 17:19
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
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
5 juil. 2005 à 23:53
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.
0

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

Posez votre question
cs_Axen Messages postés 49 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 24 mars 2010
6 juil. 2005 à 09:36
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
0
cs_Axen Messages postés 49 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 24 mars 2010
6 juil. 2005 à 13:36
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 :-)
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
8 juil. 2005 à 11:28
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.
0
Rejoignez-nous