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.

Modificación de registros

Foro público de Xailer en español
Responder
macrosy
Mensajes: 12
Registrado: Mié Ago 09, 2006 9:11 pm

Modificación de registros

Mensaje por macrosy »

Hola Foro:
Tengo un form como el que adjunto en la imágen, cuando doy click en el
séptimo boton "Modificar registro" de la toolbar se dispara el evento
onClick el cual ejecuta el siguiente METODO:
METHOD Modificar( oSender ) CLASS TRamos
::oBrowseRamos:lEnabled := .F.
::oDetalle:lEnabled := .T.
::oDetalle:SetFocus()
::oRamos:Edit()
if MsgYesNo("¿Confirma modificación?")
::oRamos:Update()
::oBrowseRamos:RefreshCurrent()
else
::oRamos:Cancel()
endif
::oDetalle:lEnabled := .F.
::oBrowseRamos:lEnabled := .T.
::oBrowseRamos:SetFocus()
Return Nil
y se me presentan los siguientes problemas:
1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
mientras que oNroRamo y oDetalle permanecen con los datos del registro
anterior.
2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
programa se va directamente a la pregunta, sin pasar por la edicion de
oDetalle.
3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
"Se ha modificado la fila en curso después de la edición, 'Update'
cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
¿Alguna sugerencia sobre qué estoy haciendo mal?
Muchas gracias
Daniel.
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Daniel,
> 1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
> mientras que oNroRamo y oDetalle permanecen con los datos del registro
> anterior.
Ni idea de porque avanza un registro, no debería hacerlo. Por favor mande un
ejemplo para verlo más claramente.
> 2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
> programa se va directamente a la pregunta, sin pasar por la edicion de
> oDetalle.
El método Edit() no es modal, y por tanto sigue la ejecución del programa.
Lo más sencillo es que realice la captura de datos en otro diálogo modal, o
bien coloque dos botones en el formulario para hacer el Update y Cancel
respectivamente. Obviamente dichos controles deberían estar deshabilitados
mientras que NO esté en edición.
> 3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
>
> "Se ha modificado la fila en curso después de la edición, 'Update'
> cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
Esto es debido a que después de entrar en edición de un registro se ha
cambiado el RECNO de la tabla. Tiene que ver que con lo que indica de que
avanza un registro en su primera pregunta, pero sin un ejemplo no sabría
decirle porque ocurre.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Daniel Du Pré" <macrosy@adinet.com.uy> escribió en el mensaje
news:[email=44f7ac3c@news.xailer.com...]44f7ac3c@news.xailer.com...[/email]
> Hola Foro:
>
> Tengo un form como el que adjunto en la imágen, cuando doy click en el
> séptimo boton "Modificar registro" de la toolbar se dispara el evento
> onClick el cual ejecuta el siguiente METODO:
>
> METHOD Modificar( oSender ) CLASS TRamos
>
> ::oBrowseRamos:lEnabled := .F.
> ::oDetalle:lEnabled := .T.
> ::oDetalle:SetFocus()
> ::oRamos:Edit()
>
> if MsgYesNo("¿Confirma modificación?")
> ::oRamos:Update()
> ::oBrowseRamos:RefreshCurrent()
> else
> ::oRamos:Cancel()
> endif
>
> ::oDetalle:lEnabled := .F.
> ::oBrowseRamos:lEnabled := .T.
> ::oBrowseRamos:SetFocus()
>
> Return Nil
>
> y se me presentan los siguientes problemas:
>
> 1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
> mientras que oNroRamo y oDetalle permanecen con los datos del registro
> anterior.
>
> 2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
> programa se va directamente a la pregunta, sin pasar por la edicion de
> oDetalle.
>
> 3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
>
> "Se ha modificado la fila en curso después de la edición, 'Update'
> cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
>
>
> ¿Alguna sugerencia sobre qué estoy haciendo mal?
>
> Muchas gracias
> Daniel.
>
>
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
macrosy
Mensajes: 12
Registrado: Mié Ago 09, 2006 9:11 pm

Modificación de registros

Mensaje por macrosy »

Ignacio
1) Se producí­a por corrupción de í­ndices, ya quedo arreglado.
2) Intento realizar la captura de datos desde otro dialogo (guiándome en
el ejemplo "TDBFdata2" de Xailer) pero no logro realizar el alta y la
modificación.
Le adjunto un pequeño ejemplo para que pueda ver el error que me da, al
intentar agregar o modificar un registro. Aparentemente tengo un
problema en el Método "FirstCreate" que está en el form1.prg pero no
logro darme cuenta cual es.
Le pido disculpas por las molestias y agradezco mucho su ayuda.
Saludos
Daniel.
Ignacio Ortiz de Zúñiga escribió:
> Daniel,
>
>> 1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
>> mientras que oNroRamo y oDetalle permanecen con los datos del registro
>> anterior.
>
> Ni idea de porque avanza un registro, no deberí­a hacerlo. Por favor mande un
> ejemplo para verlo más claramente.
>
>> 2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
>> programa se va directamente a la pregunta, sin pasar por la edicion de
>> oDetalle.
>
> El método Edit() no es modal, y por tanto sigue la ejecución del programa.
> Lo más sencillo es que realice la captura de datos en otro diálogo modal, o
> bien coloque dos botones en el formulario para hacer el Update y Cancel
> respectivamente. Obviamente dichos controles deberí­an estar deshabilitados
> mientras que NO esté en edición.
>
>> 3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
>>
>> "Se ha modificado la fila en curso después de la edición, 'Update'
>> cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
>
> Esto es debido a que después de entrar en edición de un registro se ha
> cambiado el RECNO de la tabla. Tiene que ver que con lo que indica de que
> avanza un registro en su primera pregunta, pero sin un ejemplo no sabrí­a
> decirle porque ocurre.
>
> Un saludo,
--
macrosy
Mensajes: 12
Registrado: Mié Ago 09, 2006 9:11 pm

