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,
>> >>