In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Gran problema con los DataSources

Foro de Xailer profesional en español
Responder
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Gran problema con los DataSources

Mensaje por jmartial »

Hola,
Estoy intentando hacerlo todo con Datasource y Dataset, entonces para abrir
una base escribo:
oDbf:lOpen := .t. y así varias veces para 4 bases por ejemplo,
efectivamente lOpen es .T. y las bases están abiertas, si quiero saber
cuantas tengo uso
len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi Datasource creado al
inicio, y cuando quiero cerrar todas las bases y destruir los datasets hago
lo siguiente:
aTotalDbfs := aClone(::oRdd:aDataSet)
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado con
lopen:=.f., destroy(), End(), para estar seguro
Y Aunque la base está cerrada, ¡existe en datasource!, es decir datasource
sigue teniendo 4 dataset´s en aDataset y si los consulto puedo ver el alias
y que lopen es .F., entonces ¿Para que sirve aDataset, si cuando cree y
destuya 1200 veces una base va a tener una longitud de 1200 aunque haya 1
activa solamente?
Me parece que no está descontando las dataset´s que destruímos, para mí lo
veo un tema importante.
Un Saludo,
Joaquín
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Gran problema con los DataSources

Mensaje por ignacio »

This is a multi-part message in MIME format.
------=_NextPart_000_0009_01C57C99.E2677A40
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_000A_01C57C99.E2677A40"
------=_NextPart_001_000A_01C57C99.E2677A40
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaquin,=20
> inicio, y cuando quiero cerrar todas las bases y destruir los datasets =
hago
> lo siguiente:
De la documentaci=F3n:
Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:
La propiedad 'cProcess' marca el proceso vinculado a la tabla. El =
TDataSource contiene todos los TDataset que se abierto a trav=E9s de =
=E9l, pero si lo desea puede adem=E1s distinguir entre TDataset dentro =
de un mismo TDataSource estableciendo nombres de proceso en el momento =
de su creaci=F3n. Por ejemplo, podr=EDa tener un =FAnico TDataSource =
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede indicarlo con el parametro 'cProcess', o bien establecer el nombre =
del proceso con el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados varios =
TDataset en un mismo proceso puede manejarlos en bloque en operaciones =
de apertura, cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(), CloseProcess(), y DelProcess() de TDataSource para m=E1s =
informaci=F3n. =20
El hecho de que se cierre la tabla no significa que se destruya el =
objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. Porque como =
podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T. =20
De hecho es perfectamente normal y muy recomdable tener m=FAltiples =
procesos vinculados al DataSource e ir abriendo y cerrando uno u otro =
seg=FAn te convenga.
Si quieres destruir el objeto y hacerlo desaparecer del DataSource =
tienes el m=E9todo DelProcess() que viene perfectamente explicado en la =
documentaci=F3n.=20
Te recomiendo que te tomes el tiempo necesario para leer la =
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de leer.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el mensaje =
news:42c25e69$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>=20
> Estoy intentando hacerlo todo con Datasource y Dataset, entonces para =
abrir
> una base escribo:
>=20
> oDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases por ejemplo,
> efectivamente lOpen es .T. y las bases est=E1n abiertas, si quiero =
saber
> cuantas tengo uso
> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi Datasource creado =
al
> inicio, y cuando quiero cerrar todas las bases y destruir los datasets =
hago
> lo siguiente:
>=20
> aTotalDbfs :=3D aClone(::oRdd:aDataSet)
> aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he =
probado con
> lopen:=3D.f., destroy(), End(), para estar seguro
>=20
> Y Aunque la base est=E1 cerrada, =A1existe en datasource!, es decir =
datasource
> sigue teniendo 4 dataset=B4s en aDataset y si los consulto puedo ver =
el alias
> y que lopen es .F., entonces =BFPara que sirve aDataset, si cuando =
cree y
> destuya 1200 veces una base va a tener una longitud de 1200 aunque =
haya 1
> activa solamente?
>=20
> Me parece que no est=E1 descontando las dataset=B4s que destru=EDmos, =
para m=ED lo
> veo un tema importante.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>
------=_NextPart_001_000A_01C57C99.E2677A40
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets=20
hago<BR>> lo siguiente:<BR></DIV>
<DIV>De la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:000401c57c89$1ed9ef50$0e00000a@ozlan.local"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial">La=20
propiedad <B>'cProcess'</B> marca el proceso vinculado a la tabla. El <A =
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
contiene todos los <A=20
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
que se abierto a trav=E9s de =E9l, pero si lo desea puede adem=E1s =
distinguir entre <A=20
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
dentro de un mismo <A=20
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
estableciendo nombres de proceso en el momento de su creaci=F3n. Por =
ejemplo,=20
podr=EDa tener un =FAnico <A=20
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas=20
operaciones a realizar, por ejemplo, el proceso de 'Facturas' necesita =
abrir 5=20
DataSets. Para asignarles el mismo proceso a los cinco puede indicarlo =
con el=20
parametro <B>'cProcess'</B>, o bien establecer el nombre del proceso con =
el cual=20
se abrir=E1n los nuevos DataSet con el m=E9todo DataSource:NewProcess( =
'facturas' ).=20
Una vez que tiene englobados varios <A=20
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A> en=20
un mismo proceso puede manejarlos en bloque en operaciones de apertura, =
cierre y=20
destrucci=F3n de los DataSet. Vea los m=E9todos OpenProcess(), =
CloseProcess(), y=20
DelProcess() de <A=20
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para m=E1s informaci=F3n.ÂÂ<BR></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>El hecho de que se cierre la tabla no significa =
que se=20
destruya el objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. =
Porque como=20
podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T.Â=20
</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>De hecho es perfectamente normal y muy recomdable =
tener=20
m=FAltiples procesos vinculados al DataSource e ir abriendo y cerrando =
uno u otro=20
seg=FAn te convenga.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Si quieres destruir el objeto y hacerlo =
desaparecer del=20
DataSource tienes el m=E9todo DelProcess() que viene perfectamente =
explicado en la=20
documentaci=F3n. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Te recomiendo que te tomes el tiempo necesario =
para leer la=20
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un=20
tema importante y muy aconsejable de leer.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Saludos,</FONT> </SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT>Â</DIV></SPAN>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3 en=20
el mensaje <A=20
href=3D"news:42c25e69$1@ozsrvnegro.ozlan.local">news:42c25e69$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>>=20
Hola,<BR>> <BR>> Estoy intentando hacerlo todo con Datasource y =
Dataset,=20
entonces para abrir<BR>> una base escribo:<BR>> =
<BR>>ÂoDbf:lOpen=20
:=3D .t. y as=ED varias veces para 4 bases por ejemplo,<BR>> =
efectivamente lOpen=20
es .T. y las bases est=E1n abiertas, si quiero saber<BR>> cuantas =
tengo=20
uso<BR>> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi =
Datasource=20
creado al<BR>> inicio, y cuando quiero cerrar todas las bases y =
destruir los=20
datasets hago<BR>> lo siguiente:<BR>>=20
<BR> >ÂÂÂÂÂ&a mp;nbsp;ÂÂÂÂ&nbsp=
;ÂÂÂÂÂ&nbsp ;Â=20
aTotalDbfs :=3D=20
aClone(::oRdd:aDataSet)<BR> >ÂÂÂÂÂ&a mp;nbsp;Â=
ÂÂÂÂÂÂ ÂÂÂÂ=20
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado con<BR>> =
lopen:=3D.f.,=20
destroy(), End(), para estar seguro<BR>> <BR>> Y Aunque la base =
est=E1=20
cerrada, =A1existe en datasource!, es decir datasource<BR>> sigue =
teniendo 4=20
dataset=B4s en aDataset y si los consulto puedo ver el alias<BR>> y =
que lopen=20
es .F., entonces =BFPara que sirve aDataset, si cuando cree y<BR>> =
destuya 1200=20
veces una base va a tener una longitud de 1200 aunque haya 1<BR>> =
activa=20
solamente?<BR>> <BR>> Me parece que no est=E1 descontando las =
dataset=B4s que=20
destru=EDmos, para m=ED lo<BR>> veo un tema importante.<BR>> =
<BR>> Un=20
Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> <BR>> <BR>> =
<BR>>=20
<BR>> <BR>></BODY></HTML>
------=_NextPart_001_000A_01C57C99.E2677A40--
------=_NextPart_000_0009_01C57C99.E2677A40
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000401c57c89$1ed9ef50$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAgEAAAEpCAMAAAA9LwGVAAAAB3RJTUUH1QYd CDERAeorJgAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAhUExURf///wAA /+zp2KyomQAAAMDA
wAAAZszMzGZmZgAzZv/MAK6XzpkAAAqoSURBVHja7Z2LmqMoEEZxl0z3zvs/ 8HYnKlVFgWgSo3LO
fJPIRa6/BSqhww36Jny6APBhUEDvoIDeQQG9gwJ6BwX0Dgq4OsGQhd8/o0S5 /VR979oZT6ESXpvF
Ul2uTvijWK0At9lc37e1tEl4uwL61MDTCnBaLe6qAFsWFLCO8Odu/L9+/oWv r5IC7ogWmg/dZivJ
IhbPeAJ57U/qXJtApS7XJ/z5+iXcP9crQLeftA/aU0e8iVNMOuJCFpKRGZt0 VGA5fTMJydOZj0TW
OoViSbJ5yKmk9BgFfiyBPwr8XVLALephQSrAGmfdLP7oLbtdJXLT3jLjm03X T7+aTlaV7JxqSXQ9
T6WB8Of7+/u3+8PP97dVwN8VCpi6Q7Vg6iPbLoXR2yqg3Lolm2/jymjldFSK Jmv/JD/t3DIdnZ9R
IIx24AejgL+tCsiuy3KnmlG3ooAslm7xrCTaR6evko9+Z5kS5SkUSmLTLpTr qPzOA8b7gK9vMw/4
26wA7TC1z8xooZ1N/930981v3ZICTPrK/mR6LVkjk0KhJDbt0/T9g7sNCKMJ 0Dbg70oFWLOoPYtx
mhQgTs4SNDVy01fnZQOEDc0rViuJm/an+7WdHwV8f3/dLcC3tQH//dCqAGdg LMyKomnQXRSQ2R/P
pVNsVsDpZ4JFG/AIt03rH6bLQbfh7GnP2KiArPx5W/sKuM19Y9OxCTQqIC9G ntEpCOPF780D7uFu
tev95/VizBt08zzAtn06VGUww3lyNCtgcR5gzou+49g8bMDE1meCywpYmGJX bg3yGX1mkOcDHSk2
FbCkgNq9gErBKv12uxXUekja3gvYSolx0G9ufctUmHLXnSYnz1EqSzlBf+Au K6CSeTntkymg6e1w
RQHW46auRrePnb51IpusMkfhzFwZFZfXV3nWcbkkBccVWFKA8rEWX3nmM6Tc 5V1CXjZucbJiVnLz
08ncbSmc/pFAFdYI9Q4K6B0U0DsooHdQQO+ggN5BAb2DAnonAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AAAAAAAAAMDFiTHev1aepb7Wn9jguSqn4cHjuxZnRaleFWd9I+1K3FbEdgXE qnM5mdgaedAfwlMe
Dl7Qyt7ddrUclLixjIdWgN/NKKBeurstiA+L8Pg3jQ9BhsQ5eozqrF93TCZl Pnc8U8ZJrphlXsx0
jmISTM1rFHC3+A+zP36mmCkoL1WYKyGqq+LIEoyNdffVZ7lVlvWJthbu164K mKow/U/BMmRukRDV
Weqk/NylOMUTvZyc2FYBg/pKmggqKARbqkJ13ZLLxoqmhm6VZctlycVSQ+yv AOFtmsTzWSp/3mHi
y808eJkWFTCTjwKimycfoYjBzafFx9FgVspimxZr4bp2VkCMSq9RmvJYqoff u+LccgNKs+t62otJ
lULH9kaBqZvlPcAw3xNYBWRF9qxCKoFTGFuRlQqIenjZVQFRlcT8zwrfogCd Q9VAVDxzG1As2/Io
oIKCawOCl3Mex7dw62yibwNSAXZTQO0SDWH5otDX6OpRoN1cVm2wUcDU5UN2 aMWx2N+bR4Fye8RC
GsXWebsE0hMhY3/GaWzIQ+YRQljiNOk1xlzF8Sfyrmeac+uc6vcCs8X/fTw0 DfzDPC5MkcIYFLwi
h2zQ03EcY+2NAoX2SPc2DfcCO4ngVbyzuCdrig4qsnflFtIeNnG1Rvo476vc Tk9H9uA6NQEAAAAA
AAAAAAAAAAAAAACAU/APXBwU0Dn/Livg3x3YJRPI+Wn4BgXsMdbskQnkoIDe QQG9gwJ6BwX0TqsC
4sjbfplzV8CUiSFWnfAUK2zA/PPfNxUk5H0bxaf1hdewWgHvK0ho7WsU8Eo2 2YAo9sJ6VXcYBXgb
cpktCB6en27A07NRAWlztFdJQM8D/K1K8m03EMDTbLUBb1LA5DLb5tS2lYHn OKgC5P4ovlWYPeE5
jqqA0LyVEjzHweYBk8t0tNf12IDXcLB7gfmJkNqQKzf/whOeY9NT4XdMwXkq /CFQQO+ggN7h3WDv
oIDeaVIAXJkmG7DPklX4BIwCvYMCegcF9A4K6B0U0DvNCvBX8YaXPSD0FFDM E17HCgUEt7crPbSq
73wFhPc8gobE0woos67rkgKiTmFNMohlPRsUkN7gR/W63qwaGH9foiJVenNS gE4izEtSUjImOVsO
WMd6BaReCdIRs5VDpg8XVhQ9FDCGy2UoNhmTnBSISAFa2TITlA0uHKX/qa9i tSBB/uW+OW21Viio
jEWqMm0ksIp1NuCOupzd616rQgVUChKC6l2Zp68Aaf+FPD/dpCdjvQIKnZuv Hs4ihZoZUPOANgWE
OXQ2A/T/at6kgK3zgHsGZjlq8PPy5gH0/3o2jQJq4hWdHlcjxLp7gZSHtQEt 9wKwGp4K9w4K6B0U
0DsooHdQQO+ggN45lgJYELA/B1PA/RAJ7AkK6J2DKuCxO4B6meB++YdpozGR Ds+MfY6qgNq+MWI/
ieAdyp1HtBNyDqaAeUFACGavINc1EbMvrRL2GylzMAVMLkcBensZETndPuio cxz2HatxHgWkqNVR
IA/Q6YDhHApYmAdE1/zLNFBAkQMroP1eQA4I6UuMAtiAMsdSAOwPCugdFNA7 KKB3UEDvoIDeYTe5
7mE3uc5hFOgdFNA7KKB3UEDvoIDeaf/L0/djuVWH97Jt+3Jvu06Qd3k78XIF 2JDWjhQ/UUcBe7J9
N7k2BTQbhNEGpNUdKGAfntlNTh5LG5Ft7CBjxcJfqkMBH+K53eTs1kHLW8tk e86lggTR9yhgN9rv
BdK+Pv4GcnNQfYsp97SAAj7GBgWUNo4cw9IgsEkBIaKAXVmvgNoGcnb3OBRw fFb93eHJBDw3D1hQ
wDTZQAH7sF4Bajc5u6GzFEl2rA2Efy8QwjwPYC+BXeCpcO+ggN5BAb2DAnoH BfQOa4W75yhrheFz
NJgJuDSfHogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AOAZhgeP71qcTxcU3segP4SnPEQC10V0/qA95SEKuC5GAXeL/zD742eKObt/ o4Q5XmCUODVaAYP6
SpoINmjII8M5yUeBIXXo5KMuftvtKODc5KPApAB5DzDUFMDNwqlZGgUKQcYG wHnRd4NmhF9WAPOA
0zMb/LGrh6nrx8MUlr7EOCG+AOB0DK/j01UBAAAAgHVUZnFDswtOTPO7XxRw UVBA74hnvmldgHgX
OD30q7mQw5lJCsjeBqh3AEPFhUU4M/NM0F0B4L4HzN8QwYmRCwAcBaS3QHrt QApjFDg5CwpQYcWL
HwmcGFcBgz8KuBMA5gEnRymgci9gFwyosE9XAl4MPdoRLA4AB/oTAACgD/TP w4ZyBLgo6VcCId9F
wHHC1VAKeByaCJ8uIbyX8Smfv3UAKwE6QCjA/UEgKwGuzpC6v/iTUFYCXBmp ALMYINcEo8AFMTYg
1BQQsAMXpHLFsxKgC9QSwWkRQL4ugHsBgGvCSgAAAACAbmF+1zvDxjC4Ciig d+QqMbOBAM8Du2Ca
B4h1IvKHg7wTuDzid4PDwjsiuCRGAXqHgMDagOuT24DgKiBgBy6KXiO8tFIA rkd6IqQ2EJgnhNwL
AFwa1gYAAAAAAAAAXJr/AUQ3nGF3E0ZbAAAAAElFTkSuQmCC
------=_NextPart_000_0009_01C57C99.E2677A40--

Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Gran problema con los DataSources