Modificación de registros

Mensaje por macrosy »

Ignacio:
El problema en el alta y modificación pude resolverlo, efectivamente
estaba mal formulado el método FirstCreate.
Ahora intento validar el campo nroramo para que no se repita en la tabla
y para eso creo que los mas correcto es utilizar el evento OnExit dado
que interpreto que su funcionamiento serí­a análogo a la cláusula VALID
del comando GET de Clipper.
¿Los DataSet son locales a los .prg donde están definidos?
¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
definido en TPrueba1?
Gracias
Daniel.
Daniel Du Pré escribió:
> Ignacio
>
> 1) Se producí­a por corrupción de í­ndices, ya quedo arreglado.
>
> 2) Intento realizar la captura de datos desde otro dialogo (guiándome en
> el ejemplo "TDBFdata2" de Xailer) pero no logro realizar el alta y la
> modificación.
>
> Le adjunto un pequeño ejemplo para que pueda ver el error que me da, al
> intentar agregar o modificar un registro. Aparentemente tengo un
> problema en el Método "FirstCreate" que está en el form1.prg pero no
> logro darme cuenta cual es.
>
> Le pido disculpas por las molestias y agradezco mucho su ayuda.
>
> Saludos
> Daniel.
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Daniel,
>>
>>> 1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
>>> mientras que oNroRamo y oDetalle permanecen con los datos del registro
>>> anterior.
>>
>> Ni idea de porque avanza un registro, no deberí­a hacerlo. Por favor
>> mande un ejemplo para verlo más claramente.
>>
>>> 2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
>>> programa se va directamente a la pregunta, sin pasar por la edicion de
>>> oDetalle.
>>
>> El método Edit() no es modal, y por tanto sigue la ejecución del
>> programa. Lo más sencillo es que realice la captura de datos en otro
>> diálogo modal, o bien coloque dos botones en el formulario para hacer
>> el Update y Cancel respectivamente. Obviamente dichos controles
>> deberí­an estar deshabilitados mientras que NO esté en edición.
>>
>>> 3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
>>>
>>> "Se ha modificado la fila en curso después de la edición, 'Update'
>>> cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
>>
>> Esto es debido a que después de entrar en edición de un registro se ha
>> cambiado el RECNO de la tabla. Tiene que ver que con lo que indica de
>> que avanza un registro en su primera pregunta, pero sin un ejemplo no
>> sabrí­a decirle porque ocurre.
>>
>> Un saludo,
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Daniel,
> que interpreto que su funcionamiento sería análogo a la cláusula VALID
> del comando GET de Clipper.
Si, algo similiar, pero no complemente igual. Pues nadie le puede asegurar
que el usuario se salte completamente ese campo en la edición. En mi
opinión, además de validar en OnExit hay que validar también antes del
Save().
> ¿Los DataSet son locales a los .prg donde están definidos?
Actualmente y en modo diseño, tanto los datasets como los datasources
pertenecen a un formulario. No obstante en un futuro próximo será posible
tener dichos controles como globales para toda la aplicación. Sin embargo,
por código siempre es posible crear Datasources y DataSets que puedan ser
utilizados por toda la aplicación, en dicho caso, el único inconveniente es
que tendrá que asignar el dataset a todos los datacontrols de un form a
traves de su evento OnCreate, como se muestra en el ejemplo
samplesDatacontrolsDbfData2
> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
> definido en TPrueba1?
Ya respondido.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Daniel Du Pré" <macrosy@adinet.com.uy> escribió en el mensaje
news:[email=44fb895f@news.xailer.com...]44fb895f@news.xailer.com...[/email]
> Ignacio:
>
> El problema en el alta y modificación pude resolverlo, efectivamente
> estaba mal formulado el método FirstCreate.
>
> Ahora intento validar el campo nroramo para que no se repita en la tabla
> y para eso creo que los mas correcto es utilizar el evento OnExit dado
> que interpreto que su funcionamiento sería análogo a la cláusula VALID
> del comando GET de Clipper.
>
> ¿Los DataSet son locales a los .prg donde están definidos?
>
> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
> definido en TPrueba1?
>
>
> Gracias
> Daniel.
>
>
> Daniel Du Pré escribió:
>> Ignacio
>>
>> 1) Se producía por corrupción de índices, ya quedo arreglado.
>>
>> 2) Intento realizar la captura de datos desde otro dialogo (guiándome en
>> el ejemplo "TDBFdata2" de Xailer) pero no logro realizar el alta y la
>> modificación.
>>
>> Le adjunto un pequeño ejemplo para que pueda ver el error que me da, al
>> intentar agregar o modificar un registro. Aparentemente tengo un
>> problema en el Método "FirstCreate" que está en el form1.prg pero no
>> logro darme cuenta cual es.
>>
>> Le pido disculpas por las molestias y agradezco mucho su ayuda.
>>
>> Saludos
>> Daniel.
>>
>>
>> Ignacio Ortiz de Zúñiga escribió:
>>> Daniel,
>>>
>>>> 1) ¿Por qué al dar click en dicho botón el Browse avanza un registro,
>>>> mientras que oNroRamo y oDetalle permanecen con los datos del registro
>>>> anterior.
>>>
>>> Ni idea de porque avanza un registro, no debería hacerlo. Por favor
>>> mande un ejemplo para verlo más claramente.
>>>
>>>> 2)Pretendiendo dejar modificar solo oDetalle lo que sucede es que el
>>>> programa se va directamente a la pregunta, sin pasar por la edicion de
>>>> oDetalle.
>>>
>>> El método Edit() no es modal, y por tanto sigue la ejecución del
>>> programa. Lo más sencillo es que realice la captura de datos en otro
>>> diálogo modal, o bien coloque dos botones en el formulario para hacer
>>> el Update y Cancel respectivamente. Obviamente dichos controles
>>> deberían estar deshabilitados mientras que NO esté en edición.
>>>
>>>> 3)Si a la pregunta le doy click en el boton "aceptar" sale el mensaje:
>>>>
>>>> "Se ha modificado la fila en curso después de la edición, 'Update'
>>>> cancelado [#0] En procedimiento TRAMOS:MODIFICAR linea: 174
>>>
>>> Esto es debido a que después de entrar en edición de un registro se ha
>>> cambiado el RECNO de la tabla. Tiene que ver que con lo que indica de
>>> que avanza un registro en su primera pregunta, pero sin un ejemplo no
>>> sabría decirle porque ocurre.
>>>
>>> Un saludo,
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
macrosy
Mensajes: 12
Registrado: Mié Ago 09, 2006 9:11 pm

Modificación de registros

Mensaje por macrosy »

Ignacio
Como le comente anteriormente estoy ayudándome con el ejemplo "DbfData2"
y utilicé el método onCreate de la siguiente manera
METHOD FirstCreate( oSender ) CLASS TAMRamos
oSender:oDataSet := ::oParent:oRamos
// Entiendo que aquí­ es donde se asigna el DataSet a este form.
RETURN Nil
Luego creo el siguiente método para que se ejecute en el evento onExit
del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
siguiente error:
TAMRAMOS:NRORAMOEXIT(39)
Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
Argumentos: ()
METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
if ::oRamos:seek(str(oSender:Value,4)) //oRamos es el
nombre que di // al TDbfDataset del //formulario donde
esta creado
MsgInfo('Ya existe Ramo con ese nro.')
Return .F.
endif
RETURN Nil
¿Que es lo que estoy haciendo mal?
Muchas Gracias
Daniel.
Ignacio Ortiz de Zúñiga escribió:
> Daniel,
>
>> que interpreto que su funcionamiento serí­a análogo a la cláusula VALID
>> del comando GET de Clipper.
>
> Si, algo similiar, pero no complemente igual. Pues nadie le puede asegurar
> que el usuario se salte completamente ese campo en la edición. En mi
> opinión, además de validar en OnExit hay que validar también antes del
> Save().
>
>> ¿Los DataSet son locales a los .prg donde están definidos?
>
> Actualmente y en modo diseño, tanto los datasets como los datasources
> pertenecen a un formulario. No obstante en un futuro próximo será posible
> tener dichos controles como globales para toda la aplicación. Sin embargo,
> por código siempre es posible crear Datasources y DataSets que puedan ser
> utilizados por toda la aplicación, en dicho caso, el único inconveniente es
> que tendrá que asignar el dataset a todos los datacontrols de un form a
> traves de su evento OnCreate, como se muestra en el ejemplo
> samplesDatacontrolsDbfData2
>
>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
>> definido en TPrueba1?
>
> Ya respondido.
>
> Un saludo,
>
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Modificación de registros

Mensaje por zeasoftware »

oRamos no existe en tu Actual clase si no en la clase Padre.
> METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
>
> if ::oParent:oRamos:seek(str(oSender:Value,4)) //oRamos es el
> nombre que di // al TDbfDataset del //formulario donde
> esta creado
>
> MsgInfo('Ya existe Ramo con ese nro.')
> Return .F.
> endif
>
> RETURN Nil
Espero te sirva.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com

http://www.paginasprodigy.com/zeasoft/
"Daniel Du Pré" <macrosy@adinet.com.uy> escribió en el mensaje news:[email=44fc7812@news.xailer.com...]44fc7812@news.xailer.com...[/email]
> Ignacio
>
> Como le comente anteriormente estoy ayudándome con el ejemplo "DbfData2"
> y utilicé el método onCreate de la siguiente manera
>
> METHOD FirstCreate( oSender ) CLASS TAMRamos
>
> oSender:oDataSet := ::oParent:oRamos
>
> // Entiendo que aquí­ es donde se asigna el DataSet a este form.
>
> RETURN Nil
>
>
> Luego creo el siguiente método para que se ejecute en el evento onExit
> del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
> siguiente error:
>
> TAMRAMOS:NRORAMOEXIT(39)
> Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
> Argumentos: ()
>
>
>
> ¿Que es lo que estoy haciendo mal?
>
>
> Muchas Gracias
> Daniel.
>
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Daniel,
>>
>>> que interpreto que su funcionamiento serí­a análogo a la cláusula VALID
>>> del comando GET de Clipper.
>>
>> Si, algo similiar, pero no complemente igual. Pues nadie le puede asegurar
>> que el usuario se salte completamente ese campo en la edición. En mi
>> opinión, además de validar en OnExit hay que validar también antes del
>> Save().
>>
>>> ¿Los DataSet son locales a los .prg donde están definidos?
>>
>> Actualmente y en modo diseño, tanto los datasets como los datasources
>> pertenecen a un formulario. No obstante en un futuro próximo será posible
>> tener dichos controles como globales para toda la aplicación. Sin embargo,
>> por código siempre es posible crear Datasources y DataSets que puedan ser
>> utilizados por toda la aplicación, en dicho caso, el único inconveniente es
>> que tendrá que asignar el dataset a todos los datacontrols de un form a
>> traves de su evento OnCreate, como se muestra en el ejemplo
>> samplesDatacontrolsDbfData2
>>
>>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
>>> definido en TPrueba1?
>>
>> Ya respondido.
>>
>> Un saludo,
>>
--
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Modificación de registros

Mensaje por ddupre »

Ramón
Muchas gracias, lo probé y funcionó perfectamente.
Aunque para ser sincero no me queda claro cual es el alcance de la linea
que esta puesta en el método "FirsCreate", ¿alguien puede explicarme?
Desde ya muchas gracias.
Daniel.
Ramón Zea escribió:
> oRamos no existe en tu Actual clase si no en la clase Padre.
>
> > METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
> >
> > if ::*oParent:*oRamos:seek(str(oSender:Value,4)) //oRamos es el
> > nombre que di // al TDbfDataset del //formulario donde
> > esta creado
> >
> > MsgInfo('Ya existe Ramo con ese nro.')
> > Return ..F.
> > endif
> >
> > RETURN Nil
>
> Espero te sirva.
>
> --
> Ramón Zea
> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>
> http://www.paginasprodigy.com/zeasoft/
> "Daniel Du Pré" <macrosy@adinet.com.uy <mailto:macrosy@adinet.com.uy>>
> escribió en el mensaje news:[email=44fc7812@news.xailer.com...]44fc7812@news.xailer.com...[/email]
> > Ignacio
> >
> > Como le comente anteriormente estoy ayudándome con el ejemplo "DbfData2"
> > y utilicé el método onCreate de la siguiente manera
> >
> > METHOD FirstCreate( oSender ) CLASS TAMRamos
> >
> > oSender:oDataSet := ::oParent:oRamos
> >
> > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
> >
> > RETURN Nil
> >
> >
> > Luego creo el siguiente método para que se ejecute en el evento onExit
> > del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
> > siguiente error:
> >
> > TAMRAMOS:NRORAMOEXIT(39)
> > Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
> > Argumentos: ()
> >
> >
>
> >
> > ¿Que es lo que estoy haciendo mal?
> >
> >
> > Muchas Gracias
> > Daniel.
> >
> >
> >
> > Ignacio Ortiz de Zúñiga escribió:
> >> Daniel,
> >>
> >>> que interpreto que su funcionamiento serí­a análogo a la cláusula VALID
> >>> del comando GET de Clipper.
> >>
> >> Si, algo similiar, pero no complemente igual. Pues nadie le puede
> asegurar
> >> que el usuario se salte completamente ese campo en la edición. En mi
> >> opinión, además de validar en OnExit hay que validar también antes del
> >> Save().
> >>
> >>> ¿Los DataSet son locales a los ..prg donde están definidos?
> >>
> >> Actualmente y en modo diseño, tanto los datasets como los datasources
> >> pertenecen a un formulario. No obstante en un futuro próximo será
> posible
> >> tener dichos controles como globales para toda la aplicación. Sin
> embargo,
> >> por código siempre es posible crear Datasources y DataSets que
> puedan ser
> >> utilizados por toda la aplicación, en dicho caso, el único
> inconveniente es
> >> que tendrá que asignar el dataset a todos los datacontrols de un form a
> >> traves de su evento OnCreate, como se muestra en el ejemplo
> >> samplesDatacontrolsDbfData2
> >>
> >>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
> >>> definido en TPrueba1?
> >>
> >> Ya respondido.
> >>
> >> Un saludo,
> >>
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Modificación de registros

Mensaje por zeasoftware »

> > METHOD FirstCreate( oSender ) CLASS TAMRamos
> > oSender:oDataSet := ::oParent:oRamos
> > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
> > RETURN Nil
A ver si me explico
Como estas usando una DataControl este debe estar asociado a una DBF por medio de un DataSet, pero en tu Form, no tienes generado o definico ningun
Component oDataSet
Entonces para eso se ocupa que al crear el DataControl tu le asignes un DataSet, el cual si lo tienes como la linea anterior, lo podrias asignar en tiempo de Edicion con el IDE, pero en tiempo de ejecucion lo usas con el evento ONCREATE.
Por lo tanto al pasar por el OnCreate, ligas el Datacontrol a tu Archivo DBF.
Espero te sirva.
A mi me paso lo mismo hasta que lo fui entendiendo, son detalles que creo deberian de estar en algun lugar del manual.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com

http://www.paginasprodigy.com/zeasoft/
"Daniel Du Pré" <ddupre@macrosistemas.com.uy> escribió en el mensaje news:[email=44fcaf7c@news.xailer.com...]44fcaf7c@news.xailer.com...[/email]
> Ramón
>
> Muchas gracias, lo probé y funcionó perfectamente.
> Aunque para ser sincero no me queda claro cual es el alcance de la linea
> que esta puesta en el método "FirsCreate", ¿alguien puede explicarme?
>
> Desde ya muchas gracias.
> Daniel.
>
>
>
> Ramón Zea escribió:
>> oRamos no existe en tu Actual clase si no en la clase Padre.
>>
>> > METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
>> >
>> > if ::*oParent:*oRamos:seek(str(oSender:Value,4)) //oRamos es el
>> > nombre que di // al TDbfDataset del //formulario donde
>> > esta creado
>> >
>> > MsgInfo('Ya existe Ramo con ese nro.')
>> > Return ..F.
>> > endif
>> >
>> > RETURN Nil
>>
>> Espero te sirva.
>>
>> --
>> Ramón Zea
>> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
>> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
>> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>>
>> http://www.paginasprodigy.com/zeasoft/
>> "Daniel Du Pré" <macrosy@adinet.com.uy <mailto:macrosy@adinet.com.uy>>
>> escribió en el mensaje news:[email=44fc7812@news.xailer.com...]44fc7812@news.xailer.com...[/email]
>> > Ignacio
>> >
>> > Como le comente anteriormente estoy ayudándome con el ejemplo "DbfData2"
>> > y utilicé el método onCreate de la siguiente manera
>> >
>> > METHOD FirstCreate( oSender ) CLASS TAMRamos
>> >
>> > oSender:oDataSet := ::oParent:oRamos
>> >
>> > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
>> >
>> > RETURN Nil
>> >
>> >
>> > Luego creo el siguiente método para que se ejecute en el evento onExit
>> > del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
>> > siguiente error:
>> >
>> > TAMRAMOS:NRORAMOEXIT(39)
>> > Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
>> > Argumentos: ()
>> >
>> >
>>
>> >
>> > ¿Que es lo que estoy haciendo mal?
>> >
>> >
>> > Muchas Gracias
>> > Daniel.
>> >
>> >
>> >
>> > Ignacio Ortiz de Zúñiga escribió:
>> >> Daniel,
>> >>
>> >>> que interpreto que su funcionamiento serí­a análogo a la cláusula VALID
>> >>> del comando GET de Clipper.
>> >>
>> >> Si, algo similiar, pero no complemente igual. Pues nadie le puede
>> asegurar
>> >> que el usuario se salte completamente ese campo en la edición. En mi
>> >> opinión, además de validar en OnExit hay que validar también antes del
>> >> Save().
>> >>
>> >>> ¿Los DataSet son locales a los ..prg donde están definidos?
>> >>
>> >> Actualmente y en modo diseño, tanto los datasets como los datasources
>> >> pertenecen a un formulario. No obstante en un futuro próximo será
>> posible
>> >> tener dichos controles como globales para toda la aplicación. Sin
>> embargo,
>> >> por código siempre es posible crear Datasources y DataSets que
>> puedan ser
>> >> utilizados por toda la aplicación, en dicho caso, el único
>> inconveniente es
>> >> que tendrá que asignar el dataset a todos los datacontrols de un form a
>> >> traves de su evento OnCreate, como se muestra en el ejemplo
>> >> samplesDatacontrolsDbfData2
>> >>
>> >>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
>> >>> definido en TPrueba1?
>> >>
>> >> Ya respondido.
>> >>
>> >> Un saludo,
>> >>
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Ramón,
Lo están. Hay un capí­tulo entero dedicado a ellos.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=44fd190f@news.xailer.com...]44fd190f@news.xailer.com...[/email]
> > METHOD FirstCreate( oSender ) CLASS TAMRamos
> > oSender:oDataSet := ::oParent:oRamos
> > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
> > RETURN Nil
A ver si me explico
A mi me paso lo mismo hasta que lo fui entendiendo, son detalles que creo deberian de estar en algun lugar del manual.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Daniel,
> METHOD FirstCreate( oSender ) CLASS TAMRamos
>
> oSender:oDataSet := ::oParent:oRamos
>
> // Entiendo que aquí es donde se asigna el DataSet a este form.
>
> RETURN Nil
Esto es correcto si oRamos es el nombre que le ha dado al objeto TDataSet
> TAMRAMOS:NRORAMOEXIT(39)
> Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
> Argumentos: ()
oRamos es el nombre del dataset en SU OBJETO CONTENEDOR, por lo tanto para
acceder a él debería haber hecho:
::oParent:oRamos
NO OBSTANTE, no tiene mucho sentido acceder a un miembro de su objeto
contendedor cuando actualmente YA TIENE una referencia a dicho objeto en el
propio formulario, como es OEDITCONTROL:ODATASET. Por lo tanto quedaría así:
METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
WITH OBJECT oSender
IF :oDataSet:Seek( Str( :Value, 4 ) )
......
......
END WITH
En mi opinión, lo único que le falta es un poco más de experiencia en
programación orientada a objetos ya que Xailer saca provecho de dicha forma
de programar de forma exaustiva. No se deseanime, en poco tiempo lo verá
todo mucho más sencillo.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Daniel y Ramón,
>>METHOD FirstCreate( oSender ) CLASS TAMRamos
>>oSender:oDataSet := ::oParent:oRamos
Cuando se creo el control TDBEdit, por ejemplo, en el formulario usted NO
ASIGNO ningún TDataset porque simplemente no podía hacerlo ya que el
TDataSet no estaba en ámbito al no ser un componente del propio formulario.
Por lo tanto ES NECESARIO asignar el TDataset en algún sitio ANTES de que el
control esté activo.
El ejemplo DbfData2 propone como punto óptimo para asignar el TDataSet el
evento ONCREATE que tiene cualquier DataControl. Dicho evento se lanza
cuando el control se crea, y como el resto de eventos el primer parametro
que se envía con el evento es el propio objeto que lo disparó (oSender), en
nuestra caso el control TDBEdit.
Por lo tanto lo único que hace este evento es ASIGNAR EL TDATASET AL
DATACONTROL.
Observe que también podriamos haber resuelto el problema de la asignación en
el evento ONINITIALIZE del formulario de esta forma:
WITH OBJECT ::oParent
::TDataControl1:oDataSet := :oRamos
::TDataControl2:oDataSet := :oRamos
::TDataControl3:oDataSet := :oRamos
END WITH
Sin embargo, es preferible utilizar el evento OnCreate del formulario y
HACER QUE TODOS LOS EVENTOS ONCREATE DE TODOS LOS DATACONTROLS APUNTES AL
MISMO METODO, en este caso FirstCreate.
Cuando TDataControl1:OnCreate es disparado se llama al método FirsCreate
siendo OSENDER el propio TDataControl1, por lo tanto lo que esta haciendo es
asignar la propiedad TDataControl1:oDataSet a ::oParent:oRamos.
Cuando TDataControl2:OnCreate es disparado se llama al método FirsCreate
siendo OSENDER el propio TDataControl2, por lo tanto lo que esta haciendo es
asignar la propiedad TDataControl2:oDataSet a ::oParent:oRamos.
Y así sucesivamente.
Como le he comentado antes, y espero que no le moleste, simplemente le falta
un poco de experiencia con programación OOP que seguro obtendrá rápidamente.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Daniel Du Pré" <ddupre@macrosistemas.com.uy> escribió en el mensaje
news:[email=44fcaf7c@news.xailer.com...]44fcaf7c@news.xailer.com...[/email]
> Ramón
>
> Muchas gracias, lo probé y funcionó perfectamente.
> Aunque para ser sincero no me queda claro cual es el alcance de la linea
> que esta puesta en el método "FirsCreate", ¿alguien puede explicarme?
>
> Desde ya muchas gracias.
> Daniel.
>
>
>
> Ramón Zea escribió:
>> oRamos no existe en tu Actual clase si no en la clase Padre.
>> > METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
>> >
>> > if ::*oParent:*oRamos:seek(str(oSender:Value,4)) //oRamos es el
>> > nombre que di // al TDbfDataset del //formulario donde
>> > esta creado
>> >
>> > MsgInfo('Ya existe Ramo con ese nro.')
>> > Return ..F.
>> > endif
>> >
>> > RETURN Nil
>> Espero te sirva.
>>
>> --
>> Ramón Zea
>> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
>> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
>> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>> http://www.paginasprodigy.com/zeasoft/
>> "Daniel Du Pré" <macrosy@adinet.com.uy <mailto:macrosy@adinet.com.uy>>
>> escribió en el mensaje news:[email=44fc7812@news.xailer.com...]44fc7812@news.xailer.com...[/email]
>> > Ignacio
>> >
>> > Como le comente anteriormente estoy ayudándome con el ejemplo
>> "DbfData2"
>> > y utilicé el método onCreate de la siguiente manera
>> >
>> > METHOD FirstCreate( oSender ) CLASS TAMRamos
>> >
>> > oSender:oDataSet := ::oParent:oRamos
>> >
>> > // Entiendo que aquí es donde se asigna el DataSet a este form.
>> >
>> > RETURN Nil
>> >
>> >
>> > Luego creo el siguiente método para que se ejecute en el evento onExit
>> > del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
>> > siguiente error:
>> >
>> > TAMRAMOS:NRORAMOEXIT(39)
>> > Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
>> > Argumentos: ()
>> >
>> >
>>
>> >
>> > ¿Que es lo que estoy haciendo mal?
>> >
>> >
>> > Muchas Gracias
>> > Daniel.
>> >
>> >
>> >
>> > Ignacio Ortiz de Zúñiga escribió:
>> >> Daniel,
>> >>
>> >>> que interpreto que su funcionamiento sería análogo a la cláusula
>> VALID
>> >>> del comando GET de Clipper.
>> >>
>> >> Si, algo similiar, pero no complemente igual. Pues nadie le puede
>> asegurar
>> >> que el usuario se salte completamente ese campo en la edición. En mi
>> >> opinión, además de validar en OnExit hay que validar también antes
>> del
>> >> Save().
>> >>
>> >>> ¿Los DataSet son locales a los ..prg donde están definidos?
>> >>
>> >> Actualmente y en modo diseño, tanto los datasets como los datasources
>> >> pertenecen a un formulario. No obstante en un futuro próximo será
>> posible
>> >> tener dichos controles como globales para toda la aplicación. Sin
>> embargo,
>> >> por código siempre es posible crear Datasources y DataSets que puedan
>> ser
>> >> utilizados por toda la aplicación, en dicho caso, el único
>> inconveniente es
>> >> que tendrá que asignar el dataset a todos los datacontrols de un form
>> a
>> >> traves de su evento OnCreate, como se muestra en el ejemplo
>> >> samplesDatacontrolsDbfData2
>> >>
>> >>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que está
>> >>> definido en TPrueba1?
>> >>
>> >> Ya respondido.
>> >>
>> >> Un saludo,
>> >>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Modificación de registros

