OVH Cloud OVH Cloud

WD[10] Convertion d'une macro VB

4 réponses
Avatar
Philippe KIEFFER
Bonjour à tous,

Une bonne âme peut elle m'aider à convertir cette macro VB en Windev

Sub DevisTiamp()

Dim AtlTiamp As AtlTiampCom
Dim i As Integer

Set AtlTiamp = CreateObject("AtlTiamp.AtlTiampCom")
If AtlTiamp Is Nothing Then Exit Sub: Unload Me

If AtlTiamp.OpenBases("", "AtlTiamp", "") = 1 Then
Dim Dbtiamp As ORSDatabase.ORSDatabase
Set Dbtiamp = AtlTiamp.GetBase("TiampD")
Dim AllSet As ORSDatabase.ORSOleAllSet
Set AllSet = Dbtiamp.AllSetFiltreBis("CDevis", "BELLIN", "")
Dim nNbRes
nNbRes = AllSet.GetCount()
For i = 0 To nNbRes
Dim Res As ORSDatabase.ORSOleObject
Set Res = AllSet.GetAtNum(i)
Dim Code As ORSDatabase.ORSOleClef
Set Code = Res.GetValeur("Code")
<<< tableajouteligne(ma_table,Code.part1) >>>>
Next i
End If

End Sub

sachant que j'ai une DLL AtlTiamp.dll

Merci d'avance pour votre aide même si il ne s'ajit que de pistes ...


Ph.Kieffer - Ultim'info

--
Ph. KIEFFER - Ultim'Info

4 réponses

Avatar
Romain PETIT
Philippe KIEFFER avait énoncé :
Bonjour à tous,



Bonjour,

Une bonne âme peut elle m'aider à convertir cette macro VB en Windev



On va essayer ...

Dim AtlTiamp As AtlTiampCom
Dim i As Integer

Set AtlTiamp = CreateObject("AtlTiamp.AtlTiampCom")
If AtlTiamp Is Nothing Then Exit Sub: Unload Me



// Pour les CreateObjet, utiliser les objets OLE Automation
oAtlTiamp est un objet OLE dynamique
oAtlTiamp = allouer un objet automation "AtlTiamp.AtlTiampCom"
SI oAtlTiamp = null ALORS RETOUR

If AtlTiamp.OpenBases("", "AtlTiamp", "") = 1 Then