Mensaje por jmartial »

This is a multi-part message in MIME format.
------=_NextPart_000_005C_01C57C9F.9F41EFB0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_005D_01C57C9F.9F41EFB0"
------=_NextPart_001_005D_01C57C9F.9F41EFB0
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
Entiendo tu planteamiento y lo veo correcto, pero no quiero ahora en =
concreto utilizar procesos, lo que pensaba era que al hacer END() del =
Dataset, el datasource hac=EDa un oDataSource:DelDataSet( oDataSet ) =
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que fuera "lDelAutoDataSource" o algo por el estilo, o existir =
un m=E9todo Dataset:KillEnd() que lo "Borre" del datasource y destruya =
el Dataset.
Bueno, es s=F3lo una opini=F3n, con esto oDataSource:DelDataSet( =
oDataSet ) puesto manualmente por m=ED tambi=E9n me sirve.
Un Saludo y gracias,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42c26362$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
De la documentaci=F3n:
Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:
La propiedad 'cProcess' marca el proceso vinculado a la tabla. El =
TDataSource contiene todos los TDataset que se abierto a trav=E9s de =
=E9l, pero si lo desea puede adem=E1s distinguir entre TDataset dentro =
de un mismo TDataSource estableciendo nombres de proceso en el momento =
de su creaci=F3n. Por ejemplo, podr=EDa tener un =FAnico TDataSource =
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede indicarlo con el parametro 'cProcess', o bien establecer el nombre =
del proceso con el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados varios =
TDataset en un mismo proceso puede manejarlos en bloque en operaciones =
de apertura, cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(), CloseProcess(), y DelProcess() de TDataSource para m=E1s =
informaci=F3n. =20
El hecho de que se cierre la tabla no significa que se destruya el =
objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. Porque como =
podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T. =20
De hecho es perfectamente normal y muy recomdable tener m=FAltiples =
procesos vinculados al DataSource e ir abriendo y cerrando uno u otro =
seg=FAn te convenga.
Si quieres destruir el objeto y hacerlo desaparecer del DataSource =
tienes el m=E9todo DelProcess() que viene perfectamente explicado en la =
documentaci=F3n.=20
Te recomiendo que te tomes el tiempo necesario para leer la =
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de leer.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:42c25e69$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>=20
> Estoy intentando hacerlo todo con Datasource y Dataset, entonces =
para abrir
> una base escribo:
>=20
> oDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases por ejemplo,
> efectivamente lOpen es .T. y las bases est=E1n abiertas, si quiero =
saber
> cuantas tengo uso
> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi Datasource =
creado al
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
>=20
> aTotalDbfs :=3D aClone(::oRdd:aDataSet)
> aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he =
probado con
> lopen:=3D.f., destroy(), End(), para estar seguro
>=20
> Y Aunque la base est=E1 cerrada, =A1existe en datasource!, es decir =
datasource
> sigue teniendo 4 dataset=B4s en aDataset y si los consulto puedo ver =
el alias
> y que lopen es .F., entonces =BFPara que sirve aDataset, si cuando =
cree y
> destuya 1200 veces una base va a tener una longitud de 1200 aunque =
haya 1
> activa solamente?
>=20
> Me parece que no est=E1 descontando las dataset=B4s que =
destru=EDmos, para m=ED lo
> veo un tema importante.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>
------=_NextPart_001_005D_01C57C9F.9F41EFB0
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Entiendo tu planteamiento y lo veo =
correcto, pero=20
no quiero ahora en concreto utilizar procesos, lo que pensaba era que al =
hacer=20
END() del Dataset, el datasource hac=EDa un oDataSource:DelDataSet( =
oDataSet )=20
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que=20
fuera "lDelAutoDataSource" o algo por el estilo, o existir un m=E9todo=20
Dataset:KillEnd() que lo "Borre" del datasource y destruya el=20
Dataset.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Bueno, es s=F3lo una opini=F3n, con =
esto=20
oDataSource:DelDataSet( oDataSet ) puesto manualmente por m=ED tambi=E9n =
me=20
sirve.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Un Saludo y gracias,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c26362$1@ozsrvnegro.ozlan.local">news:42c26362$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>> inicio, y cuando quiero cerrar todas las bases y destruir =
los=20
datasets hago<BR>> lo siguiente:<BR></DIV>
<DIV>De la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:005701c57c8e$db1899f0$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial">La=20
propiedad <B>'cProcess'</B> marca el proceso vinculado a la tabla. El =
<A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
contiene todos los <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
que se abierto a trav=E9s de =E9l, pero si lo desea puede adem=E1s =
distinguir entre=20
<A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
dentro de un mismo <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
estableciendo nombres de proceso en el momento de su creaci=F3n. Por =
ejemplo,=20
podr=EDa tener un =FAnico <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas=20
operaciones a realizar, por ejemplo, el proceso de 'Facturas' necesita =
abrir 5=20
DataSets. Para asignarles el mismo proceso a los cinco puede indicarlo =
con el=20
parametro <B>'cProcess'</B>, o bien establecer el nombre del proceso =
con el=20
cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess(=20
'facturas' ). Una vez que tiene englobados varios <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
en un mismo proceso puede manejarlos en bloque en operaciones de =
apertura,=20
cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(),=20
CloseProcess(), y DelProcess() de <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para m=E1s informaci=F3n.ÂÂ<BR></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>El hecho de que se cierre la tabla no significa =
que se=20
destruya el objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. =
Porque=20
como podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a =
..T.Â=20
</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>De hecho es perfectamente normal y muy =
recomdable tener=20
m=FAltiples procesos vinculados al DataSource e ir abriendo y cerrando =
uno u=20
otro seg=FAn te convenga.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Si quieres destruir el objeto y hacerlo =
desaparecer del=20
DataSource tienes el m=E9todo DelProcess() que viene perfectamente =
explicado en=20
la documentaci=F3n. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Te recomiendo que te tomes el tiempo necesario =
para leer la=20
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un=20
tema importante y muy aconsejable de leer.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Saludos,</FONT> </SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT>Â</DIV></SPAN>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c25e69$1@ozsrvnegro.ozlan.local">news:42c25e69$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>>=20
Hola,<BR>> <BR>> Estoy intentando hacerlo todo con Datasource y =
Dataset,=20
entonces para abrir<BR>> una base escribo:<BR>> =
<BR>>ÂoDbf:lOpen=20
:=3D .t. y as=ED varias veces para 4 bases por ejemplo,<BR>> =
efectivamente=20
lOpen es .T. y las bases est=E1n abiertas, si quiero saber<BR>> =
cuantas tengo=20
uso<BR>> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi =
Datasource=20
creado al<BR>> inicio, y cuando quiero cerrar todas las bases y =
destruir=20
los datasets hago<BR>> lo siguiente:<BR>>=20
=
<BR> >ÂÂÂÂÂ&a mp;nbsp;ÂÂÂÂ&nbsp=
;ÂÂÂÂÂ&nbsp ;Â=20
aTotalDbfs :=3D=20
=
aClone(::oRdd:aDataSet)<BR> >ÂÂÂÂÂ&a mp;nbsp;Â=
ÂÂÂÂÂÂ ÂÂÂÂ=20
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado con<BR>> =
lopen:=3D.f.,=20
destroy(), End(), para estar seguro<BR>> <BR>> Y Aunque la base =
est=E1=20
cerrada, =A1existe en datasource!, es decir datasource<BR>> sigue =
teniendo 4=20
dataset=B4s en aDataset y si los consulto puedo ver el alias<BR>> y =
que lopen=20
es .F., entonces =BFPara que sirve aDataset, si cuando cree y<BR>> =
destuya=20
1200 veces una base va a tener una longitud de 1200 aunque haya =
1<BR>>=20
activa solamente?<BR>> <BR>> Me parece que no est=E1 descontando =
las=20
dataset=B4s que destru=EDmos, para m=ED lo<BR>> veo un tema =
importante.<BR>>=20
<BR>> Un Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> =
<BR>>=20
<BR>> <BR>> <BR>> <BR>> </BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_005D_01C57C9F.9F41EFB0--
------=_NextPart_000_005C_01C57C9F.9F41EFB0
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <005701c57c8e$db1899f0$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAgEAAAEpCAMAAAA9LwGVAAAAB3RJTUUH1QYd CDERAeorJgAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAhUExURf///wAA /+zp2KyomQAAAMDA
wAAAZszMzGZmZgAzZv/MAK6XzpkAAAqoSURBVHja7Z2LmqMoEEZxl0z3zvs/ 8HYnKlVFgWgSo3LO
fJPIRa6/BSqhww36Jny6APBhUEDvoIDeQQG9gwJ6BwX0Dgq4OsGQhd8/o0S5 /VR979oZT6ESXpvF
Ul2uTvijWK0At9lc37e1tEl4uwL61MDTCnBaLe6qAFsWFLCO8Odu/L9+/oWv r5IC7ogWmg/dZivJ
IhbPeAJ57U/qXJtApS7XJ/z5+iXcP9crQLeftA/aU0e8iVNMOuJCFpKRGZt0 VGA5fTMJydOZj0TW
OoViSbJ5yKmk9BgFfiyBPwr8XVLALephQSrAGmfdLP7oLbtdJXLT3jLjm03X T7+aTlaV7JxqSXQ9
T6WB8Of7+/u3+8PP97dVwN8VCpi6Q7Vg6iPbLoXR2yqg3Lolm2/jymjldFSK Jmv/JD/t3DIdnZ9R
IIx24AejgL+tCsiuy3KnmlG3ooAslm7xrCTaR6evko9+Z5kS5SkUSmLTLpTr qPzOA8b7gK9vMw/4
26wA7TC1z8xooZ1N/930981v3ZICTPrK/mR6LVkjk0KhJDbt0/T9g7sNCKMJ 0Dbg70oFWLOoPYtx
mhQgTs4SNDVy01fnZQOEDc0rViuJm/an+7WdHwV8f3/dLcC3tQH//dCqAGdg LMyKomnQXRSQ2R/P
pVNsVsDpZ4JFG/AIt03rH6bLQbfh7GnP2KiArPx5W/sKuM19Y9OxCTQqIC9G ntEpCOPF780D7uFu
tev95/VizBt08zzAtn06VGUww3lyNCtgcR5gzou+49g8bMDE1meCywpYmGJX bg3yGX1mkOcDHSk2
FbCkgNq9gErBKv12uxXUekja3gvYSolx0G9ufctUmHLXnSYnz1EqSzlBf+Au K6CSeTntkymg6e1w
RQHW46auRrePnb51IpusMkfhzFwZFZfXV3nWcbkkBccVWFKA8rEWX3nmM6Tc 5V1CXjZucbJiVnLz
08ncbSmc/pFAFdYI9Q4K6B0U0DsooHdQQO+ggN5BAb2DAnonAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AAAAAAAAAMDFiTHev1aepb7Wn9jguSqn4cHjuxZnRaleFWd9I+1K3FbEdgXE qnM5mdgaedAfwlMe
Dl7Qyt7ddrUclLixjIdWgN/NKKBeurstiA+L8Pg3jQ9BhsQ5eozqrF93TCZl Pnc8U8ZJrphlXsx0
jmISTM1rFHC3+A+zP36mmCkoL1WYKyGqq+LIEoyNdffVZ7lVlvWJthbu164K mKow/U/BMmRukRDV
Weqk/NylOMUTvZyc2FYBg/pKmggqKARbqkJ13ZLLxoqmhm6VZctlycVSQ+yv AOFtmsTzWSp/3mHi
y808eJkWFTCTjwKimycfoYjBzafFx9FgVspimxZr4bp2VkCMSq9RmvJYqoff u+LccgNKs+t62otJ
lULH9kaBqZvlPcAw3xNYBWRF9qxCKoFTGFuRlQqIenjZVQFRlcT8zwrfogCd Q9VAVDxzG1As2/Io
oIKCawOCl3Mex7dw62yibwNSAXZTQO0SDWH5otDX6OpRoN1cVm2wUcDU5UN2 aMWx2N+bR4Fye8RC
GsXWebsE0hMhY3/GaWzIQ+YRQljiNOk1xlzF8Sfyrmeac+uc6vcCs8X/fTw0 DfzDPC5MkcIYFLwi
h2zQ03EcY+2NAoX2SPc2DfcCO4ngVbyzuCdrig4qsnflFtIeNnG1Rvo476vc Tk9H9uA6NQEAAAAA
AAAAAAAAAAAAAACAU/APXBwU0Dn/Livg3x3YJRPI+Wn4BgXsMdbskQnkoIDe QQG9gwJ6BwX0TqsC
4sjbfplzV8CUiSFWnfAUK2zA/PPfNxUk5H0bxaf1hdewWgHvK0ho7WsU8Eo2 2YAo9sJ6VXcYBXgb
cpktCB6en27A07NRAWlztFdJQM8D/K1K8m03EMDTbLUBb1LA5DLb5tS2lYHn OKgC5P4ovlWYPeE5
jqqA0LyVEjzHweYBk8t0tNf12IDXcLB7gfmJkNqQKzf/whOeY9NT4XdMwXkq /CFQQO+ggN7h3WDv
oIDeaVIAXJkmG7DPklX4BIwCvYMCegcF9A4K6B0U0DvNCvBX8YaXPSD0FFDM E17HCgUEt7crPbSq
73wFhPc8gobE0woos67rkgKiTmFNMohlPRsUkN7gR/W63qwaGH9foiJVenNS gE4izEtSUjImOVsO
WMd6BaReCdIRs5VDpg8XVhQ9FDCGy2UoNhmTnBSISAFa2TITlA0uHKX/qa9i tSBB/uW+OW21Viio
jEWqMm0ksIp1NuCOupzd616rQgVUChKC6l2Zp68Aaf+FPD/dpCdjvQIKnZuv Hs4ihZoZUPOANgWE
OXQ2A/T/at6kgK3zgHsGZjlq8PPy5gH0/3o2jQJq4hWdHlcjxLp7gZSHtQEt 9wKwGp4K9w4K6B0U
0DsooHdQQO+ggN45lgJYELA/B1PA/RAJ7AkK6J2DKuCxO4B6meB++YdpozGR Ds+MfY6qgNq+MWI/
ieAdyp1HtBNyDqaAeUFACGavINc1EbMvrRL2GylzMAVMLkcBensZETndPuio cxz2HatxHgWkqNVR
IA/Q6YDhHApYmAdE1/zLNFBAkQMroP1eQA4I6UuMAtiAMsdSAOwPCugdFNA7 KKB3UEDvoIDeYTe5
7mE3uc5hFOgdFNA7KKB3UEDvoIDeaf/L0/djuVWH97Jt+3Jvu06Qd3k78XIF 2JDWjhQ/UUcBe7J9
N7k2BTQbhNEGpNUdKGAfntlNTh5LG5Ft7CBjxcJfqkMBH+K53eTs1kHLW8tk e86lggTR9yhgN9rv
BdK+Pv4GcnNQfYsp97SAAj7GBgWUNo4cw9IgsEkBIaKAXVmvgNoGcnb3OBRw fFb93eHJBDw3D1hQ
wDTZQAH7sF4Bajc5u6GzFEl2rA2Efy8QwjwPYC+BXeCpcO+ggN5BAb2DAnoH BfQOa4W75yhrheFz
NJgJuDSfHogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AOAZhgeP71qcTxcU3segP4SnPEQC10V0/qA95SEKuC5GAXeL/zD742eKObt/ o4Q5XmCUODVaAYP6
SpoINmjII8M5yUeBIXXo5KMuftvtKODc5KPApAB5DzDUFMDNwqlZGgUKQcYG wHnRd4NmhF9WAPOA
0zMb/LGrh6nrx8MUlr7EOCG+AOB0DK/j01UBAAAAgHVUZnFDswtOTPO7XxRw UVBA74hnvmldgHgX
OD30q7mQw5lJCsjeBqh3AEPFhUU4M/NM0F0B4L4HzN8QwYmRCwAcBaS3QHrt QApjFDg5CwpQYcWL
HwmcGFcBgz8KuBMA5gEnRymgci9gFwyosE9XAl4MPdoRLA4AB/oTAACgD/TP w4ZyBLgo6VcCId9F
wHHC1VAKeByaCJ8uIbyX8Smfv3UAKwE6QCjA/UEgKwGuzpC6v/iTUFYCXBmp ALMYINcEo8AFMTYg
1BQQsAMXpHLFsxKgC9QSwWkRQL4ugHsBgGvCSgAAAACAbmF+1zvDxjC4Ciig d+QqMbOBAM8Du2Ca
B4h1IvKHg7wTuDzid4PDwjsiuCRGAXqHgMDagOuT24DgKiBgBy6KXiO8tFIA rkd6IqQ2EJgnhNwL
AFwa1gYAAAAAAAAAXJr/AUQ3nGF3E0ZbAAAAAElFTkSuQmCC
------=_NextPart_000_005C_01C57C9F.9F41EFB0--