Mensaje por ddupre »

Ramón:
Muchas gracias, me has aclarado este tema.
Saludos
Daniel.
Ramón Zea escribió:
> > > METHOD FirstCreate( oSender ) CLASS TAMRamos
> > > oSender:oDataSet := ::oParent:oRamos
> > > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
> > > RETURN Nil
> A ver si me explico
>
> Como estas usando una DataControl este debe estar asociado a una DBF por
> medio de un *DataSet*, pero en tu Form, no tienes generado o definico
> ningun
>
> Component oDataSet
> Entonces para eso se ocupa que al crear el DataControl tu le asignes un
> DataSet, el cual si lo tienes como la linea anterior, lo podrias asignar
> en tiempo de Edicion con el IDE, pero en tiempo de ejecucion lo usas con
> el evento *ONCREATE*.
>
> Por lo tanto al pasar por el *OnCreate*, ligas el Datacontrol a tu
> Archivo DBF.
>
> Espero te sirva.
>
> A mi me paso lo mismo hasta que lo fui entendiendo, son detalles que
> creo deberian de estar en algun lugar del manual.
>
> Saludos.
> --
> Ramón Zea
> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
>
> http://www.paginasprodigy.com/zeasoft/
> "Daniel Du Pré" <ddupre@macrosistemas.com.uy
> <mailto:ddupre@macrosistemas.com.uy>> escribió en el mensaje
> news:[email=44fcaf7c@news.xailer.com...]44fcaf7c@news.xailer.com...[/email]
> > Ramón
> >
> > Muchas gracias, lo probé y funcionó perfectamente.
> > Aunque para ser sincero no me queda claro cual es el alcance de la linea
> > que esta puesta en el método "FirsCreate", ¿alguien puede explicarme?
> >
> > Desde ya muchas gracias.
> > Daniel.
> >
> >
> >
> > Ramón Zea escribió:
> >> oRamos no existe en tu Actual clase si no en la clase Padre.
> >>
> >> > METHOD NroRamoExit( oSender, oNextCtl ) CLASS TAMRamos
> >> >
> >> > if ::*oParent:*oRamos:seek(str(oSender:Value,4)) //oRamos es el
> >> > nombre que di // al TDbfDataset del //formulario donde
> >> > esta creado
> >> >
> >> > MsgInfo('Ya existe Ramo con ese nro.')
> >> > Return ...F.
> >> > endif
> >> >
> >> > RETURN Nil
> >>
> >> Espero te sirva.
> >>
> >> --
> >> Ramón Zea
> >> ramonzea@yahoo.com <mailto:ramonzea@yahoo.com>
> <mailto:ramonzea@yahoo.com>
> >> zeasoftware@hotmail.com <mailto:zeasoftware@hotmail.com>
> <mailto:zeasoftware@hotmail.com>
> >> zeasoft.movil@hotmail.com <mailto:zeasoft.movil@hotmail.com>
> <mailto:zeasoft.movil@hotmail.com>
> >>
> >> http://www.paginasprodigy.com/zeasoft/
> >> "Daniel Du Pré" <macrosy@adinet.com.uy
> <mailto:macrosy@adinet.com.uy> <mailto:macrosy@adinet.com.uy>>
> >> escribió en el mensaje news:[email=44fc7812@news.xailer.com...]44fc7812@news.xailer.com...[/email]
> >> > Ignacio
> >> >
> >> > Como le comente anteriormente estoy ayudándome con el ejemplo
> "DbfData2"
> >> > y utilicé el método onCreate de la siguiente manera
> >> >
> >> > METHOD FirstCreate( oSender ) CLASS TAMRamos
> >> >
> >> > oSender:oDataSet := ::oParent:oRamos
> >> >
> >> > // Entiendo que aquí­ es donde se asigna el DataSet a este form.
> >> >
> >> > RETURN Nil
> >> >
> >> >
> >> > Luego creo el siguiente método para que se ejecute en el evento
> onExit
> >> > del DataControl (TDBMaskEdit) y en tiempo de ejecución me da el
> >> > siguiente error:
> >> >
> >> > TAMRAMOS:NRORAMOEXIT(39)
> >> > Error BASE/1004 Message not found: TAMRAMOS:ORAMOS
> >> > Argumentos: ()
> >> >
> >> >
> >>
> >> >
> >> > ¿Que es lo que estoy haciendo mal?
> >> >
> >> >
> >> > Muchas Gracias
> >> > Daniel.
> >> >
> >> >
> >> >
> >> > Ignacio Ortiz de Zúñiga escribió:
> >> >> Daniel,
> >> >>
> >> >>> que interpreto que su funcionamiento serí­a análogo a la
> cláusula VALID
> >> >>> del comando GET de Clipper.
> >> >>
> >> >> Si, algo similiar, pero no complemente igual. Pues nadie le puede
> >> asegurar
> >> >> que el usuario se salte completamente ese campo en la edición. En mi
> >> >> opinión, además de validar en OnExit hay que validar también
> antes del
> >> >> Save().
> >> >>
> >> >>> ¿Los DataSet son locales a los ..prg donde están definidos?
> >> >>
> >> >> Actualmente y en modo diseño, tanto los datasets como los
> datasources
> >> >> pertenecen a un formulario. No obstante en un futuro próximo será
> >> posible
> >> >> tener dichos controles como globales para toda la aplicación. Sin
> >> embargo,
> >> >> por código siempre es posible crear Datasources y DataSets que
> >> puedan ser
> >> >> utilizados por toda la aplicación, en dicho caso, el único
> >> inconveniente es
> >> >> que tendrá que asignar el dataset a todos los datacontrols de un
> form a
> >> >> traves de su evento OnCreate, como se muestra en el ejemplo
> >> >> samplesDatacontrolsDbfData2
> >> >>
> >> >>> ¿Como hago para decirle al form1 que utilice el TDdbDataSet que
> está
> >> >>> definido en TPrueba1?
> >> >>
> >> >> Ya respondido.
> >> >>
> >> >> Un saludo,
> >> >>
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Modificación de registros

