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.

Ayuda con TMemDataSet

Foro público de Xailer en español
Responder
Elias
Mensajes: 15
Registrado: Sab Jun 21, 2008 11:12 pm

Ayuda con TMemDataSet

Mensaje por Elias »

No me explico que estoy haciendo mal, me estoy basando en ejemplo DBFdata6
para desarrollar una aplicación.
Estoy utilizando un TMemDataSet para mostrar y capturar los integrantes del
grupo que comanda un socio. todo funciona bien miestras se esta capturando
la información, pero al momento de grabar los datos el objecto "TMemDataSet"
se encuentra vacio cuando este ya contenia información. les muestro parte
del codigo a ver quien puede decirme por donde va los tiros.
Este es mi browse que muestra los socios registrados.
//---------------------------------------------------------- ----
CLASS TFrmSocios FROM TFormFolder
METHOD SaveGrupo( oMemGrupo )
METHOD MantenAlta( oSender )
...
...
ENDCLASS
//---------------------------------------------------------- ----
METHOD MantenAlta( oSender ) CLASS TFrmSocios
WITH OBJECT TFrmSociEdi() <- Aqui llamo al procedimiento de
altas o modificaciones
:lOnAppend := .T.
:New( Application:oMainForm )
...
...
:RequestState()
IF :ShowModal() == mrOK
IF :lGrupoChanged
::SaveGrupo( :oMemGrupo ) <- Regresa vacio ":oMemGrupo"
ENDIF
ELSE
::oDbfSocios:Cancel()
ENDIF
END WITH
RETURN NIL
//---------------------------------------------------------- ----
Este es el procedimiento para modificar o dar de alta el socio
CLASS TFrmSociEdi FROM TForm
COMPONENT oBrwGrupo <- Declaro el browse que
mostrara a los
integrantes del grupo
COMPONENT oMemGrupo <- Declaro el TMemDataSet
METHOD FormInitialize( oSender ) <- Creo el TMemDataSet
METHOD btnGrupoAddClick( oSender ) <- Agrego a los
integrantes del grupo
...
...
ENDCLASS
//---------------------------------------------------------- ----
METHOD FormInitialize( oSender ) CLASS TFrmSociEdi
// Genero la estructura del Browse - Grupos
WITH OBJECT ::oMemGrupo
:GetStructFrom( { { "GRU_SDG", "C", 07, 0 } ,;
{ "SOC_NOM", "C", 60, 0 } } )
:lOpen := .T.
END WITH
// Recogo todos los Integrantes del Grupo
WITH OBJECT ::oDbfGrupo
:OrdSetFocus( "GRU_GRU" )
IF !::lOnAppend .and. :Seek( ::oSoc_Id:Value )
::oDbfSoc:SaveState( .T. )
::oDbfSoc:OrdSetFocus( "CLAVE" )
DO WHILE ::oSoc_Id:Value == :Gru_Soc .and. !:Eof()
WITH OBJECT ::oMemGrupo
:Append()
IF ::oDbfSoc:Seek( ::oDbfGrupo:Gru_Sdg )
::oMemGrupo:Soc_Nom := ::oDbfSoc:Soc_Nom
ENDIF
:SaveFrom( ::oDbfGrupo )
END WITH
:Skip()
ENDDO
::oDbfSoc:RestoreState( .T. )
ENDIF
END WITH
::oMemGrupo:GoTop()
::oBrwGrupo:Refresh( .T. )
::oBrwGrupo:BookMark( 1 )
RETURN Nil
//---------------------------------------------------------- ----
METHOD btnGrupoAddClick( oSender ) CLASS TFrmSociEdi
WITH OBJECT TFrmGrupos():New( Self )
:cText := "Alta de grupos"
:cSocio_Id := ::oSoc_Id:Value
::oMemGrupo:AddNew()
:RequestState()
IF :ShowModal() == mrOK
::oMemGrupo:Soc_Nom := :oName_SocGrupal:Value
::oMemGrupo:Update()
::lGrupoChanged := .T. <- En este punto, dentro
del inspector de
objectos puedo ver
::RequestState() que el "TMemDataSet"
oMemGrupo contiene
informacion, pero
ELSE al regresar al
Metodo "MantenAlta"
desde donde fue
llamado
::oMemGrupo:Cancel() este ya va vacio.
ENDIF
:End()
END WITH
RETURN Nil
//---------------------------------------------------------- ----
Agradecere cualquier ayuda que puedan darme.
Hugo Navarro
Mensajes: 159
Registrado: Mié Jul 23, 2008 2:53 am

Ayuda con TMemDataSet

Mensaje por Hugo Navarro »

