Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 27-02-2018 12:55:24

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 149
Pépites: 178,983,268,108
Banque: 9,223,372,036,854,776,000

Cloner une datawindow

Bonjour,

je suis en train de faire un écran d'édition générique auquel on peut passer des paramètres.
Une des fonctionnalités est de passer une ou plusieurs datawindow (rapports)

disons que l'on a w_source qui contient mon rapport dw_source
Quand on clique sur le bouton imprimer de w_source cela ouvre un opensheetwithparm(w_impression,... dw_source ...)

Dans ma dw_impression j'ai un openUserObject(dw_impression,'datawindow')
Puis je fais un dw_impression = dw_source
Sauf que c'est un pointeur vers dw_source et non un clone de l'objet.

dw_source peut être n'importe quel type de datawindow (composite, contenir des nested reports, contenir des dropdowndatawindow)
Donc un simple dw_impression.dataObject = dw_source.dataObject et dw_impression.object.data = dw_source.object.data ne vont pas fonctionner correctement.

Il existe getFullstate et setFullState qui fonctionnent bien mais dès que le blob atteint une certaine taille (qui dépend de plusieurs facteur mais bien loin des 2GO théoriques) l'application plante.

Est-ce que quelqu'un aurait une autre méthode ou un algo tout prêt pour cloner une datawindow quel que soit sa structure.

Merci par avance

Hors ligne

 

#2 27-02-2018 20:19:07

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 665
Pépites: 1,174
Banque: 100,221,387,868,884,300
Site web

Re: Cloner une datawindow

Hello, via une copy du dataobject puis des sharedata, principal et dddw ?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#3 28-02-2018 09:25:26

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 149
Pépites: 178,983,268,108
Banque: 9,223,372,036,854,776,000

Re: Cloner une datawindow

merci

je ferai plutôt des rowscopy pour avoir un snapshot au lieu du sharedata.

La question était surtout pour savoir si quelqu'un avait un truc par rapport aux "gros" blob qui font planter l'appli, ou une technique de derrière les fagots ou un algo tout prêt (je suis un peu overbooké depuis quelques années ça m'aurait fait gagner un poil de temps )

Hors ligne

 

#4 28-02-2018 14:34:53

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 728
Pépites: 1,028,786
Banque: 171,170,849,654

Re: Cloner une datawindow

Bonjour,

En ce qui me concerne, tous les reports sont stockés dans la base de données. Du coup, dans notre fenêtre universelle d'impression, on fait :

Code: pb

iw_Previsu.dw_Print.CREATE(ls_syntaxe)


La méthode CREATE est peu être une piste à explorer pour toi pour avoir une source conforme à la cible et copier les données.

Hors ligne

 

#5 28-02-2018 16:37:37

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 665
Pépites: 1,174
Banque: 100,221,387,868,884,300
Site web

Re: Cloner une datawindow

Pour ton plantage sur le getFullState/SetfullState je ne l'ai jamais expérimenté et nos applications l'utilisent, tu sais a partir de quelle taille du blob ça commence à planter ?.


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#6 01-03-2018 11:23:14

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 149
Pépites: 178,983,268,108
Banque: 9,223,372,036,854,776,000

Re: Cloner une datawindow

J'ai le même plantage sur les fileReadEx.
La limite des blob est variable mais se situe aux alentours de 90-100 Mo
Selon les cas c'était soit le GetFullState soit le SetFullState qui ne fonctionnait pas.
J'avais fait des tests il y a un moment
Si mes souvenirs sont bons cette limite bouge en fonction de la mémoire utilisée par l'appli, la mémoire totale des applications 32bits qui tournent sur la machine.
En passant ce patch http://www.ntcore.com/4gb_patch.php la limite est plus haute.
J'ai ce même genre de plantages si je fais du fileread dans une dll en vb.net appelée par mon appli PB en OLE (utilisation d'un byte array)
Toujours selon mes souvenirs j'avais parfois le len(blob) qui me retournait des valeurs négatives après le GetFullState.
A une époque je pouvais faire des fileReadEx sur des fichiers de plusieurs centaines de mega sans problème puis la même application s'est mise à planter sur les gros fichiers au fil de temps.

Hors ligne

 

#7 01-03-2018 14:59:30

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 665
Pépites: 1,174
Banque: 100,221,387,868,884,300
Site web

Re: Cloner une datawindow

Ca ressemble bien à des limitations de resources, est-ce que tu testes toujours la sortie de GetFullState ?
Est-ce qu'après avoir redémarré la machine tu as la même limitation ? (ca me fait penser à des leaks de commit memory, pas forcement lié à ton app)


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22