Mensaje por ddupre »

Ignacio:
No me siento mal con el comentario sobre "le falta un poco de
experiencia con programación OOP", ud. está diciendo la verdad y yo lo
reconozco, es más, le agradezco mucho por su tiempo en estas
explicaciones que me ha enviado, es lo que necesito para "ir tomando
experiencia".
Como he comentado en alguna oportunidad "no se nada de OOP" y como
Xailer me gustó desde que lo vi por primera vez, lo elegí­ para aprender
a programar con él y de paso aprender OOP. Pido disculpas por la
cantidad de preguntas que les hago (y seguramente les haré) y agradezco
nuevamente a ud. y a todos los demás colegas por el apoyo que me brindan.
Saludos
Ignacio Ortiz de Zúñiga escribió:
> Daniel y Ramón,
>
>>> METHOD FirstCreate( oSender ) CLASS TAMRamos
>>> oSender:oDataSet := ::oParent:oRamos
>
> Cuando se creo el control TDBEdit, por ejemplo, en el formulario usted NO
> ASIGNO ningún TDataset porque simplemente no podí­a hacerlo ya que el
> TDataSet no estaba en ámbito al no ser un componente del propio formulario.
> Por lo tanto ES NECESARIO asignar el TDataset en algún sitio ANTES de que el
> control esté activo.
>
> El ejemplo DbfData2 propone como punto óptimo para asignar el TDataSet el
> evento ONCREATE que tiene cualquier DataControl. Dicho evento se lanza
> cuando el control se crea, y como el resto de eventos el primer parametro
> que se enví­a con el evento es el propio objeto que lo disparó (oSender), en
> nuestra caso el control TDBEdit.
>
> Por lo tanto lo único que hace este evento es ASIGNAR EL TDATASET AL
> DATACONTROL.
>
> Observe que también podriamos haber resuelto el problema de la asignación en
> el evento ONINITIALIZE del formulario de esta forma:
>
> WITH OBJECT ::oParent
> ::TDataControl1:oDataSet := :oRamos
> ::TDataControl2:oDataSet := :oRamos
> ::TDataControl3:oDataSet := :oRamos
> END WITH
>
> Sin embargo, es preferible utilizar el evento OnCreate del formulario y
> HACER QUE TODOS LOS EVENTOS ONCREATE DE TODOS LOS DATACONTROLS APUNTES AL
> MISMO METODO, en este caso FirstCreate.
>
> Cuando TDataControl1:OnCreate es disparado se llama al método FirsCreate
> siendo OSENDER el propio TDataControl1, por lo tanto lo que esta haciendo es
> asignar la propiedad TDataControl1:oDataSet a ::oParent:oRamos.
>
> Cuando TDataControl2:OnCreate es disparado se llama al método FirsCreate
> siendo OSENDER el propio TDataControl2, por lo tanto lo que esta haciendo es
> asignar la propiedad TDataControl2:oDataSet a ::oParent:oRamos.
>
> Y así­ sucesivamente.
>
> Como le he comentado antes, y espero que no le moleste, simplemente le falta
> un poco de experiencia con programación OOP que seguro obtendrá rápidamente.
>
> Un saludo,
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Modificación de registros