Hola Andrade
Sobre el ejemplo DBFData6, este no guarda las delegagiones añadidas.
Checalo.
Le realize un pequeño cambio al metodo;
METHOD SaveDeleg( oMemDeleg ) CLASS TFrmClientes
LOCAL oRow
WITH OBJECT ::oDbfDeleg
:OrdSetFocus( "CODIGO" )
DO WHILE :Seek( ::oDbf:Codigo )
:Delete()
ENDDO
IF oMemDeleg != NIL
oMemDeleg:GoTop()
DO WHILE !oMemDeleg:Eof()
IF :Append()
:SaveFrom( oMemDeleg )
// Le añadi esta linea
:CODCLI := ::oDbf:Codigo
:RecUnLock()
ENDIF
oMemDeleg:Skip()
ENDDO
ENDIF
END WITH
RETURN NIL
Espero que te sea de utilidad.
Me paso lo mismo, ya esta funcionando bien mi aplicacion.
Saludos...
"Andrade" <tecnicom_2000@yahoo.com> escribió en el mensaje
news:48fac699$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>
> No me explico que estoy haciendo mal, me estoy basando en ejemplo DBFdata6
> para desarrollar una aplicación.
> Estoy utilizando un TMemDataSet para mostrar y capturar los integrantes
> del
> grupo que comanda un socio. todo funciona bien miestras se esta capturando
> la información, pero al momento de grabar los datos el objecto
> "TMemDataSet"
> se encuentra vacio cuando este ya contenia información. les muestro parte
> del codigo a ver quien puede decirme por donde va los tiros.
>
> Este es mi browse que muestra los socios registrados.
>
> //---------------------------------------------------------- ----
> CLASS TFrmSocios FROM TFormFolder
>
> METHOD SaveGrupo( oMemGrupo )
> METHOD MantenAlta( oSender )
> ...
> ...
> ENDCLASS
>
> //---------------------------------------------------------- ----
>
> METHOD MantenAlta( oSender ) CLASS TFrmSocios
>
> WITH OBJECT TFrmSociEdi() <- Aqui llamo al procedimiento de
> altas o modificaciones
> :lOnAppend := .T.
> :New( Application:oMainForm )
> ...
> ...
> :RequestState()
>
> IF :ShowModal() == mrOK
> IF :lGrupoChanged
> ::SaveGrupo( :oMemGrupo ) <- Regresa vacio ":oMemGrupo"
> ENDIF
> ELSE
> ::oDbfSocios:Cancel()
> ENDIF
>
> END WITH
>
> RETURN NIL
>
> //---------------------------------------------------------- ----
>
> Este es el procedimiento para modificar o dar de alta el socio
>
> CLASS TFrmSociEdi FROM TForm
>
> COMPONENT oBrwGrupo <- Declaro el browse que
> mostrara a los
> integrantes del grupo
> COMPONENT oMemGrupo <- Declaro el TMemDataSet
> METHOD FormInitialize( oSender ) <- Creo el TMemDataSet
> METHOD btnGrupoAddClick( oSender ) <- Agrego a los
> integrantes del grupo
> ...
> ...
> ENDCLASS
>
> //---------------------------------------------------------- ----
>
> METHOD FormInitialize( oSender ) CLASS TFrmSociEdi
>
> // Genero la estructura del Browse - Grupos
>
> WITH OBJECT ::oMemGrupo
> :GetStructFrom( { { "GRU_SDG", "C", 07, 0 } ,;
> { "SOC_NOM", "C", 60, 0 } } )
> :lOpen := .T.
> END WITH
>
> // Recogo todos los Integrantes del Grupo
>
> WITH OBJECT ::oDbfGrupo
> :OrdSetFocus( "GRU_GRU" )
> IF !::lOnAppend .and. :Seek( ::oSoc_Id:Value )
> ::oDbfSoc:SaveState( .T. )
> ::oDbfSoc:OrdSetFocus( "CLAVE" )
> DO WHILE ::oSoc_Id:Value == :Gru_Soc .and. !:Eof()
> WITH OBJECT ::oMemGrupo
> :Append()
> IF ::oDbfSoc:Seek( ::oDbfGrupo:Gru_Sdg )
> ::oMemGrupo:Soc_Nom := ::oDbfSoc:Soc_Nom
> ENDIF
> :SaveFrom( ::oDbfGrupo )
> END WITH
> :Skip()
> ENDDO
> ::oDbfSoc:RestoreState( .T. )
> ENDIF
> END WITH
>
> ::oMemGrupo:GoTop()
> ::oBrwGrupo:Refresh( .T. )
> ::oBrwGrupo:BookMark( 1 )
>
> RETURN Nil
>
> //---------------------------------------------------------- ----
>
> METHOD btnGrupoAddClick( oSender ) CLASS TFrmSociEdi
>
> WITH OBJECT TFrmGrupos():New( Self )
>
> :cText := "Alta de grupos"
> :cSocio_Id := ::oSoc_Id:Value
>
> ::oMemGrupo:AddNew()
>
> :RequestState()
>
> IF :ShowModal() == mrOK
> ::oMemGrupo:Soc_Nom := :oName_SocGrupal:Value
> ::oMemGrupo:Update()
> ::lGrupoChanged := .T. <- En este punto, dentro
> del inspector de
> objectos puedo ver
> ::RequestState() que el "TMemDataSet"
> oMemGrupo contiene
> informacion, pero
> ELSE al regresar al
> Metodo "MantenAlta"
> desde donde fue
> llamado
> ::oMemGrupo:Cancel() este ya va vacio.
> ENDIF
>
> :End()
>
> END WITH
>
> RETURN Nil
>
> //---------------------------------------------------------- ----
>
> Agradecere cualquier ayuda que puedan darme.
>
Responder