Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour tout le monde,
Je suis content de trouver un forum PowerBuilder. J'ai, en effet, un grand problème que je n'arrive pas à résoudre tout seul.
Lorsque j'exporte des données à partir de ma base de données, mon application PB (l'EXE) peut passer, selon le nombres des données, de 30Mo à 700Mo.
Le problème c'est qu'à la fin de l'export, la taille de mon application reste à 700Mo (Malgré mon quit, distroy, etc).
Après une recherche sur Internet, j'ai trouvé que PB, crée un OLE Object pour chaque objet Excel (Classeur, Feuille, Cellule, etc) référencés dans le programme. Et visiblement, à la fin de l'export, PB ne les détruit pas
Quelqu'un aurait-il une solution?
Merci d'avance.
Hors ligne
salut,
tu veux dire par la que ta session excel reste ouverte ?
Hors ligne
Bonjour pick ouic,
Non, l'application Excel ferme. L'objet OLE est détruit. Mais la taille de mon application PB reste à 700Mo.
Hors ligne
ceci est confirmé au niveau du gestionnaire des taches ?
Hors ligne
Oui, c'est par le gestionnaire des tâches que j'ai su la taille de mon application...
Hors ligne
on peut voir ton script ?
je ferai un essai sous pb11 et une version anterieure de pb...
Hors ligne
pick ouic a écrit:
on peut voir ton script ?
je ferai un essai sous pb11 et une version anterieure de pb...
Mon code est divisé en plusieurs fonctions. En plus, j'ai créé un objet OleExcel pour manipuler Excel. En plus, mon import est à partir d'une base de données. Comment faire pour te copier coller mon code?
Est-ce possible? Je ne vois pas comment!
Dernière modification par mamid1706 (17-06-2008 11:32:24)
Hors ligne
Bonjour,
Pour que ton PB diminue en taille, il faut impérativement faire un GarbageCollect() après chaque instruction OLE (voir livre blanc de Sybase sur le sujet).
Hors ligne
Chrnico a écrit:
Bonjour,
Pour que ton PB diminue en taille, il faut impérativement faire un GarbageCollect() après chaque instruction OLE (voir livre blanc de Sybase sur le sujet).
Chrnico,
J'ai utilisé ta fonction à la fin de l'export ça n'a pas marché.
Mais après chaque instruction, ça marche. La taille de mon application n'augmente plus que de 700Ko.
Cependant, je pense que cela couteux. J'ai cherché à une autre solution. la voici:
1. Ecrire dans un fichier Texte.
2. Créer un fichier Excel.
4.Créer une chaîne de caractère contenant le code Visual Basic lisant dans le fichier Texte et le copiant dans le fichier Excel
3.Créer un nouveau module dans Excel dont le code est la chaîne créée précédemment
String lsSheetName uoExcel = CREATE unvo_OleExcel uoExcel.of_Connect( ) uoExcel.ActiveWorkbook.VBProject.VBComponents.Add( 1) lsSheetName = "MaFauille" lsActiveSheet = "ActiveWorkbook.Sheets(~"" + lsSheetName + "~")" uoExcel.ActiveWorkbook.VBProject.VBComponents.Item("Module1").CodeModule.AddFromString( & "Sub PowerBuilder_MacroData()" + "~r~n" + & "~r~n" + & "' Ceci est un commentaire dans VB" + "~r~n" + & lsActiveSheet + ".Cells.Select" + "~r~n" + & "With Selection.Font" + "~r~n" + & " .Name = ~"Arial~"" + "~r~n" + & " .Size = 8" + "~r~n" + & " .Strikethrough = False" + "~r~n" + & " .Superscript = False" + "~r~n" + & " .Subscript = False" + "~r~n" + & " .OutlineFont = False" + "~r~n" + & " .Shadow = False" + "~r~n" + & " .Underline = xlUnderlineStyleNone" + "~r~n" + & " .ColorIndex = xlAutomatic" + "~r~n" + & "End With" + "~r~n" + & "End Sub")
Hors ligne
Merci à tous.
Hors ligne
merci à toi pour ta reponse
Hors ligne
mamid1706 a écrit:
Chrnico a écrit:
Bonjour,
Pour que ton PB diminue en taille, il faut impérativement faire un GarbageCollect() après chaque instruction OLE (voir livre blanc de Sybase sur le sujet).Chrnico,
J'ai utilisé ta fonction à la fin de l'export ça n'a pas marché.
Mais après chaque instruction, ça marche. La taille de mon application n'augmente plus que de 700Ko.
Cependant, je pense que cela couteux.
C'est un point de vue. Je pense pas que l'ajout de garbagecollect() soit si couteux que ça... Une instruction de plus après un appel OLE c'est pas la mort et ce n'est pas consommateur en temps machine. A l'inverse ton contournement obligera tes successeurs à coder du VBScript dans un fichier texte (donc sans compilateur pour vérifier la syntaxe)... En terme de maintenance je ne suis pas certain que ce soit le plus simple...
mamid1706 a écrit:
J'ai cherché à une autre solution. la voici:
1. Ecrire dans un fichier Texte.
2. Créer un fichier Excel.
4.Créer une chaîne de caractère contenant le code Visual Basic lisant dans le fichier Texte et le copiant dans le fichier Excel
3.Créer un nouveau module dans Excel dont le code est la chaîne créée précédemmentCode: :
String lsSheetName uoExcel = CREATE unvo_OleExcel uoExcel.of_Connect( ) uoExcel.ActiveWorkbook.VBProject.VBComponents.Add( 1) lsSheetName = "MaFauille" lsActiveSheet = "ActiveWorkbook.Sheets(~"" + lsSheetName + "~")" uoExcel.ActiveWorkbook.VBProject.VBComponents.Item("Module1").CodeModule.AddFromString( & "Sub PowerBuilder_MacroData()" + "~r~n" + & "~r~n" + & "' Ceci est un commentaire dans VB" + "~r~n" + & lsActiveSheet + ".Cells.Select" + "~r~n" + & "With Selection.Font" + "~r~n" + & " .Name = ~"Arial~"" + "~r~n" + & " .Size = 8" + "~r~n" + & " .Strikethrough = False" + "~r~n" + & " .Superscript = False" + "~r~n" + & " .Subscript = False" + "~r~n" + & " .OutlineFont = False" + "~r~n" + & " .Shadow = False" + "~r~n" + & " .Underline = xlUnderlineStyleNone" + "~r~n" + & " .ColorIndex = xlAutomatic" + "~r~n" + & "End With" + "~r~n" + & "End Sub")
Hors ligne
Pages: 1