Mensaje por ignacio »

Daniel,
Encantado de seguir echandote una mano en todo lo que podamos.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Daniel Du Pré" <ddupre@macrosistemas.com.uy> escribió en el mensaje
news:[email=44fd9498@news.xailer.com...]44fd9498@news.xailer.com...[/email]
> Ignacio:
>
> No me siento mal con el comentario sobre "le falta un poco de experiencia
> con programación OOP", ud. está diciendo la verdad y yo lo reconozco, es
> más, le agradezco mucho por su tiempo en estas explicaciones que me ha
> enviado, es lo que necesito para "ir tomando experiencia".
>
> Como he comentado en alguna oportunidad "no se nada de OOP" y como Xailer
> me gustó desde que lo vi por primera vez, lo elegí para aprender a
> programar con él y de paso aprender OOP. Pido disculpas por la cantidad de
> preguntas que les hago (y seguramente les haré) y agradezco nuevamente a
> ud. y a todos los demás colegas por el apoyo que me brindan.
>
> Saludos
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Daniel y Ramón,
>>
>>>> METHOD FirstCreate( oSender ) CLASS TAMRamos
>>>> oSender:oDataSet := ::oParent:oRamos
>>
>> Cuando se creo el control TDBEdit, por ejemplo, en el formulario usted NO
>> ASIGNO ningún TDataset porque simplemente no podía hacerlo ya que el
>> TDataSet no estaba en ámbito al no ser un componente del propio
>> formulario. Por lo tanto ES NECESARIO asignar el TDataset en algún sitio
>> ANTES de que el control esté activo.
>>
>> El ejemplo DbfData2 propone como punto óptimo para asignar el TDataSet el
>> evento ONCREATE que tiene cualquier DataControl. Dicho evento se lanza
>> cuando el control se crea, y como el resto de eventos el primer parametro
>> que se envía con el evento es el propio objeto que lo disparó (oSender),
>> en nuestra caso el control TDBEdit.
>>
>> Por lo tanto lo único que hace este evento es ASIGNAR EL TDATASET AL
>> DATACONTROL.
>>
>> Observe que también podriamos haber resuelto el problema de la asignación
>> en el evento ONINITIALIZE del formulario de esta forma:
>>
>> WITH OBJECT ::oParent
>> ::TDataControl1:oDataSet := :oRamos
>> ::TDataControl2:oDataSet := :oRamos
>> ::TDataControl3:oDataSet := :oRamos
>> END WITH
>>
>> Sin embargo, es preferible utilizar el evento OnCreate del formulario y
>> HACER QUE TODOS LOS EVENTOS ONCREATE DE TODOS LOS DATACONTROLS APUNTES AL
>> MISMO METODO, en este caso FirstCreate.
>>
>> Cuando TDataControl1:OnCreate es disparado se llama al método FirsCreate
>> siendo OSENDER el propio TDataControl1, por lo tanto lo que esta haciendo
>> es asignar la propiedad TDataControl1:oDataSet a ::oParent:oRamos.
>>
>> Cuando TDataControl2:OnCreate es disparado se llama al método FirsCreate
>> siendo OSENDER el propio TDataControl2, por lo tanto lo que esta haciendo
>> es asignar la propiedad TDataControl2:oDataSet a ::oParent:oRamos.
>>
>> Y así sucesivamente.
>>
>> Como le he comentado antes, y espero que no le moleste, simplemente le
>> falta un poco de experiencia con programación OOP que seguro obtendrá
>> rápidamente.
>>
>> Un saludo,
>>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Modificación de registros

Mensaje por zeasoftware »

Mientras se pueda, cuentas con mi ayuda.
Igual pase por muchas dudas, e imprimi el manual (iban por 500 hojas) y me
pegue a la PC 30 hrs al dia (jeje), ya que venia de solo una aplicacion con
FW, y otros que solo pude probar.
Todos pasamos por la temporada de la ignorancia, asi que en lo que se pueda.
OZ.: son detalles que salen en la programacion.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoft/
Responder