Attached files
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Gran problema con los DataSources

Mensaje por ignacio »

This is a multi-part message in MIME format.
------=_NextPart_000_000A_01C57CA1.A4FD26C0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_000B_01C57CA1.A4FD26C0"
------=_NextPart_001_000B_01C57CA1.A4FD26C0
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaquin,=20
oDataSet:oDataSource :=3D nil
Posteriormente, al DataSet no hace falta destruirlo, yo lo har=E1 el =
recolector de basura.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c26d01@ozsrvnegro.ozlan.local...]42c26d01@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Entiendo tu planteamiento y lo veo correcto, pero no quiero ahora en =
concreto utilizar procesos, lo que pensaba era que al hacer END() del =
Dataset, el datasource hac=EDa un oDataSource:DelDataSet( oDataSet ) =
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que fuera "lDelAutoDataSource" o algo por el estilo, o existir =
un m=E9todo Dataset:KillEnd() que lo "Borre" del datasource y destruya =
el Dataset.
Bueno, es s=F3lo una opini=F3n, con esto oDataSource:DelDataSet( =
oDataSet ) puesto manualmente por m=ED tambi=E9n me sirve.
Un Saludo y gracias,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42c26362$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
De la documentaci=F3n:
Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:
La propiedad 'cProcess' marca el proceso vinculado a la tabla. El =
TDataSource contiene todos los TDataset que se abierto a trav=E9s de =
=E9l, pero si lo desea puede adem=E1s distinguir entre TDataset dentro =
de un mismo TDataSource estableciendo nombres de proceso en el momento =
de su creaci=F3n. Por ejemplo, podr=EDa tener un =FAnico TDataSource =
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede indicarlo con el parametro 'cProcess', o bien establecer el nombre =
del proceso con el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados varios =
TDataset en un mismo proceso puede manejarlos en bloque en operaciones =
de apertura, cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(), CloseProcess(), y DelProcess() de TDataSource para m=E1s =
informaci=F3n. =20
El hecho de que se cierre la tabla no significa que se destruya el =
objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. Porque como =
podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T. =20
De hecho es perfectamente normal y muy recomdable tener m=FAltiples =
procesos vinculados al DataSource e ir abriendo y cerrando uno u otro =
seg=FAn te convenga.
Si quieres destruir el objeto y hacerlo desaparecer del DataSource =
tienes el m=E9todo DelProcess() que viene perfectamente explicado en la =
documentaci=F3n.=20
Te recomiendo que te tomes el tiempo necesario para leer la =
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de leer.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:42c25e69$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>=20
> Estoy intentando hacerlo todo con Datasource y Dataset, entonces =
para abrir
> una base escribo:
>=20
> oDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases por ejemplo,
> efectivamente lOpen es .T. y las bases est=E1n abiertas, si quiero =
saber
> cuantas tengo uso
> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi Datasource =
creado al
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
>=20
> aTotalDbfs :=3D aClone(::oRdd:aDataSet)
> aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he =
probado con
> lopen:=3D.f., destroy(), End(), para estar seguro
>=20
> Y Aunque la base est=E1 cerrada, =A1existe en datasource!, es =
decir datasource
> sigue teniendo 4 dataset=B4s en aDataset y si los consulto puedo =
ver el alias
> y que lopen es .F., entonces =BFPara que sirve aDataset, si cuando =
cree y
> destuya 1200 veces una base va a tener una longitud de 1200 aunque =
haya 1
> activa solamente?
>=20
> Me parece que no est=E1 descontando las dataset=B4s que =
destru=EDmos, para m=ED lo
> veo un tema importante.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>
------=_NextPart_001_000B_01C57CA1.A4FD26C0
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>oDataSet:oDataSource :=3D nil</DIV>
<DIV>Â</DIV>
<DIV>Posteriormente, Âal DataSet no hace falta destruirlo, yo lo =
har=E1 el=20
recolector de basura.</DIV>
<DIV>Â</DIV>
<DIV>Saludos, </DIV>
<DIV>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c26d01@ozsrvnegro.ozlan.local">news:42c26d01@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Entiendo tu planteamiento y lo veo =
correcto, pero=20
no quiero ahora en concreto utilizar procesos, lo que pensaba era que =
al hacer=20
END() del Dataset, el datasource hac=EDa un oDataSource:DelDataSet( =
oDataSet )=20
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que=20
fuera "lDelAutoDataSource" o algo por el estilo, o existir un m=E9todo =
Dataset:KillEnd() que lo "Borre" del datasource y destruya el=20
Dataset.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Bueno, es s=F3lo una opini=F3n, con =
esto=20
oDataSource:DelDataSet( oDataSet ) puesto manualmente por m=ED =
tambi=E9n me=20
sirve.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Un Saludo y gracias,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c26362$1@ozsrvnegro.ozlan.local">news:42c26362$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>> inicio, y cuando quiero cerrar todas las bases y destruir =
los=20
datasets hago<BR>> lo siguiente:<BR></DIV>
<DIV>De la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000501c57c90$e16f9bd0$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>Y para m=E1s abundamiento, tambi=E9n de la =
documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial">La=20
propiedad <B>'cProcess'</B> marca el proceso vinculado a la tabla. =
El <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
contiene todos los <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
que se abierto a trav=E9s de =E9l, pero si lo desea puede adem=E1s =
distinguir=20
entre <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
dentro de un mismo <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
estableciendo nombres de proceso en el momento de su creaci=F3n. Por =
ejemplo,=20
podr=EDa tener un =FAnico <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas=20
operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir=20
5 DataSets. Para asignarles el mismo proceso a los cinco puede =
indicarlo con=20
el parametro <B>'cProcess'</B>, o bien establecer el nombre del =
proceso con=20
el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess(=20
'facturas' ). Una vez que tiene englobados varios <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
en un mismo proceso puede manejarlos en bloque en operaciones de =
apertura,=20
cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(),=20
CloseProcess(), y DelProcess() de <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para m=E1s informaci=F3n.ÂÂ<BR></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>El hecho de que se cierre la tabla no =
significa que se=20
destruya el objeto, ni mush=EDsimo menos qu desaparezcan de =
aDataSets. Porque=20
como podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a =
..T.Â=20
</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>De hecho es perfectamente normal y muy =
recomdable tener=20
m=FAltiples procesos vinculados al DataSource e ir abriendo y =
cerrando uno u=20
otro seg=FAn te convenga.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Si quieres destruir el objeto y hacerlo =
desaparecer del=20
DataSource tienes el m=E9todo DelProcess() que viene perfectamente =
explicado=20
en la documentaci=F3n. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Te recomiendo que te tomes el tiempo =
necesario para leer=20
la documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente,=20
es un tema importante y muy aconsejable de leer.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Saludos,</FONT> </SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT>Â</DIV></SPAN>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c25e69$1@ozsrvnegro.ozlan.local">news:42c25e69$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>>=20
Hola,<BR>> <BR>> Estoy intentando hacerlo todo con Datasource =
y=20
Dataset, entonces para abrir<BR>> una base escribo:<BR>>=20
<BR>>ÂoDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases =
por=20
ejemplo,<BR>> efectivamente lOpen es .T. y las bases est=E1n =
abiertas, si=20
quiero saber<BR>> cuantas tengo uso<BR>> len(oRdd:aDataSet) =
teniendo=20
en cuenta que oRdd es mi Datasource creado al<BR>> inicio, y =
cuando=20
quiero cerrar todas las bases y destruir los datasets hago<BR>> =
lo=20
siguiente:<BR>>=20
=
<BR> >ÂÂÂÂÂ&a mp;nbsp;ÂÂÂÂ&nbsp=
;ÂÂÂÂÂ&nbsp ;Â=20
aTotalDbfs :=3D=20
=
aClone(::oRdd:aDataSet)<BR> >ÂÂÂÂÂ&a mp;nbsp;Â=
ÂÂÂÂÂÂ ÂÂÂÂ=20
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado con<BR>>=20
lopen:=3D.f., destroy(), End(), para estar seguro<BR>> <BR>> Y =
Aunque la=20
base est=E1 cerrada, =A1existe en datasource!, es decir =
datasource<BR>> sigue=20
teniendo 4 dataset=B4s en aDataset y si los consulto puedo ver el=20
alias<BR>> y que lopen es .F., entonces =BFPara que sirve =
aDataset, si=20
cuando cree y<BR>> destuya 1200 veces una base va a tener una =
longitud de=20
1200 aunque haya 1<BR>> activa solamente?<BR>> <BR>> Me =
parece que=20
no est=E1 descontando las dataset=B4s que destru=EDmos, para m=ED =
lo<BR>> veo un=20
tema importante.<BR>> <BR>> Un Saludo,<BR>> =
Joaqu=EDn<BR>>=20
<BR>> <BR>> <BR>> <BR>> <BR>> <BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_000B_01C57CA1.A4FD26C0--
------=_NextPart_000_000A_01C57CA1.A4FD26C0
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000501c57c90$e16f9bd0$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAgEAAAEpCAMAAAA9LwGVAAAAB3RJTUUH1QYd CDERAeorJgAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAhUExURf///wAA /+zp2KyomQAAAMDA
wAAAZszMzGZmZgAzZv/MAK6XzpkAAAqoSURBVHja7Z2LmqMoEEZxl0z3zvs/ 8HYnKlVFgWgSo3LO
fJPIRa6/BSqhww36Jny6APBhUEDvoIDeQQG9gwJ6BwX0Dgq4OsGQhd8/o0S5 /VR979oZT6ESXpvF
Ul2uTvijWK0At9lc37e1tEl4uwL61MDTCnBaLe6qAFsWFLCO8Odu/L9+/oWv r5IC7ogWmg/dZivJ
IhbPeAJ57U/qXJtApS7XJ/z5+iXcP9crQLeftA/aU0e8iVNMOuJCFpKRGZt0 VGA5fTMJydOZj0TW
OoViSbJ5yKmk9BgFfiyBPwr8XVLALephQSrAGmfdLP7oLbtdJXLT3jLjm03X T7+aTlaV7JxqSXQ9
T6WB8Of7+/u3+8PP97dVwN8VCpi6Q7Vg6iPbLoXR2yqg3Lolm2/jymjldFSK Jmv/JD/t3DIdnZ9R
IIx24AejgL+tCsiuy3KnmlG3ooAslm7xrCTaR6evko9+Z5kS5SkUSmLTLpTr qPzOA8b7gK9vMw/4
26wA7TC1z8xooZ1N/930981v3ZICTPrK/mR6LVkjk0KhJDbt0/T9g7sNCKMJ 0Dbg70oFWLOoPYtx
mhQgTs4SNDVy01fnZQOEDc0rViuJm/an+7WdHwV8f3/dLcC3tQH//dCqAGdg LMyKomnQXRSQ2R/P
pVNsVsDpZ4JFG/AIt03rH6bLQbfh7GnP2KiArPx5W/sKuM19Y9OxCTQqIC9G ntEpCOPF780D7uFu
tev95/VizBt08zzAtn06VGUww3lyNCtgcR5gzou+49g8bMDE1meCywpYmGJX bg3yGX1mkOcDHSk2
FbCkgNq9gErBKv12uxXUekja3gvYSolx0G9ufctUmHLXnSYnz1EqSzlBf+Au K6CSeTntkymg6e1w
RQHW46auRrePnb51IpusMkfhzFwZFZfXV3nWcbkkBccVWFKA8rEWX3nmM6Tc 5V1CXjZucbJiVnLz
08ncbSmc/pFAFdYI9Q4K6B0U0DsooHdQQO+ggN5BAb2DAnonAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AAAAAAAAAMDFiTHev1aepb7Wn9jguSqn4cHjuxZnRaleFWd9I+1K3FbEdgXE qnM5mdgaedAfwlMe
Dl7Qyt7ddrUclLixjIdWgN/NKKBeurstiA+L8Pg3jQ9BhsQ5eozqrF93TCZl Pnc8U8ZJrphlXsx0
jmISTM1rFHC3+A+zP36mmCkoL1WYKyGqq+LIEoyNdffVZ7lVlvWJthbu164K mKow/U/BMmRukRDV
Weqk/NylOMUTvZyc2FYBg/pKmggqKARbqkJ13ZLLxoqmhm6VZctlycVSQ+yv AOFtmsTzWSp/3mHi
y808eJkWFTCTjwKimycfoYjBzafFx9FgVspimxZr4bp2VkCMSq9RmvJYqoff u+LccgNKs+t62otJ
lULH9kaBqZvlPcAw3xNYBWRF9qxCKoFTGFuRlQqIenjZVQFRlcT8zwrfogCd Q9VAVDxzG1As2/Io
oIKCawOCl3Mex7dw62yibwNSAXZTQO0SDWH5otDX6OpRoN1cVm2wUcDU5UN2 aMWx2N+bR4Fye8RC
GsXWebsE0hMhY3/GaWzIQ+YRQljiNOk1xlzF8Sfyrmeac+uc6vcCs8X/fTw0 DfzDPC5MkcIYFLwi
h2zQ03EcY+2NAoX2SPc2DfcCO4ngVbyzuCdrig4qsnflFtIeNnG1Rvo476vc Tk9H9uA6NQEAAAAA
AAAAAAAAAAAAAACAU/APXBwU0Dn/Livg3x3YJRPI+Wn4BgXsMdbskQnkoIDe QQG9gwJ6BwX0TqsC
4sjbfplzV8CUiSFWnfAUK2zA/PPfNxUk5H0bxaf1hdewWgHvK0ho7WsU8Eo2 2YAo9sJ6VXcYBXgb
cpktCB6en27A07NRAWlztFdJQM8D/K1K8m03EMDTbLUBb1LA5DLb5tS2lYHn OKgC5P4ovlWYPeE5
jqqA0LyVEjzHweYBk8t0tNf12IDXcLB7gfmJkNqQKzf/whOeY9NT4XdMwXkq /CFQQO+ggN7h3WDv
oIDeaVIAXJkmG7DPklX4BIwCvYMCegcF9A4K6B0U0DvNCvBX8YaXPSD0FFDM E17HCgUEt7crPbSq
73wFhPc8gobE0woos67rkgKiTmFNMohlPRsUkN7gR/W63qwaGH9foiJVenNS gE4izEtSUjImOVsO
WMd6BaReCdIRs5VDpg8XVhQ9FDCGy2UoNhmTnBSISAFa2TITlA0uHKX/qa9i tSBB/uW+OW21Viio
jEWqMm0ksIp1NuCOupzd616rQgVUChKC6l2Zp68Aaf+FPD/dpCdjvQIKnZuv Hs4ihZoZUPOANgWE
OXQ2A/T/at6kgK3zgHsGZjlq8PPy5gH0/3o2jQJq4hWdHlcjxLp7gZSHtQEt 9wKwGp4K9w4K6B0U
0DsooHdQQO+ggN45lgJYELA/B1PA/RAJ7AkK6J2DKuCxO4B6meB++YdpozGR Ds+MfY6qgNq+MWI/
ieAdyp1HtBNyDqaAeUFACGavINc1EbMvrRL2GylzMAVMLkcBensZETndPuio cxz2HatxHgWkqNVR
IA/Q6YDhHApYmAdE1/zLNFBAkQMroP1eQA4I6UuMAtiAMsdSAOwPCugdFNA7 KKB3UEDvoIDeYTe5
7mE3uc5hFOgdFNA7KKB3UEDvoIDeaf/L0/djuVWH97Jt+3Jvu06Qd3k78XIF 2JDWjhQ/UUcBe7J9
N7k2BTQbhNEGpNUdKGAfntlNTh5LG5Ft7CBjxcJfqkMBH+K53eTs1kHLW8tk e86lggTR9yhgN9rv
BdK+Pv4GcnNQfYsp97SAAj7GBgWUNo4cw9IgsEkBIaKAXVmvgNoGcnb3OBRw fFb93eHJBDw3D1hQ
wDTZQAH7sF4Bajc5u6GzFEl2rA2Efy8QwjwPYC+BXeCpcO+ggN5BAb2DAnoH BfQOa4W75yhrheFz
NJgJuDSfHogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AOAZhgeP71qcTxcU3segP4SnPEQC10V0/qA95SEKuC5GAXeL/zD742eKObt/ o4Q5XmCUODVaAYP6
SpoINmjII8M5yUeBIXXo5KMuftvtKODc5KPApAB5DzDUFMDNwqlZGgUKQcYG wHnRd4NmhF9WAPOA
0zMb/LGrh6nrx8MUlr7EOCG+AOB0DK/j01UBAAAAgHVUZnFDswtOTPO7XxRw UVBA74hnvmldgHgX
OD30q7mQw5lJCsjeBqh3AEPFhUU4M/NM0F0B4L4HzN8QwYmRCwAcBaS3QHrt QApjFDg5CwpQYcWL
HwmcGFcBgz8KuBMA5gEnRymgci9gFwyosE9XAl4MPdoRLA4AB/oTAACgD/TP w4ZyBLgo6VcCId9F
wHHC1VAKeByaCJ8uIbyX8Smfv3UAKwE6QCjA/UEgKwGuzpC6v/iTUFYCXBmp ALMYINcEo8AFMTYg
1BQQsAMXpHLFsxKgC9QSwWkRQL4ugHsBgGvCSgAAAACAbmF+1zvDxjC4Ciig d+QqMbOBAM8Du2Ca
B4h1IvKHg7wTuDzid4PDwjsiuCRGAXqHgMDagOuT24DgKiBgBy6KXiO8tFIA rkd6IqQ2EJgnhNwL
AFwa1gYAAAAAAAAAXJr/AUQ3nGF3E0ZbAAAAAElFTkSuQmCC
------=_NextPart_000_000A_01C57CA1.A4FD26C0--

Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Gran problema con los DataSources