// pour les méthodes de l'objet, utiliser >>
SI oAtlTiamp>>OpenBases("", AtlTiamp", "") = 1 ALORS

Dim Dbtiamp As ORSDatabase.ORSDatabase



// Pour cet objet, je pense qu'il faut aussi
// le déclarer en dynamique (il dépend de l'instanciation de oAltTiamp)

oDbtiamp est un objet OLE dynamique

Set Dbtiamp = AtlTiamp.GetBase("TiampD")



oDbtiamp = oAtlTiamp>>GetBase("TiampD")

Dim AllSet As ORSDatabase.ORSOleAllSet



//idem

oAllSet est un objet OLE dynamique

Set AllSet = Dbtiamp.AllSetFiltreBis("CDevis", "BELLIN", "")



oAllSet = oDbtiamp>>AllSetFiltreBis("CDevis", "BELLIN", "")

Dim nNbRes
nNbRes = AllSet.GetCount()



eNbRes est un entier // vérifier que c'est le bon type
i est un entier
eNbRes = oAllSet>>GetCount()

For i = 0 To nNbRes
Dim Res As ORSDatabase.ORSOleObject
Set Res = AllSet.GetAtNum(i)
Dim Code As ORSDatabase.ORSOleClef
Set Code = Res.GetValeur("Code")
<<< tableajouteligne(ma_table,Code.part1) >>>>
Next i
End If



POUR i=0 A eNbRes
oRes est un objet OLE dynamique
oRes = oAllSet>>GetAtNum(i)
oCode est un objet OLE dynamique
oCode = oRes>>GetValeur("Code")
FIN

sachant que j'ai une DLL AtlTiamp.dll



Il faudra donc probablement l'enregistrer sur le système avant de
l'utiliser (voir la classe RegDLL de Eric Brettenoux par exemple :
http://www.windevasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEH2&MDP=&TYPE=SOURCE)

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Gilles Guédikian avait soumis l'idée :
Une ligne de code surement tout aussi efficace qu'une classe...
Api("MADLL.DLL","DllRegisterServer")




Non, cela fonctionne peut-être mais ce n'est pas tout aussi efficace...
- ta ligne de code ne vérifie pas la présence de la DLL sur le système,
- ta ligne de code ne renvoie pas une éventuelle erreur au chargement,
- ta ligne de code ne permet pas d'enregistrer/désenregistrer,
- ta ligne de code n'utilise pas un thread secondaire pour vérifier que
l'enregistrement ne bloque l'appel API...

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Gilles Guédikian a présenté l'énoncé suivant :
Romain PETIT a écrit :
Gilles Guédikian avait soumis l'idée :
Une ligne de code surement tout aussi efficace qu'une classe...
Api("MADLL.DLL","DllRegisterServer")




Non, cela fonctionne peut-être mais ce n'est pas tout aussi efficace...
- ta ligne de code ne vérifie pas la présence de la DLL sur le système,



Pourquoi vérifier la présence, c'est moi qui l'ai installée.
Si l'install échoue, pas besoin d'aller plus loin.



As-tu testé qu'elle est effectivement bien installée ?
Ou alors, elle est peut être bien installée mais pas là où il
faudrait...

- ta ligne de code ne renvoie pas une éventuelle erreur au chargement,


Puisque c'est un OCX, le plus efficace c'est de faier un try catch dans le
code.



Donc ca fait plus qu'une ligne de code, on est d'accord ?

- ta ligne de code ne permet pas d'enregistrer/désenregistrer,





A vrai dire, je laisse faier l'enregistrement et le désenregistrement par le
logiciel de setup, le faire dans le projet n'est pas un bon choix.



Ca dépend.
Par exemple, si l'utilisation de cette DLL est soumise à une licence
particulière, il peut être interdit de l'inclure dans ton package ou de
demander à l'utilisateur d'accepter la licence...

- ta ligne de code n'utilise pas un thread secondaire pour vérifier que
l'enregistrement ne bloque l'appel API...


Parce que tu comptes faire l'enregistrement juste avant l'appel???



Pourquoi pas, si il s'agit d'une fonction uniquement nécessaire
ponctuellement.

Bref, de toute manière, un enregistrement de DLL doit etre fait proprement
dans le setup...



Non, pas obligatoirement.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Philippe KIEFFER
Romain PETIT a exprimé avec précision :
Philippe KIEFFER avait énoncé :
Bonjour à tous,



Bonjour,

Une bonne âme peut elle m'aider à convertir cette macro VB en Windev



On va essayer ...

Dim AtlTiamp As AtlTiampCom
Dim i As Integer

Set AtlTiamp = CreateObject("AtlTiamp.AtlTiampCom")
If AtlTiamp Is Nothing Then Exit Sub: Unload Me



// Pour les CreateObjet, utiliser les objets OLE Automation
oAtlTiamp est un objet OLE dynamique
oAtlTiamp = allouer un objet automation "AtlTiamp.AtlTiampCom"
SI oAtlTiamp = null ALORS RETOUR

If AtlTiamp.OpenBases("", "AtlTiamp", "") = 1 Then



// pour les méthodes de l'objet, utiliser >>
SI oAtlTiamp>>OpenBases("", AtlTiamp", "") = 1 ALORS

Dim Dbtiamp As ORSDatabase.ORSDatabase



// Pour cet objet, je pense qu'il faut aussi
// le déclarer en dynamique (il dépend de l'instanciation de oAltTiamp)

oDbtiamp est un objet OLE dynamique

Set Dbtiamp = AtlTiamp.GetBase("TiampD")



oDbtiamp = oAtlTiamp>>GetBase("TiampD")

Dim AllSet As ORSDatabase.ORSOleAllSet



//idem

oAllSet est un objet OLE dynamique

Set AllSet = Dbtiamp.AllSetFiltreBis("CDevis", "BELLIN", "")



oAllSet = oDbtiamp>>AllSetFiltreBis("CDevis", "BELLIN", "")

Dim nNbRes
nNbRes = AllSet.GetCount()



eNbRes est un entier // vérifier que c'est le bon type
i est un entier
eNbRes = oAllSet>>GetCount()

For i = 0 To nNbRes
Dim Res As ORSDatabase.ORSOleObject
Set Res = AllSet.GetAtNum(i)
Dim Code As ORSDatabase.ORSOleClef
Set Code = Res.GetValeur("Code")
<<< tableajouteligne(ma_table,Code.part1) >>>>
Next i
End If



POUR i=0 A eNbRes
oRes est un objet OLE dynamique
oRes = oAllSet>>GetAtNum(i)
oCode est un objet OLE dynamique
oCode = oRes>>GetValeur("Code")
FIN

sachant que j'ai une DLL AtlTiamp.dll



Il faudra donc probablement l'enregistrer sur le système avant de l'utiliser
(voir la classe RegDLL de Eric Brettenoux par exemple :
http://www.windevasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEH2&MDP=&TYPE=SOURCE)





Un grand merci à Romain PETIT, ça marche :-)
(Désolé pour le délai, j'était en congé)


--
Ph. KIEFFER - Ultim'Info