cs_Axen
Messages postés49Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention24 mars 2010
-
5 juil. 2005 à 14:28
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDerniè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 !!!!!
A voir également:
[VB6] Par quoi remplacer FExecuteCode ? (désépère)
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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"
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Axen
Messages postés49Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention24 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...)
cs_Axen
Messages postés49Date d'inscriptionmercredi 8 novembre 2000StatutMembreDernière intervention24 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 :-)
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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 ...