Mensaje por jmartial »

This is a multi-part message in MIME format.
------=_NextPart_000_006B_01C57CA5.19C1B360
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_006C_01C57CA5.19C1B360"
------=_NextPart_001_006C_01C57CA5.19C1B360
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
no se si me explicado algo confuso, pero lo que dices
oDataSet:oDataSource :=3D nil no hace que el array oDataSOURCE:aDataset =
tenga 1 elemento menos. que ser=EDa por eliminar el oDataset que =
queremos destruir del sistema.
Eso nada m=E1s lo hace oDataSOURCE:DelDataSet( oDataSet ), y mi idea era =
que lo hiciese autom=E1tico el DataSET al hacer End()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42c27067$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
oDataSet:oDataSource :=3D nil
Posteriormente, al DataSet no hace falta destruirlo, yo lo har=E1 el =
recolector de basura.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c26d01@ozsrvnegro.ozlan.local...]42c26d01@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Entiendo tu planteamiento y lo veo correcto, pero no quiero ahora en =
concreto utilizar procesos, lo que pensaba era que al hacer END() del =
Dataset, el datasource hac=EDa un oDataSource:DelDataSet( oDataSet ) =
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que fuera "lDelAutoDataSource" o algo por el estilo, o existir =
un m=E9todo Dataset:KillEnd() que lo "Borre" del datasource y destruya =
el Dataset.
Bueno, es s=F3lo una opini=F3n, con esto oDataSource:DelDataSet( =
oDataSet ) puesto manualmente por m=ED tambi=E9n me sirve.
Un Saludo y gracias,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 =
en el mensaje news:42c26362$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
De la documentaci=F3n:
Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:
La propiedad 'cProcess' marca el proceso vinculado a la tabla. El =
TDataSource contiene todos los TDataset que se abierto a trav=E9s de =
=E9l, pero si lo desea puede adem=E1s distinguir entre TDataset dentro =
de un mismo TDataSource estableciendo nombres de proceso en el momento =
de su creaci=F3n. Por ejemplo, podr=EDa tener un =FAnico TDataSource =
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede indicarlo con el parametro 'cProcess', o bien establecer el nombre =
del proceso con el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados varios =
TDataset en un mismo proceso puede manejarlos en bloque en operaciones =
de apertura, cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(), CloseProcess(), y DelProcess() de TDataSource para m=E1s =
informaci=F3n. =20
El hecho de que se cierre la tabla no significa que se destruya el =
objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. Porque como =
podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T. =20
De hecho es perfectamente normal y muy recomdable tener =
m=FAltiples procesos vinculados al DataSource e ir abriendo y cerrando =
uno u otro seg=FAn te convenga.
Si quieres destruir el objeto y hacerlo desaparecer del DataSource =
tienes el m=E9todo DelProcess() que viene perfectamente explicado en la =
documentaci=F3n.=20
Te recomiendo que te tomes el tiempo necesario para leer la =
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de leer.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:42c25e69$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>=20
> Estoy intentando hacerlo todo con Datasource y Dataset, entonces =
para abrir
> una base escribo:
>=20
> oDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases por =
ejemplo,
> efectivamente lOpen es .T. y las bases est=E1n abiertas, si =
quiero saber
> cuantas tengo uso
> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi Datasource =
creado al
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
>=20
> aTotalDbfs :=3D aClone(::oRdd:aDataSet)
> aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he =
probado con
> lopen:=3D.f., destroy(), End(), para estar seguro
>=20
> Y Aunque la base est=E1 cerrada, =A1existe en datasource!, es =
decir datasource
> sigue teniendo 4 dataset=B4s en aDataset y si los consulto puedo =
ver el alias
> y que lopen es .F., entonces =BFPara que sirve aDataset, si =
cuando cree y
> destuya 1200 veces una base va a tener una longitud de 1200 =
aunque haya 1
> activa solamente?
>=20
> Me parece que no est=E1 descontando las dataset=B4s que =
destru=EDmos, para m=ED lo
> veo un tema importante.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>
------=_NextPart_001_006C_01C57CA5.19C1B360
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>no se si me explicado algo confuso, =
pero lo que=20
dices
<DIV>Â</DIV>
<DIV>oDataSet:oDataSource :=3D nil no hace que el array=20
oDataSOURCE:aDatasetÂtenga 1 elemento menos. que ser=EDa por =
eliminar el=20
oDataset que queremos destruir del sistema.</DIV>
<DIV>Â</DIV>
<DIV>Eso nada m=E1s lo haceÂoDataSOURCE:DelDataSet( oDataSet ), y =
mi idea era=20
que lo hiciese autom=E1tico el DataSET al hacer End()</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV></FONT></DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c27067$1@ozsrvnegro.ozlan.local">news:42c27067$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>oDataSet:oDataSource :=3D nil</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Posteriormente, Âal DataSet no hace falta destruirlo, yo lo =
har=E1 el=20
recolector de basura.</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Saludos, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c26d01@ozsrvnegro.ozlan.local">news:42c26d01@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Entiendo tu planteamiento y lo veo =
correcto,=20
pero no quiero ahora en concreto utilizar procesos, lo que pensaba =
era que=20
al hacer END() del Dataset, el datasource hac=EDa un =
oDataSource:DelDataSet(=20
oDataSet ) autom=E1ticamente, o por lo menos deber=EDa existir en el =
dataset una=20
Property que fuera "lDelAutoDataSource" o algo por el estilo, o =
existir un=20
m=E9todo Dataset:KillEnd() que lo "Borre" del datasource y destruya =
el=20
Dataset.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Bueno, es s=F3lo una opini=F3n, con =
esto=20
oDataSource:DelDataSet( oDataSet ) puesto manualmente por m=ED =
tambi=E9n me=20
sirve.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Un Saludo y gracias,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c26362$1@ozsrvnegro.ozlan.local">news:42c26362$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>> inicio, y cuando quiero cerrar todas las bases y =
destruir los=20
datasets hago<BR>> lo siguiente:<BR></DIV>
<DIV>De la documentaci=F3n:</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:006601c57c94$55a025d0$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Y para m=E1s abundamiento, tambi=E9n de la =
documentaci=F3n:</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial">La=20
propiedad <B>'cProcess'</B> marca el proceso vinculado a la tabla. =
El <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
contiene todos los <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
que se abierto a trav=E9s de =E9l, pero si lo desea puede adem=E1s =
distinguir=20
entre <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
dentro de un mismo <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
estableciendo nombres de proceso en el momento de su creaci=F3n. =
Por=20
ejemplo, podr=EDa tener un =FAnico <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para =
las distintas=20
operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita=20
abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede=20
indicarlo con el parametro <B>'cProcess'</B>, o bien establecer el =
nombre=20
del proceso con el cual se abrir=E1n los nuevos DataSet con el =
m=E9todo=20
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados =
varios=20
<A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
en un mismo proceso puede manejarlos en bloque en operaciones de =
apertura,=20
cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(),=20
CloseProcess(), y DelProcess() de <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para m=E1s informaci=F3n.ÂÂ<BR></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>El hecho de que se cierre la tabla no =
significa que se=20
destruya el objeto, ni mush=EDsimo menos qu desaparezcan de =
aDataSets.=20
Porque como podr=E1s comprobar se puede abrir de nuevo haciendo =
lOpen a=20
.T. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>De hecho es perfectamente normal y muy =
recomdable tener=20
m=FAltiples procesos vinculados al DataSource e ir abriendo y =
cerrando uno u=20
otro seg=FAn te convenga.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Si quieres destruir el objeto y hacerlo =
desaparecer del=20
DataSource tienes el m=E9todo DelProcess() que viene perfectamente =
explicado=20
en la documentaci=F3n. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Te recomiendo que te tomes el tiempo =
necesario para=20
leer la documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de=20
leer.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Saludos,</FONT> </SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT>Â</DIV></SPAN>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c25e69$1@ozsrvnegro.ozlan.local">news:42c25e69$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>>=20
Hola,<BR>> <BR>> Estoy intentando hacerlo todo con =
Datasource y=20
Dataset, entonces para abrir<BR>> una base escribo:<BR>>=20
<BR>>ÂoDbf:lOpen :=3D .t. y as=ED varias veces para 4 =
bases por=20
ejemplo,<BR>> efectivamente lOpen es .T. y las bases est=E1n =
abiertas, si=20
quiero saber<BR>> cuantas tengo uso<BR>> len(oRdd:aDataSet) =
teniendo=20
en cuenta que oRdd es mi Datasource creado al<BR>> inicio, y =
cuando=20
quiero cerrar todas las bases y destruir los datasets hago<BR>> =
lo=20
siguiente:<BR>>=20
=
<BR> >ÂÂÂÂÂ&a mp;nbsp;ÂÂÂÂ&nbsp=
;ÂÂÂÂÂ&nbsp ;Â=20
aTotalDbfs :=3D=20
=
aClone(::oRdd:aDataSet)<BR> >ÂÂÂÂÂ&a mp;nbsp;Â=
ÂÂÂÂÂÂ ÂÂÂÂ=20
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado con<BR>> =
lopen:=3D.f., destroy(), End(), para estar seguro<BR>> <BR>> =
Y Aunque=20
la base est=E1 cerrada, =A1existe en datasource!, es decir =
datasource<BR>>=20
sigue teniendo 4 dataset=B4s en aDataset y si los consulto puedo =
ver el=20
alias<BR>> y que lopen es .F., entonces =BFPara que sirve =
aDataset, si=20
cuando cree y<BR>> destuya 1200 veces una base va a tener una =
longitud=20
de 1200 aunque haya 1<BR>> activa solamente?<BR>> <BR>> =
Me parece=20
que no est=E1 descontando las dataset=B4s que destru=EDmos, para =
m=ED lo<BR>>=20
veo un tema importante.<BR>> <BR>> Un Saludo,<BR>>=20
Joaqu=EDn<BR>> <BR>> <BR>> <BR>> <BR>> <BR>> =
<BR>>=20
<BR>> </BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_006C_01C57CA5.19C1B360--
------=_NextPart_000_006B_01C57CA5.19C1B360
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <006601c57c94$55a025d0$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAgEAAAEpCAMAAAA9LwGVAAAAB3RJTUUH1QYd CDERAeorJgAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAhUExURf///wAA /+zp2KyomQAAAMDA
wAAAZszMzGZmZgAzZv/MAK6XzpkAAAqoSURBVHja7Z2LmqMoEEZxl0z3zvs/ 8HYnKlVFgWgSo3LO
fJPIRa6/BSqhww36Jny6APBhUEDvoIDeQQG9gwJ6BwX0Dgq4OsGQhd8/o0S5 /VR979oZT6ESXpvF
Ul2uTvijWK0At9lc37e1tEl4uwL61MDTCnBaLe6qAFsWFLCO8Odu/L9+/oWv r5IC7ogWmg/dZivJ
IhbPeAJ57U/qXJtApS7XJ/z5+iXcP9crQLeftA/aU0e8iVNMOuJCFpKRGZt0 VGA5fTMJydOZj0TW
OoViSbJ5yKmk9BgFfiyBPwr8XVLALephQSrAGmfdLP7oLbtdJXLT3jLjm03X T7+aTlaV7JxqSXQ9
T6WB8Of7+/u3+8PP97dVwN8VCpi6Q7Vg6iPbLoXR2yqg3Lolm2/jymjldFSK Jmv/JD/t3DIdnZ9R
IIx24AejgL+tCsiuy3KnmlG3ooAslm7xrCTaR6evko9+Z5kS5SkUSmLTLpTr qPzOA8b7gK9vMw/4
26wA7TC1z8xooZ1N/930981v3ZICTPrK/mR6LVkjk0KhJDbt0/T9g7sNCKMJ 0Dbg70oFWLOoPYtx
mhQgTs4SNDVy01fnZQOEDc0rViuJm/an+7WdHwV8f3/dLcC3tQH//dCqAGdg LMyKomnQXRSQ2R/P
pVNsVsDpZ4JFG/AIt03rH6bLQbfh7GnP2KiArPx5W/sKuM19Y9OxCTQqIC9G ntEpCOPF780D7uFu
tev95/VizBt08zzAtn06VGUww3lyNCtgcR5gzou+49g8bMDE1meCywpYmGJX bg3yGX1mkOcDHSk2
FbCkgNq9gErBKv12uxXUekja3gvYSolx0G9ufctUmHLXnSYnz1EqSzlBf+Au K6CSeTntkymg6e1w
RQHW46auRrePnb51IpusMkfhzFwZFZfXV3nWcbkkBccVWFKA8rEWX3nmM6Tc 5V1CXjZucbJiVnLz
08ncbSmc/pFAFdYI9Q4K6B0U0DsooHdQQO+ggN5BAb2DAnonAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AAAAAAAAAMDFiTHev1aepb7Wn9jguSqn4cHjuxZnRaleFWd9I+1K3FbEdgXE qnM5mdgaedAfwlMe
Dl7Qyt7ddrUclLixjIdWgN/NKKBeurstiA+L8Pg3jQ9BhsQ5eozqrF93TCZl Pnc8U8ZJrphlXsx0
jmISTM1rFHC3+A+zP36mmCkoL1WYKyGqq+LIEoyNdffVZ7lVlvWJthbu164K mKow/U/BMmRukRDV
Weqk/NylOMUTvZyc2FYBg/pKmggqKARbqkJ13ZLLxoqmhm6VZctlycVSQ+yv AOFtmsTzWSp/3mHi
y808eJkWFTCTjwKimycfoYjBzafFx9FgVspimxZr4bp2VkCMSq9RmvJYqoff u+LccgNKs+t62otJ
lULH9kaBqZvlPcAw3xNYBWRF9qxCKoFTGFuRlQqIenjZVQFRlcT8zwrfogCd Q9VAVDxzG1As2/Io
oIKCawOCl3Mex7dw62yibwNSAXZTQO0SDWH5otDX6OpRoN1cVm2wUcDU5UN2 aMWx2N+bR4Fye8RC
GsXWebsE0hMhY3/GaWzIQ+YRQljiNOk1xlzF8Sfyrmeac+uc6vcCs8X/fTw0 DfzDPC5MkcIYFLwi
h2zQ03EcY+2NAoX2SPc2DfcCO4ngVbyzuCdrig4qsnflFtIeNnG1Rvo476vc Tk9H9uA6NQEAAAAA
AAAAAAAAAAAAAACAU/APXBwU0Dn/Livg3x3YJRPI+Wn4BgXsMdbskQnkoIDe QQG9gwJ6BwX0TqsC
4sjbfplzV8CUiSFWnfAUK2zA/PPfNxUk5H0bxaf1hdewWgHvK0ho7WsU8Eo2 2YAo9sJ6VXcYBXgb
cpktCB6en27A07NRAWlztFdJQM8D/K1K8m03EMDTbLUBb1LA5DLb5tS2lYHn OKgC5P4ovlWYPeE5
jqqA0LyVEjzHweYBk8t0tNf12IDXcLB7gfmJkNqQKzf/whOeY9NT4XdMwXkq /CFQQO+ggN7h3WDv
oIDeaVIAXJkmG7DPklX4BIwCvYMCegcF9A4K6B0U0DvNCvBX8YaXPSD0FFDM E17HCgUEt7crPbSq
73wFhPc8gobE0woos67rkgKiTmFNMohlPRsUkN7gR/W63qwaGH9foiJVenNS gE4izEtSUjImOVsO
WMd6BaReCdIRs5VDpg8XVhQ9FDCGy2UoNhmTnBSISAFa2TITlA0uHKX/qa9i tSBB/uW+OW21Viio
jEWqMm0ksIp1NuCOupzd616rQgVUChKC6l2Zp68Aaf+FPD/dpCdjvQIKnZuv Hs4ihZoZUPOANgWE
OXQ2A/T/at6kgK3zgHsGZjlq8PPy5gH0/3o2jQJq4hWdHlcjxLp7gZSHtQEt 9wKwGp4K9w4K6B0U
0DsooHdQQO+ggN45lgJYELA/B1PA/RAJ7AkK6J2DKuCxO4B6meB++YdpozGR Ds+MfY6qgNq+MWI/
ieAdyp1HtBNyDqaAeUFACGavINc1EbMvrRL2GylzMAVMLkcBensZETndPuio cxz2HatxHgWkqNVR
IA/Q6YDhHApYmAdE1/zLNFBAkQMroP1eQA4I6UuMAtiAMsdSAOwPCugdFNA7 KKB3UEDvoIDeYTe5
7mE3uc5hFOgdFNA7KKB3UEDvoIDeaf/L0/djuVWH97Jt+3Jvu06Qd3k78XIF 2JDWjhQ/UUcBe7J9
N7k2BTQbhNEGpNUdKGAfntlNTh5LG5Ft7CBjxcJfqkMBH+K53eTs1kHLW8tk e86lggTR9yhgN9rv
BdK+Pv4GcnNQfYsp97SAAj7GBgWUNo4cw9IgsEkBIaKAXVmvgNoGcnb3OBRw fFb93eHJBDw3D1hQ
wDTZQAH7sF4Bajc5u6GzFEl2rA2Efy8QwjwPYC+BXeCpcO+ggN5BAb2DAnoH BfQOa4W75yhrheFz
NJgJuDSfHogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AOAZhgeP71qcTxcU3segP4SnPEQC10V0/qA95SEKuC5GAXeL/zD742eKObt/ o4Q5XmCUODVaAYP6
SpoINmjII8M5yUeBIXXo5KMuftvtKODc5KPApAB5DzDUFMDNwqlZGgUKQcYG wHnRd4NmhF9WAPOA
0zMb/LGrh6nrx8MUlr7EOCG+AOB0DK/j01UBAAAAgHVUZnFDswtOTPO7XxRw UVBA74hnvmldgHgX
OD30q7mQw5lJCsjeBqh3AEPFhUU4M/NM0F0B4L4HzN8QwYmRCwAcBaS3QHrt QApjFDg5CwpQYcWL
HwmcGFcBgz8KuBMA5gEnRymgci9gFwyosE9XAl4MPdoRLA4AB/oTAACgD/TP w4ZyBLgo6VcCId9F
wHHC1VAKeByaCJ8uIbyX8Smfv3UAKwE6QCjA/UEgKwGuzpC6v/iTUFYCXBmp ALMYINcEo8AFMTYg
1BQQsAMXpHLFsxKgC9QSwWkRQL4ugHsBgGvCSgAAAACAbmF+1zvDxjC4Ciig d+QqMbOBAM8Du2Ca
B4h1IvKHg7wTuDzid4PDwjsiuCRGAXqHgMDagOuT24DgKiBgBy6KXiO8tFIA rkd6IqQ2EJgnhNwL
AFwa1gYAAAAAAAAAXJr/AUQ3nGF3E0ZbAAAAAElFTkSuQmCC
------=_NextPart_000_006B_01C57CA5.19C1B360--

