Página 1 de 1

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 10:40 am
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

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 11:01 am
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

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 11:42 am
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

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 11:56 am
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

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 12:21 pm
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

Gran problema con los DataSources

Publicado: Mié Jun 29, 2005 12:58 pm
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