Attached files
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Gran problema con los DataSources

Mensaje por ignacio »

This is a multi-part message in MIME format.
------=_NextPart_000_000C_01C57CAA.37A4F810
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_000D_01C57CAA.37A4F810"
------=_NextPart_001_000D_01C57CAA.37A4F810
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaquin,=20
>>oDataSet:oDataSource :=3D nil no hace que el array =
oDataSOURCE:aDataset tenga 1 elemento menos
Lo has probado. Deber=EDa funcionar.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c27633@ozsrvnegro.ozlan.local...]42c27633@ozsrvnegro.ozlan.local...[/email]
Ignacio,
no se si me explicado algo confuso, pero lo que dices=20
oDataSet:oDataSource :=3D nil no hace que el array =
oDataSOURCE:aDataset tenga 1 elemento menos. que ser=EDa por eliminar el =
oDataset que queremos destruir del sistema.
Eso nada m=E1s lo hace oDataSOURCE:DelDataSet( oDataSet ), y mi idea =
era que lo hiciese autom=E1tico el DataSET al hacer End()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42c27067$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
oDataSet:oDataSource :=3D nil
Posteriormente, al DataSet no hace falta destruirlo, yo lo har=E1 =
el recolector de basura.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c26d01@ozsrvnegro.ozlan.local...]42c26d01@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Entiendo tu planteamiento y lo veo correcto, pero no quiero ahora =
en concreto utilizar procesos, lo que pensaba era que al hacer END() del =
Dataset, el datasource hac=EDa un oDataSource:DelDataSet( oDataSet ) =
autom=E1ticamente, o por lo menos deber=EDa existir en el dataset una =
Property que fuera "lDelAutoDataSource" o algo por el estilo, o existir =
un m=E9todo Dataset:KillEnd() que lo "Borre" del datasource y destruya =
el Dataset.
Bueno, es s=F3lo una opini=F3n, con esto oDataSource:DelDataSet( =
oDataSet ) puesto manualmente por m=ED tambi=E9n me sirve.
Un Saludo y gracias,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje news:42c26362$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
De la documentaci=F3n:
Y para m=E1s abundamiento, tambi=E9n de la documentaci=F3n:
La propiedad 'cProcess' marca el proceso vinculado a la tabla. =
El TDataSource contiene todos los TDataset que se abierto a trav=E9s de =
=E9l, pero si lo desea puede adem=E1s distinguir entre TDataset dentro =
de un mismo TDataSource estableciendo nombres de proceso en el momento =
de su creaci=F3n. Por ejemplo, podr=EDa tener un =FAnico TDataSource =
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para las =
distintas operaciones a realizar, por ejemplo, el proceso de 'Facturas' =
necesita abrir 5 DataSets. Para asignarles el mismo proceso a los cinco =
puede indicarlo con el parametro 'cProcess', o bien establecer el nombre =
del proceso con el cual se abrir=E1n los nuevos DataSet con el m=E9todo =
DataSource:NewProcess( 'facturas' ). Una vez que tiene englobados varios =
TDataset en un mismo proceso puede manejarlos en bloque en operaciones =
de apertura, cierre y destrucci=F3n de los DataSet. Vea los m=E9todos =
OpenProcess(), CloseProcess(), y DelProcess() de TDataSource para m=E1s =
informaci=F3n. =20
El hecho de que se cierre la tabla no significa que se destruya =
el objeto, ni mush=EDsimo menos qu desaparezcan de aDataSets. Porque =
como podr=E1s comprobar se puede abrir de nuevo haciendo lOpen a .T. =20
De hecho es perfectamente normal y muy recomdable tener =
m=FAltiples procesos vinculados al DataSource e ir abriendo y cerrando =
uno u otro seg=FAn te convenga.
Si quieres destruir el objeto y hacerlo desaparecer del =
DataSource tienes el m=E9todo DelProcess() que viene perfectamente =
explicado en la documentaci=F3n.=20
Te recomiendo que te tomes el tiempo necesario para leer la =
documentaci=F3n existente sobre los Datacontols, que creo, =
efectivamente, es un tema importante y muy aconsejable de leer.
Saludos,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:42c25e69$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>=20
> Estoy intentando hacerlo todo con Datasource y Dataset, =
entonces para abrir
> una base escribo:
>=20
> oDbf:lOpen :=3D .t. y as=ED varias veces para 4 bases por =
ejemplo,
> efectivamente lOpen es .T. y las bases est=E1n abiertas, si =
quiero saber
> cuantas tengo uso
> len(oRdd:aDataSet) teniendo en cuenta que oRdd es mi =
Datasource creado al
> inicio, y cuando quiero cerrar todas las bases y destruir los =
datasets hago
> lo siguiente:
>=20
> aTotalDbfs :=3D aClone(::oRdd:aDataSet)
> aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) =
he probado con
> lopen:=3D.f., destroy(), End(), para estar seguro
>=20
> Y Aunque la base est=E1 cerrada, =A1existe en datasource!, es =
decir datasource
> sigue teniendo 4 dataset=B4s en aDataset y si los consulto =
puedo ver el alias
> y que lopen es .F., entonces =BFPara que sirve aDataset, si =
cuando cree y
> destuya 1200 veces una base va a tener una longitud de 1200 =
aunque haya 1
> activa solamente?
>=20
> Me parece que no est=E1 descontando las dataset=B4s que =
destru=EDmos, para m=ED lo
> veo un tema importante.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
>=20
>=20
>=20
>=20
>
------=_NextPart_001_000D_01C57CAA.37A4F810
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>>>oDataSet:oDataSource :=3D nil no hace que el array=20
oDataSOURCE:aDatasetÂtenga 1 elemento menos</DIV>
<DIV>Â</DIV>
<DIV>Lo has probado. Deber=EDa funcionar.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<DIV>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c27633@ozsrvnegro.ozlan.local">news:42c27633@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>no se si me explicado algo confuso, =
pero lo que=20
dices=20
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>oDataSet:oDataSource :=3D nil no hace que el array=20
oDataSOURCE:aDatasetÂtenga 1 elemento menos. que ser=EDa por =
eliminar el=20
oDataset que queremos destruir del sistema.</DIV>
<DIV>Â</DIV>
<DIV>Eso nada m=E1s lo haceÂoDataSOURCE:DelDataSet( oDataSet ), y =
mi idea=20
era que lo hiciese autom=E1tico el DataSET al hacer End()</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV></FONT></DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c27067$1@ozsrvnegro.ozlan.local">news:42c27067$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>oDataSet:oDataSource :=3D nil</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Posteriormente, Âal DataSet no hace falta destruirlo, yo =
lo har=E1=20
el recolector de basura.</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Saludos, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c26d01@ozsrvnegro.ozlan.local">news:42c26d01@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Entiendo tu planteamiento y lo =
veo correcto,=20
pero no quiero ahora en concreto utilizar procesos, lo que pensaba =
era que=20
al hacer END() del Dataset, el datasource hac=EDa un =
oDataSource:DelDataSet(=20
oDataSet ) autom=E1ticamente, o por lo menos deber=EDa existir en =
el dataset=20
una Property que fuera "lDelAutoDataSource" o algo por el estilo, =
o=20
existir un m=E9todo Dataset:KillEnd() que lo "Borre" del =
datasource y=20
destruya el Dataset.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Bueno, es s=F3lo una opini=F3n, =
con esto=20
oDataSource:DelDataSet( oDataSet ) puesto manualmente por m=ED =
tambi=E9n me=20
sirve.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Un Saludo y gracias,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c26362$1@ozsrvnegro.ozlan.local">news:42c26362$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>> inicio, y cuando quiero cerrar todas las bases y =
destruir los=20
datasets hago<BR>> lo siguiente:<BR></DIV>
<DIV>De la documentaci=F3n:</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000701c57c99$7419b710$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV>Y para m=E1s abundamiento, tambi=E9n de la =
documentaci=F3n:</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial">La=20
propiedad <B>'cProcess'</B> marca el proceso vinculado a la =
tabla. El <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
contiene todos los <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
que se abierto a trav=E9s de =E9l, pero si lo desea puede =
adem=E1s distinguir=20
entre <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
dentro de un mismo <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
estableciendo nombres de proceso en el momento de su creaci=F3n. =
Por=20
ejemplo, podr=EDa tener un =FAnico <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para toda la aplicaci=F3n, pero luego m=FAltiples procesos para =
las=20
distintas operaciones a realizar, por ejemplo, el proceso de =
'Facturas'=20
necesita abrir 5 DataSets. Para asignarles el mismo proceso a =
los cinco=20
puede indicarlo con el parametro <B>'cProcess'</B>, o bien =
establecer el=20
nombre del proceso con el cual se abrir=E1n los nuevos DataSet =
con el=20
m=E9todo DataSource:NewProcess( 'facturas' ). Una vez que tiene =
englobados=20
varios <A=20
=
href=3D"mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdataset.htm ">TDatas=
et</A>=20
en un mismo proceso puede manejarlos en bloque en operaciones de =
apertura, cierre y destrucci=F3n de los DataSet. Vea los =
m=E9todos=20
OpenProcess(), CloseProcess(), y DelProcess() de <A=20
=
href=3D" mk:@MSITStore:C:xailer2helpXailerEs.chm::/tdatasource.htm ">TDa=
taSource</A>=20
para m=E1s informaci=F3n.ÂÂ<BR></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>El hecho de que se cierre la tabla no =
significa que=20
se destruya el objeto, ni mush=EDsimo menos qu desaparezcan de =
aDataSets.=20
Porque como podr=E1s comprobar se puede abrir de nuevo haciendo =
lOpen a=20
.T. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>De hecho es perfectamente normal y muy =
recomdable=20
tener m=FAltiples procesos vinculados al DataSource e ir =
abriendo y=20
cerrando uno u otro seg=FAn te convenga.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Si quieres destruir el objeto y hacerlo =
desaparecer=20
del DataSource tienes el m=E9todo DelProcess() que viene =
perfectamente=20
explicado en la documentaci=F3n. </FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Te recomiendo que te tomes el tiempo =
necesario para=20
leer la documentaci=F3n existente sobre los Datacontols, que =
creo,=20
efectivamente, es un tema importante y muy aconsejable de=20
leer.</FONT></SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT></SPAN>Â</DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3>Saludos,</FONT> </SPAN></DIV>
<DIV><SPAN=20
style=3D"FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: =
Helvetica,Arial"><FONT=20
face=3DTahoma size=3D3></FONT>Â</DIV></SPAN>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c25e69$1@ozsrvnegro.ozlan.local">news:42c25e69$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>>=20
Hola,<BR>> <BR>> Estoy intentando hacerlo todo con =
Datasource y=20
Dataset, entonces para abrir<BR>> una base escribo:<BR>>=20
<BR>>ÂoDbf:lOpen :=3D .t. y as=ED varias veces para 4 =
bases por=20
ejemplo,<BR>> efectivamente lOpen es .T. y las bases est=E1n =
abiertas,=20
si quiero saber<BR>> cuantas tengo uso<BR>> =
len(oRdd:aDataSet)=20
teniendo en cuenta que oRdd es mi Datasource creado al<BR>> =
inicio, y=20
cuando quiero cerrar todas las bases y destruir los datasets=20
hago<BR>> lo siguiente:<BR>>=20
=
<BR> >ÂÂÂÂÂ&a mp;nbsp;ÂÂÂÂ&nbsp=
;ÂÂÂÂÂ&nbsp ;Â=20
aTotalDbfs :=3D=20
=
aClone(::oRdd:aDataSet)<BR> >ÂÂÂÂÂ&a mp;nbsp;Â=
ÂÂÂÂÂÂ ÂÂÂÂ=20
aeval( aTotalDbfs , { |oDbf| oDbf:End() } ) he probado =
con<BR>>=20
lopen:=3D.f., destroy(), End(), para estar seguro<BR>> =
<BR>> Y=20
Aunque la base est=E1 cerrada, =A1existe en datasource!, es =
decir=20
datasource<BR>> sigue teniendo 4 dataset=B4s en aDataset y si =
los=20
consulto puedo ver el alias<BR>> y que lopen es .F., entonces =
=BFPara=20
que sirve aDataset, si cuando cree y<BR>> destuya 1200 veces =
una base=20
va a tener una longitud de 1200 aunque haya 1<BR>> activa=20
solamente?<BR>> <BR>> Me parece que no est=E1 descontando =
las=20
dataset=B4s que destru=EDmos, para m=ED lo<BR>> veo un tema=20
importante.<BR>> <BR>> Un Saludo,<BR>> =
Joaqu=EDn<BR>> <BR>>=20
<BR>> <BR>> <BR>> <BR>> <BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY ></HTML>
------=_NextPart_001_000D_01C57CAA.37A4F810--
------=_NextPart_000_000C_01C57CAA.37A4F810
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000701c57c99$7419b710$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAgEAAAEpCAMAAAA9LwGVAAAAB3RJTUUH1QYd CDERAeorJgAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAhUExURf///wAA /+zp2KyomQAAAMDA
wAAAZszMzGZmZgAzZv/MAK6XzpkAAAqoSURBVHja7Z2LmqMoEEZxl0z3zvs/ 8HYnKlVFgWgSo3LO
fJPIRa6/BSqhww36Jny6APBhUEDvoIDeQQG9gwJ6BwX0Dgq4OsGQhd8/o0S5 /VR979oZT6ESXpvF
Ul2uTvijWK0At9lc37e1tEl4uwL61MDTCnBaLe6qAFsWFLCO8Odu/L9+/oWv r5IC7ogWmg/dZivJ
IhbPeAJ57U/qXJtApS7XJ/z5+iXcP9crQLeftA/aU0e8iVNMOuJCFpKRGZt0 VGA5fTMJydOZj0TW
OoViSbJ5yKmk9BgFfiyBPwr8XVLALephQSrAGmfdLP7oLbtdJXLT3jLjm03X T7+aTlaV7JxqSXQ9
T6WB8Of7+/u3+8PP97dVwN8VCpi6Q7Vg6iPbLoXR2yqg3Lolm2/jymjldFSK Jmv/JD/t3DIdnZ9R
IIx24AejgL+tCsiuy3KnmlG3ooAslm7xrCTaR6evko9+Z5kS5SkUSmLTLpTr qPzOA8b7gK9vMw/4
26wA7TC1z8xooZ1N/930981v3ZICTPrK/mR6LVkjk0KhJDbt0/T9g7sNCKMJ 0Dbg70oFWLOoPYtx
mhQgTs4SNDVy01fnZQOEDc0rViuJm/an+7WdHwV8f3/dLcC3tQH//dCqAGdg LMyKomnQXRSQ2R/P
pVNsVsDpZ4JFG/AIt03rH6bLQbfh7GnP2KiArPx5W/sKuM19Y9OxCTQqIC9G ntEpCOPF780D7uFu
tev95/VizBt08zzAtn06VGUww3lyNCtgcR5gzou+49g8bMDE1meCywpYmGJX bg3yGX1mkOcDHSk2
FbCkgNq9gErBKv12uxXUekja3gvYSolx0G9ufctUmHLXnSYnz1EqSzlBf+Au K6CSeTntkymg6e1w
RQHW46auRrePnb51IpusMkfhzFwZFZfXV3nWcbkkBccVWFKA8rEWX3nmM6Tc 5V1CXjZucbJiVnLz
08ncbSmc/pFAFdYI9Q4K6B0U0DsooHdQQO+ggN5BAb2DAnonAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AAAAAAAAAMDFiTHev1aepb7Wn9jguSqn4cHjuxZnRaleFWd9I+1K3FbEdgXE qnM5mdgaedAfwlMe
Dl7Qyt7ddrUclLixjIdWgN/NKKBeurstiA+L8Pg3jQ9BhsQ5eozqrF93TCZl Pnc8U8ZJrphlXsx0
jmISTM1rFHC3+A+zP36mmCkoL1WYKyGqq+LIEoyNdffVZ7lVlvWJthbu164K mKow/U/BMmRukRDV
Weqk/NylOMUTvZyc2FYBg/pKmggqKARbqkJ13ZLLxoqmhm6VZctlycVSQ+yv AOFtmsTzWSp/3mHi
y808eJkWFTCTjwKimycfoYjBzafFx9FgVspimxZr4bp2VkCMSq9RmvJYqoff u+LccgNKs+t62otJ
lULH9kaBqZvlPcAw3xNYBWRF9qxCKoFTGFuRlQqIenjZVQFRlcT8zwrfogCd Q9VAVDxzG1As2/Io
oIKCawOCl3Mex7dw62yibwNSAXZTQO0SDWH5otDX6OpRoN1cVm2wUcDU5UN2 aMWx2N+bR4Fye8RC
GsXWebsE0hMhY3/GaWzIQ+YRQljiNOk1xlzF8Sfyrmeac+uc6vcCs8X/fTw0 DfzDPC5MkcIYFLwi
h2zQ03EcY+2NAoX2SPc2DfcCO4ngVbyzuCdrig4qsnflFtIeNnG1Rvo476vc Tk9H9uA6NQEAAAAA
AAAAAAAAAAAAAACAU/APXBwU0Dn/Livg3x3YJRPI+Wn4BgXsMdbskQnkoIDe QQG9gwJ6BwX0TqsC
4sjbfplzV8CUiSFWnfAUK2zA/PPfNxUk5H0bxaf1hdewWgHvK0ho7WsU8Eo2 2YAo9sJ6VXcYBXgb
cpktCB6en27A07NRAWlztFdJQM8D/K1K8m03EMDTbLUBb1LA5DLb5tS2lYHn OKgC5P4ovlWYPeE5
jqqA0LyVEjzHweYBk8t0tNf12IDXcLB7gfmJkNqQKzf/whOeY9NT4XdMwXkq /CFQQO+ggN7h3WDv
oIDeaVIAXJkmG7DPklX4BIwCvYMCegcF9A4K6B0U0DvNCvBX8YaXPSD0FFDM E17HCgUEt7crPbSq
73wFhPc8gobE0woos67rkgKiTmFNMohlPRsUkN7gR/W63qwaGH9foiJVenNS gE4izEtSUjImOVsO
WMd6BaReCdIRs5VDpg8XVhQ9FDCGy2UoNhmTnBSISAFa2TITlA0uHKX/qa9i tSBB/uW+OW21Viio
jEWqMm0ksIp1NuCOupzd616rQgVUChKC6l2Zp68Aaf+FPD/dpCdjvQIKnZuv Hs4ihZoZUPOANgWE
OXQ2A/T/at6kgK3zgHsGZjlq8PPy5gH0/3o2jQJq4hWdHlcjxLp7gZSHtQEt 9wKwGp4K9w4K6B0U
0DsooHdQQO+ggN45lgJYELA/B1PA/RAJ7AkK6J2DKuCxO4B6meB++YdpozGR Ds+MfY6qgNq+MWI/
ieAdyp1HtBNyDqaAeUFACGavINc1EbMvrRL2GylzMAVMLkcBensZETndPuio cxz2HatxHgWkqNVR
IA/Q6YDhHApYmAdE1/zLNFBAkQMroP1eQA4I6UuMAtiAMsdSAOwPCugdFNA7 KKB3UEDvoIDeYTe5
7mE3uc5hFOgdFNA7KKB3UEDvoIDeaf/L0/djuVWH97Jt+3Jvu06Qd3k78XIF 2JDWjhQ/UUcBe7J9
N7k2BTQbhNEGpNUdKGAfntlNTh5LG5Ft7CBjxcJfqkMBH+K53eTs1kHLW8tk e86lggTR9yhgN9rv
BdK+Pv4GcnNQfYsp97SAAj7GBgWUNo4cw9IgsEkBIaKAXVmvgNoGcnb3OBRw fFb93eHJBDw3D1hQ
wDTZQAH7sF4Bajc5u6GzFEl2rA2Efy8QwjwPYC+BXeCpcO+ggN5BAb2DAnoH BfQOa4W75yhrheFz
NJgJuDSfHogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
AOAZhgeP71qcTxcU3segP4SnPEQC10V0/qA95SEKuC5GAXeL/zD742eKObt/ o4Q5XmCUODVaAYP6
SpoINmjII8M5yUeBIXXo5KMuftvtKODc5KPApAB5DzDUFMDNwqlZGgUKQcYG wHnRd4NmhF9WAPOA
0zMb/LGrh6nrx8MUlr7EOCG+AOB0DK/j01UBAAAAgHVUZnFDswtOTPO7XxRw UVBA74hnvmldgHgX
OD30q7mQw5lJCsjeBqh3AEPFhUU4M/NM0F0B4L4HzN8QwYmRCwAcBaS3QHrt QApjFDg5CwpQYcWL
HwmcGFcBgz8KuBMA5gEnRymgci9gFwyosE9XAl4MPdoRLA4AB/oTAACgD/TP w4ZyBLgo6VcCId9F
wHHC1VAKeByaCJ8uIbyX8Smfv3UAKwE6QCjA/UEgKwGuzpC6v/iTUFYCXBmp ALMYINcEo8AFMTYg
1BQQsAMXpHLFsxKgC9QSwWkRQL4ugHsBgGvCSgAAAACAbmF+1zvDxjC4Ciig d+QqMbOBAM8Du2Ca
B4h1IvKHg7wTuDzid4PDwjsiuCRGAXqHgMDagOuT24DgKiBgBy6KXiO8tFIA rkd6IqQ2EJgnhNwL
AFwa1gYAAAAAAAAAXJr/AUQ3nGF3E0ZbAAAAAElFTkSuQmCC
------=_NextPart_000_000C_01C57CAA.37A4F810--

Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder