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.
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.
Consulta sobre Addnew()
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Consulta sobre Addnew()
Buenas a Todos
Espero me pueda explicar bien !!
Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
generar una pantalla de captura de datos, pero sobre Oracle Express.
Tengo un evento para agregar un nuevo pais,
//---------------------------------------------------------- ---
METHOD MantenAlta( oSender ) CLASS TFrmPais
WITH OBJECT TFRMPAISES():New( Application:oMainForm )
:lOnAppend := .t.
::oSqltable1:AddNew()
:RequestState()
:cText := "Agregar Paises"
IF :ShowModal() == mrOK
::osqltable1:Update()
ELSE
::osqltable1:Cancel()
ENDIF
::oDbBrowse1:refresh()
END WITH
RETURN NIL
//---------------------------------------------------------- -------
Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo adjunto
??.
Como puedo agregar un registro, siempre mostrando la información total del
DBbrowse1 ??
En espera de su ayuda
Saludos ??
Attached files
Espero me pueda explicar bien !!
Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
generar una pantalla de captura de datos, pero sobre Oracle Express.
Tengo un evento para agregar un nuevo pais,
//---------------------------------------------------------- ---
METHOD MantenAlta( oSender ) CLASS TFrmPais
WITH OBJECT TFRMPAISES():New( Application:oMainForm )
:lOnAppend := .t.
::oSqltable1:AddNew()
:RequestState()
:cText := "Agregar Paises"
IF :ShowModal() == mrOK
::osqltable1:Update()
ELSE
::osqltable1:Cancel()
ENDIF
::oDbBrowse1:refresh()
END WITH
RETURN NIL
//---------------------------------------------------------- -------
Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo adjunto
??.
Como puedo agregar un registro, siempre mostrando la información total del
DBbrowse1 ??
En espera de su ayuda
Saludos ??
Attached files
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Consulta sobre Addnew()
Frenando,
Posiblemente el problema se encuentra en como ha capturado el evento
OnGetData de las columnas del browse. En concreto puede haber hecho algo
así:
oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
edición, y el valor del buffer de edición cuando se encuentra en edición.
Como se encuentra en edición (al llamar a AddNew) la columna le está
mostrando el valor del buffer que en ese momento está vacío.
Para solucionarlo simplemente indique en el OnGetData de la columna que lo
que desea es SIEMPRE el valor del campo de esta forma:
oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
> Buenas a Todos
>
> Espero me pueda explicar bien !!
>
> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
> generar una pantalla de captura de datos, pero sobre Oracle Express.
>
> Tengo un evento para agregar un nuevo pais,
>
> //---------------------------------------------------------- ---
> METHOD MantenAlta( oSender ) CLASS TFrmPais
> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
> :lOnAppend := .t.
> ::oSqltable1:AddNew()
> :RequestState()
> :cText := "Agregar Paises"
> IF :ShowModal() == mrOK
> ::osqltable1:Update()
> ELSE
> ::osqltable1:Cancel()
> ENDIF
> ::oDbBrowse1:refresh()
> END WITH
> RETURN NIL
> //---------------------------------------------------------- -------
>
> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
> adjunto ??.
>
> Como puedo agregar un registro, siempre mostrando la información total del
> DBbrowse1 ??
>
> En espera de su ayuda
>
> Saludos ??
>
>
>
Posiblemente el problema se encuentra en como ha capturado el evento
OnGetData de las columnas del browse. En concreto puede haber hecho algo
así:
oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
edición, y el valor del buffer de edición cuando se encuentra en edición.
Como se encuentra en edición (al llamar a AddNew) la columna le está
mostrando el valor del buffer que en ese momento está vacío.
Para solucionarlo simplemente indique en el OnGetData de la columna que lo
que desea es SIEMPRE el valor del campo de esta forma:
oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
> Buenas a Todos
>
> Espero me pueda explicar bien !!
>
> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
> generar una pantalla de captura de datos, pero sobre Oracle Express.
>
> Tengo un evento para agregar un nuevo pais,
>
> //---------------------------------------------------------- ---
> METHOD MantenAlta( oSender ) CLASS TFrmPais
> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
> :lOnAppend := .t.
> ::oSqltable1:AddNew()
> :RequestState()
> :cText := "Agregar Paises"
> IF :ShowModal() == mrOK
> ::osqltable1:Update()
> ELSE
> ::osqltable1:Cancel()
> ENDIF
> ::oDbBrowse1:refresh()
> END WITH
> RETURN NIL
> //---------------------------------------------------------- -------
>
> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
> adjunto ??.
>
> Como puedo agregar un registro, siempre mostrando la información total del
> DBbrowse1 ??
>
> En espera de su ayuda
>
> Saludos ??
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Consulta sobre Addnew()
Ok, gracias. Ya los cambios estan realizados, pero el problema en si es que
cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
(Ver imagen1)
Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
(Ver imagen 2)
El evento MantenAlta es el mismo que esta al final del corro. Veo el ejemplo
de DBFDATA6, y este problema no se me presenta. Recuerde que estoy conectado
usando ADO a una base de datos en oracle; o existe algun otro evento para
evitar que el registro en blanco que se agrega en el addnew se actualice en
el browse, sino hasta que el usuario agregue correctamente el pais en la
pantalla respectiva
Adjunto la el fuente de la pantalla de edicion de paises,
Lo que estoy haciendo es creando un formulario base para luego ser usado por
toda la aplicacion.
Gracias por su ayuda y saludos,
//-------------------------------------------------------
#include "Xailer.ch"
CLASS TFrmPaises FROM TForm
DATA lOnAppend INIT .f.
DATA oDbfPais
COMPONENT oLabel1
COMPONENT oEdiCod
COMPONENT oLabel2
COMPONENT oEdiNom
COMPONENT oBtnAceptar
COMPONENT oBtnCancelar
Component oSqlTable2
component oAdoDataSource2
COMPONENT oAdoDataSource1
METHOD CreateForm()
METHOD EdiCodExit( oSender, oNextCtl )
METHOD BtnAceptarCheckState( oSender )
METHOD ASIGNADATASET( OSender)
METHOD FormInitialize( oSender )
METHOD FormCreate( oSender )
ENDCLASS
#include "FrmPaisEdi.xfm"
//---------------------------------------------------------- --------------------
METHOD FormCreate( oSender ) CLASS TFrmPaises
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
WITH OBJECT oSender:oDataSet
// aca voy a cambiar la forma de validar el registro, voy a esperar el
error que me envie la base de datos por registros duplicados
IF :lOnAppend
:SaveState( .t. )
if Empty( ::oEdicod:Value )
ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
oSender:Value := ""
MsgBeep()
ENDIF
:RestoreState( .t. )
ENDIF
END WITH
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
RETURN !Empty( ::oEdiCod:Value )
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TFrmPaises
//::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
//::oAdoDataSource1:lConnected := .t.
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD asignadataset( oSender ) CLASS TFrmPaises
oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
RETURN Nil
//-------------------------------------------------------
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Frenando,
>
> Posiblemente el problema se encuentra en como ha capturado el evento
> OnGetData de las columnas del browse. En concreto puede haber hecho algo
> así:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>
> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
> edición, y el valor del buffer de edición cuando se encuentra en edición.
> Como se encuentra en edición (al llamar a AddNew) la columna le está
> mostrando el valor del buffer que en ese momento está vacío.
>
> Para solucionarlo simplemente indique en el OnGetData de la columna que lo
> que desea es SIEMPRE el valor del campo de esta forma:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>> Buenas a Todos
>>
>> Espero me pueda explicar bien !!
>>
>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>
>> Tengo un evento para agregar un nuevo pais,
>>
>> //---------------------------------------------------------- ---
>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>> :lOnAppend := .t.
>> ::oSqltable1:AddNew()
>> :RequestState()
>> :cText := "Agregar Paises"
>> IF :ShowModal() == mrOK
>> ::osqltable1:Update()
>> ELSE
>> ::osqltable1:Cancel()
>> ENDIF
>> ::oDbBrowse1:refresh()
>> END WITH
>> RETURN NIL
>> //---------------------------------------------------------- -------
>>
>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>> adjunto ??.
>>
>> Como puedo agregar un registro, siempre mostrando la información total
>> del
>> DBbrowse1 ??
>>
>> En espera de su ayuda
>>
>> Saludos ??
>>
>>
>>
>
>
Attached files
cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
(Ver imagen1)
Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
(Ver imagen 2)
El evento MantenAlta es el mismo que esta al final del corro. Veo el ejemplo
de DBFDATA6, y este problema no se me presenta. Recuerde que estoy conectado
usando ADO a una base de datos en oracle; o existe algun otro evento para
evitar que el registro en blanco que se agrega en el addnew se actualice en
el browse, sino hasta que el usuario agregue correctamente el pais en la
pantalla respectiva
Adjunto la el fuente de la pantalla de edicion de paises,
Lo que estoy haciendo es creando un formulario base para luego ser usado por
toda la aplicacion.
Gracias por su ayuda y saludos,
//-------------------------------------------------------
#include "Xailer.ch"
CLASS TFrmPaises FROM TForm
DATA lOnAppend INIT .f.
DATA oDbfPais
COMPONENT oLabel1
COMPONENT oEdiCod
COMPONENT oLabel2
COMPONENT oEdiNom
COMPONENT oBtnAceptar
COMPONENT oBtnCancelar
Component oSqlTable2
component oAdoDataSource2
COMPONENT oAdoDataSource1
METHOD CreateForm()
METHOD EdiCodExit( oSender, oNextCtl )
METHOD BtnAceptarCheckState( oSender )
METHOD ASIGNADATASET( OSender)
METHOD FormInitialize( oSender )
METHOD FormCreate( oSender )
ENDCLASS
#include "FrmPaisEdi.xfm"
//---------------------------------------------------------- --------------------
METHOD FormCreate( oSender ) CLASS TFrmPaises
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
WITH OBJECT oSender:oDataSet
// aca voy a cambiar la forma de validar el registro, voy a esperar el
error que me envie la base de datos por registros duplicados
IF :lOnAppend
:SaveState( .t. )
if Empty( ::oEdicod:Value )
ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
oSender:Value := ""
MsgBeep()
ENDIF
:RestoreState( .t. )
ENDIF
END WITH
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
RETURN !Empty( ::oEdiCod:Value )
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TFrmPaises
//::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
//::oAdoDataSource1:lConnected := .t.
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD asignadataset( oSender ) CLASS TFrmPaises
oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
RETURN Nil
//-------------------------------------------------------
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Frenando,
>
> Posiblemente el problema se encuentra en como ha capturado el evento
> OnGetData de las columnas del browse. En concreto puede haber hecho algo
> así:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>
> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
> edición, y el valor del buffer de edición cuando se encuentra en edición.
> Como se encuentra en edición (al llamar a AddNew) la columna le está
> mostrando el valor del buffer que en ese momento está vacío.
>
> Para solucionarlo simplemente indique en el OnGetData de la columna que lo
> que desea es SIEMPRE el valor del campo de esta forma:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>> Buenas a Todos
>>
>> Espero me pueda explicar bien !!
>>
>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>
>> Tengo un evento para agregar un nuevo pais,
>>
>> //---------------------------------------------------------- ---
>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>> :lOnAppend := .t.
>> ::oSqltable1:AddNew()
>> :RequestState()
>> :cText := "Agregar Paises"
>> IF :ShowModal() == mrOK
>> ::osqltable1:Update()
>> ELSE
>> ::osqltable1:Cancel()
>> ENDIF
>> ::oDbBrowse1:refresh()
>> END WITH
>> RETURN NIL
>> //---------------------------------------------------------- -------
>>
>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>> adjunto ??.
>>
>> Como puedo agregar un registro, siempre mostrando la información total
>> del
>> DBbrowse1 ??
>>
>> En espera de su ayuda
>>
>> Saludos ??
>>
>>
>>
>
>
Attached files
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Consulta sobre Addnew()
Adjunto Imagen 2
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Frenando,
>
> Posiblemente el problema se encuentra en como ha capturado el evento
> OnGetData de las columnas del browse. En concreto puede haber hecho algo
> así:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>
> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
> edición, y el valor del buffer de edición cuando se encuentra en edición.
> Como se encuentra en edición (al llamar a AddNew) la columna le está
> mostrando el valor del buffer que en ese momento está vacío.
>
> Para solucionarlo simplemente indique en el OnGetData de la columna que lo
> que desea es SIEMPRE el valor del campo de esta forma:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>> Buenas a Todos
>>
>> Espero me pueda explicar bien !!
>>
>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>
>> Tengo un evento para agregar un nuevo pais,
>>
>> //---------------------------------------------------------- ---
>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>> :lOnAppend := .t.
>> ::oSqltable1:AddNew()
>> :RequestState()
>> :cText := "Agregar Paises"
>> IF :ShowModal() == mrOK
>> ::osqltable1:Update()
>> ELSE
>> ::osqltable1:Cancel()
>> ENDIF
>> ::oDbBrowse1:refresh()
>> END WITH
>> RETURN NIL
>> //---------------------------------------------------------- -------
>>
>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>> adjunto ??.
>>
>> Como puedo agregar un registro, siempre mostrando la información total
>> del
>> DBbrowse1 ??
>>
>> En espera de su ayuda
>>
>> Saludos ??
>>
>>
>>
>
>
Attached files
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Frenando,
>
> Posiblemente el problema se encuentra en como ha capturado el evento
> OnGetData de las columnas del browse. En concreto puede haber hecho algo
> así:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>
> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está en
> edición, y el valor del buffer de edición cuando se encuentra en edición.
> Como se encuentra en edición (al llamar a AddNew) la columna le está
> mostrando el valor del buffer que en ese momento está vacío.
>
> Para solucionarlo simplemente indique en el OnGetData de la columna que lo
> que desea es SIEMPRE el valor del campo de esta forma:
>
> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>> Buenas a Todos
>>
>> Espero me pueda explicar bien !!
>>
>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>
>> Tengo un evento para agregar un nuevo pais,
>>
>> //---------------------------------------------------------- ---
>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>> :lOnAppend := .t.
>> ::oSqltable1:AddNew()
>> :RequestState()
>> :cText := "Agregar Paises"
>> IF :ShowModal() == mrOK
>> ::osqltable1:Update()
>> ELSE
>> ::osqltable1:Cancel()
>> ENDIF
>> ::oDbBrowse1:refresh()
>> END WITH
>> RETURN NIL
>> //---------------------------------------------------------- -------
>>
>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en el
>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>> adjunto ??.
>>
>> Como puedo agregar un registro, siempre mostrando la información total
>> del
>> DBbrowse1 ??
>>
>> En espera de su ayuda
>>
>> Saludos ??
>>
>>
>>
>
>
Attached files
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Consulta sobre Addnew()
Fernando,
Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo que
comentas, es decir, mostrandose un dataset en un browse y lanzando un
proceso AddNew en otro diálogo, y en dicho caso parece que funciona
correctamente, y para nada se crea ese registro fantasma que aparece en la
imagen que has mandado.
Es posible que con OracleExpress se crea un registro fantasma en el dataset
cuando se realiza una operación AddNew, pero me cuesta un montón creer que
ADO funciona de distinta forma dependiendo del servidor con que se conecte.
Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
una llamada a Update() si es correcto o Cancel() si deseas cancelar la
operación. Si haces un AddNew(), seguido inmediatamente de un Update()
efectivamente se crea el registro. Espero que no sea este tu error.
Por otra parte, existe una forma de hacer para que el ningún datacontrol,
incluido el browse, se enteren temporalmente de modificaciones que se
producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
Te aconsejo que también les eches un vistazo a los métodos SaveState() y
RestoreState() de TDataset.
Si te siguiese fallando te ruego que intentes reproducir el problema con el
ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo se
produce con Oracle.
Un saludo,
Ignacio Ortiz
www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
> que
> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
> (Ver imagen1)
>
> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
> (Ver imagen 2)
>
> El evento MantenAlta es el mismo que esta al final del corro. Veo el
> ejemplo
> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
> conectado
> usando ADO a una base de datos en oracle; o existe algun otro evento para
> evitar que el registro en blanco que se agrega en el addnew se actualice
> en
> el browse, sino hasta que el usuario agregue correctamente el pais en la
> pantalla respectiva
>
> Adjunto la el fuente de la pantalla de edicion de paises,
>
> Lo que estoy haciendo es creando un formulario base para luego ser usado
> por
> toda la aplicacion.
>
> Gracias por su ayuda y saludos,
>
> //-------------------------------------------------------
> #include "Xailer.ch"
>
> CLASS TFrmPaises FROM TForm
>
> DATA lOnAppend INIT .f.
> DATA oDbfPais
>
> COMPONENT oLabel1
> COMPONENT oEdiCod
> COMPONENT oLabel2
> COMPONENT oEdiNom
> COMPONENT oBtnAceptar
> COMPONENT oBtnCancelar
> Component oSqlTable2
> component oAdoDataSource2
> COMPONENT oAdoDataSource1
>
> METHOD CreateForm()
> METHOD EdiCodExit( oSender, oNextCtl )
> METHOD BtnAceptarCheckState( oSender )
> METHOD ASIGNADATASET( OSender)
> METHOD FormInitialize( oSender )
> METHOD FormCreate( oSender )
>
> ENDCLASS
>
> #include "FrmPaisEdi.xfm"
>
> //---------------------------------------------------------- --------------------
> METHOD FormCreate( oSender ) CLASS TFrmPaises
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>
> WITH OBJECT oSender:oDataSet
> // aca voy a cambiar la forma de validar el registro, voy a esperar
> el
> error que me envie la base de datos por registros duplicados
> IF :lOnAppend
> :SaveState( .t. )
> if Empty( ::oEdicod:Value )
> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
> oSender:Value := ""
> MsgBeep()
> ENDIF
> :RestoreState( .t. )
> ENDIF
> END WITH
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>
> RETURN !Empty( ::oEdiCod:Value )
>
> //---------------------------------------------------------- --------------------
> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>
> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
> //::oAdoDataSource1:lConnected := .t.
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD asignadataset( oSender ) CLASS TFrmPaises
>
> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>
> RETURN Nil
> //-------------------------------------------------------
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Frenando,
>>
>> Posiblemente el problema se encuentra en como ha capturado el evento
>> OnGetData de las columnas del browse. En concreto puede haber hecho algo
>> así:
>>
>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>
>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>> en
>> edición, y el valor del buffer de edición cuando se encuentra en edición.
>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>> mostrando el valor del buffer que en ese momento está vacío.
>>
>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>> lo
>> que desea es SIEMPRE el valor del campo de esta forma:
>>
>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>> Buenas a Todos
>>>
>>> Espero me pueda explicar bien !!
>>>
>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>
>>> Tengo un evento para agregar un nuevo pais,
>>>
>>> //---------------------------------------------------------- ---
>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>> :lOnAppend := .t.
>>> ::oSqltable1:AddNew()
>>> :RequestState()
>>> :cText := "Agregar Paises"
>>> IF :ShowModal() == mrOK
>>> ::osqltable1:Update()
>>> ELSE
>>> ::osqltable1:Cancel()
>>> ENDIF
>>> ::oDbBrowse1:refresh()
>>> END WITH
>>> RETURN NIL
>>> //---------------------------------------------------------- -------
>>>
>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>> el
>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>> adjunto ??.
>>>
>>> Como puedo agregar un registro, siempre mostrando la información total
>>> del
>>> DBbrowse1 ??
>>>
>>> En espera de su ayuda
>>>
>>> Saludos ??
>>>
>>>
>>>
>>
>>
>
>
>
>
Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo que
comentas, es decir, mostrandose un dataset en un browse y lanzando un
proceso AddNew en otro diálogo, y en dicho caso parece que funciona
correctamente, y para nada se crea ese registro fantasma que aparece en la
imagen que has mandado.
Es posible que con OracleExpress se crea un registro fantasma en el dataset
cuando se realiza una operación AddNew, pero me cuesta un montón creer que
ADO funciona de distinta forma dependiendo del servidor con que se conecte.
Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
una llamada a Update() si es correcto o Cancel() si deseas cancelar la
operación. Si haces un AddNew(), seguido inmediatamente de un Update()
efectivamente se crea el registro. Espero que no sea este tu error.
Por otra parte, existe una forma de hacer para que el ningún datacontrol,
incluido el browse, se enteren temporalmente de modificaciones que se
producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
Te aconsejo que también les eches un vistazo a los métodos SaveState() y
RestoreState() de TDataset.
Si te siguiese fallando te ruego que intentes reproducir el problema con el
ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo se
produce con Oracle.
Un saludo,
Ignacio Ortiz
www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
> que
> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
> (Ver imagen1)
>
> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
> (Ver imagen 2)
>
> El evento MantenAlta es el mismo que esta al final del corro. Veo el
> ejemplo
> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
> conectado
> usando ADO a una base de datos en oracle; o existe algun otro evento para
> evitar que el registro en blanco que se agrega en el addnew se actualice
> en
> el browse, sino hasta que el usuario agregue correctamente el pais en la
> pantalla respectiva
>
> Adjunto la el fuente de la pantalla de edicion de paises,
>
> Lo que estoy haciendo es creando un formulario base para luego ser usado
> por
> toda la aplicacion.
>
> Gracias por su ayuda y saludos,
>
> //-------------------------------------------------------
> #include "Xailer.ch"
>
> CLASS TFrmPaises FROM TForm
>
> DATA lOnAppend INIT .f.
> DATA oDbfPais
>
> COMPONENT oLabel1
> COMPONENT oEdiCod
> COMPONENT oLabel2
> COMPONENT oEdiNom
> COMPONENT oBtnAceptar
> COMPONENT oBtnCancelar
> Component oSqlTable2
> component oAdoDataSource2
> COMPONENT oAdoDataSource1
>
> METHOD CreateForm()
> METHOD EdiCodExit( oSender, oNextCtl )
> METHOD BtnAceptarCheckState( oSender )
> METHOD ASIGNADATASET( OSender)
> METHOD FormInitialize( oSender )
> METHOD FormCreate( oSender )
>
> ENDCLASS
>
> #include "FrmPaisEdi.xfm"
>
> //---------------------------------------------------------- --------------------
> METHOD FormCreate( oSender ) CLASS TFrmPaises
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>
> WITH OBJECT oSender:oDataSet
> // aca voy a cambiar la forma de validar el registro, voy a esperar
> el
> error que me envie la base de datos por registros duplicados
> IF :lOnAppend
> :SaveState( .t. )
> if Empty( ::oEdicod:Value )
> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
> oSender:Value := ""
> MsgBeep()
> ENDIF
> :RestoreState( .t. )
> ENDIF
> END WITH
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>
> RETURN !Empty( ::oEdiCod:Value )
>
> //---------------------------------------------------------- --------------------
> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>
> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
> //::oAdoDataSource1:lConnected := .t.
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
> METHOD asignadataset( oSender ) CLASS TFrmPaises
>
> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>
> RETURN Nil
> //-------------------------------------------------------
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Frenando,
>>
>> Posiblemente el problema se encuentra en como ha capturado el evento
>> OnGetData de las columnas del browse. En concreto puede haber hecho algo
>> así:
>>
>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>
>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>> en
>> edición, y el valor del buffer de edición cuando se encuentra en edición.
>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>> mostrando el valor del buffer que en ese momento está vacío.
>>
>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>> lo
>> que desea es SIEMPRE el valor del campo de esta forma:
>>
>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>> Buenas a Todos
>>>
>>> Espero me pueda explicar bien !!
>>>
>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6 para
>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>
>>> Tengo un evento para agregar un nuevo pais,
>>>
>>> //---------------------------------------------------------- ---
>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>> :lOnAppend := .t.
>>> ::oSqltable1:AddNew()
>>> :RequestState()
>>> :cText := "Agregar Paises"
>>> IF :ShowModal() == mrOK
>>> ::osqltable1:Update()
>>> ELSE
>>> ::osqltable1:Cancel()
>>> ENDIF
>>> ::oDbBrowse1:refresh()
>>> END WITH
>>> RETURN NIL
>>> //---------------------------------------------------------- -------
>>>
>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>> el
>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>> adjunto ??.
>>>
>>> Como puedo agregar un registro, siempre mostrando la información total
>>> del
>>> DBbrowse1 ??
>>>
>>> En espera de su ayuda
>>>
>>> Saludos ??
>>>
>>>
>>>
>>
>>
>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Consulta sobre Addnew()
Ok, muchas gracias por la ayuda. Intentare sus recomendaciones, aunque si es
problema de oracle, tendre que cambiar la forma de como agrego los
registros. Lo raro es que con el evento EDIT() esto no pasa.
Voy a probar y luego le comento lo que encuentre.
Saludos y Gracias !
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b9cc54$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo
> que
> comentas, es decir, mostrandose un dataset en un browse y lanzando un
> proceso AddNew en otro diálogo, y en dicho caso parece que funciona
> correctamente, y para nada se crea ese registro fantasma que aparece en la
> imagen que has mandado.
>
> Es posible que con OracleExpress se crea un registro fantasma en el
> dataset
> cuando se realiza una operación AddNew, pero me cuesta un montón creer que
> ADO funciona de distinta forma dependiendo del servidor con que se
> conecte.
>
> Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
> antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
> una llamada a Update() si es correcto o Cancel() si deseas cancelar la
> operación. Si haces un AddNew(), seguido inmediatamente de un Update()
> efectivamente se crea el registro. Espero que no sea este tu error.
>
> Por otra parte, existe una forma de hacer para que el ningún datacontrol,
> incluido el browse, se enteren temporalmente de modificaciones que se
> producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
> Te aconsejo que también les eches un vistazo a los métodos SaveState() y
> RestoreState() de TDataset.
>
> Si te siguiese fallando te ruego que intentes reproducir el problema con
> el
> ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo
> se
> produce con Oracle.
>
> Un saludo,
>
> Ignacio Ortiz
> www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
>> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
>> que
>> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
>> (Ver imagen1)
>>
>> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
>> (Ver imagen 2)
>>
>> El evento MantenAlta es el mismo que esta al final del corro. Veo el
>> ejemplo
>> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
>> conectado
>> usando ADO a una base de datos en oracle; o existe algun otro evento para
>> evitar que el registro en blanco que se agrega en el addnew se actualice
>> en
>> el browse, sino hasta que el usuario agregue correctamente el pais en la
>> pantalla respectiva
>>
>> Adjunto la el fuente de la pantalla de edicion de paises,
>>
>> Lo que estoy haciendo es creando un formulario base para luego ser usado
>> por
>> toda la aplicacion.
>>
>> Gracias por su ayuda y saludos,
>>
>> //-------------------------------------------------------
>> #include "Xailer.ch"
>>
>> CLASS TFrmPaises FROM TForm
>>
>> DATA lOnAppend INIT .f.
>> DATA oDbfPais
>>
>> COMPONENT oLabel1
>> COMPONENT oEdiCod
>> COMPONENT oLabel2
>> COMPONENT oEdiNom
>> COMPONENT oBtnAceptar
>> COMPONENT oBtnCancelar
>> Component oSqlTable2
>> component oAdoDataSource2
>> COMPONENT oAdoDataSource1
>>
>> METHOD CreateForm()
>> METHOD EdiCodExit( oSender, oNextCtl )
>> METHOD BtnAceptarCheckState( oSender )
>> METHOD ASIGNADATASET( OSender)
>> METHOD FormInitialize( oSender )
>> METHOD FormCreate( oSender )
>>
>> ENDCLASS
>>
>> #include "FrmPaisEdi.xfm"
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormCreate( oSender ) CLASS TFrmPaises
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>>
>> WITH OBJECT oSender:oDataSet
>> // aca voy a cambiar la forma de validar el registro, voy a esperar
>> el
>> error que me envie la base de datos por registros duplicados
>> IF :lOnAppend
>> :SaveState( .t. )
>> if Empty( ::oEdicod:Value )
>> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
>> oSender:Value := ""
>> MsgBeep()
>> ENDIF
>> :RestoreState( .t. )
>> ENDIF
>> END WITH
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>>
>> RETURN !Empty( ::oEdiCod:Value )
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>>
>> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
>> //::oAdoDataSource1:lConnected := .t.
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD asignadataset( oSender ) CLASS TFrmPaises
>>
>> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>>
>> RETURN Nil
>> //-------------------------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Frenando,
>>>
>>> Posiblemente el problema se encuentra en como ha capturado el evento
>>> OnGetData de las columnas del browse. En concreto puede haber hecho
>>> algo
>>> así:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>>
>>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>>> en
>>> edición, y el valor del buffer de edición cuando se encuentra en
>>> edición.
>>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>>> mostrando el valor del buffer que en ese momento está vacío.
>>>
>>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>>> lo
>>> que desea es SIEMPRE el valor del campo de esta forma:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>>
>>> Un saludo
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>>> Buenas a Todos
>>>>
>>>> Espero me pueda explicar bien !!
>>>>
>>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6
>>>> para
>>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>>
>>>> Tengo un evento para agregar un nuevo pais,
>>>>
>>>> //---------------------------------------------------------- ---
>>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>>> :lOnAppend := .t.
>>>> ::oSqltable1:AddNew()
>>>> :RequestState()
>>>> :cText := "Agregar Paises"
>>>> IF :ShowModal() == mrOK
>>>> ::osqltable1:Update()
>>>> ELSE
>>>> ::osqltable1:Cancel()
>>>> ENDIF
>>>> ::oDbBrowse1:refresh()
>>>> END WITH
>>>> RETURN NIL
>>>> //---------------------------------------------------------- -------
>>>>
>>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>>> el
>>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>>> adjunto ??.
>>>>
>>>> Como puedo agregar un registro, siempre mostrando la información total
>>>> del
>>>> DBbrowse1 ??
>>>>
>>>> En espera de su ayuda
>>>>
>>>> Saludos ??
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
problema de oracle, tendre que cambiar la forma de como agrego los
registros. Lo raro es que con el evento EDIT() esto no pasa.
Voy a probar y luego le comento lo que encuentre.
Saludos y Gracias !
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b9cc54$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo
> que
> comentas, es decir, mostrandose un dataset en un browse y lanzando un
> proceso AddNew en otro diálogo, y en dicho caso parece que funciona
> correctamente, y para nada se crea ese registro fantasma que aparece en la
> imagen que has mandado.
>
> Es posible que con OracleExpress se crea un registro fantasma en el
> dataset
> cuando se realiza una operación AddNew, pero me cuesta un montón creer que
> ADO funciona de distinta forma dependiendo del servidor con que se
> conecte.
>
> Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
> antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
> una llamada a Update() si es correcto o Cancel() si deseas cancelar la
> operación. Si haces un AddNew(), seguido inmediatamente de un Update()
> efectivamente se crea el registro. Espero que no sea este tu error.
>
> Por otra parte, existe una forma de hacer para que el ningún datacontrol,
> incluido el browse, se enteren temporalmente de modificaciones que se
> producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
> Te aconsejo que también les eches un vistazo a los métodos SaveState() y
> RestoreState() de TDataset.
>
> Si te siguiese fallando te ruego que intentes reproducir el problema con
> el
> ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo
> se
> produce con Oracle.
>
> Un saludo,
>
> Ignacio Ortiz
> www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
>> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
>> que
>> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
>> (Ver imagen1)
>>
>> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
>> (Ver imagen 2)
>>
>> El evento MantenAlta es el mismo que esta al final del corro. Veo el
>> ejemplo
>> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
>> conectado
>> usando ADO a una base de datos en oracle; o existe algun otro evento para
>> evitar que el registro en blanco que se agrega en el addnew se actualice
>> en
>> el browse, sino hasta que el usuario agregue correctamente el pais en la
>> pantalla respectiva
>>
>> Adjunto la el fuente de la pantalla de edicion de paises,
>>
>> Lo que estoy haciendo es creando un formulario base para luego ser usado
>> por
>> toda la aplicacion.
>>
>> Gracias por su ayuda y saludos,
>>
>> //-------------------------------------------------------
>> #include "Xailer.ch"
>>
>> CLASS TFrmPaises FROM TForm
>>
>> DATA lOnAppend INIT .f.
>> DATA oDbfPais
>>
>> COMPONENT oLabel1
>> COMPONENT oEdiCod
>> COMPONENT oLabel2
>> COMPONENT oEdiNom
>> COMPONENT oBtnAceptar
>> COMPONENT oBtnCancelar
>> Component oSqlTable2
>> component oAdoDataSource2
>> COMPONENT oAdoDataSource1
>>
>> METHOD CreateForm()
>> METHOD EdiCodExit( oSender, oNextCtl )
>> METHOD BtnAceptarCheckState( oSender )
>> METHOD ASIGNADATASET( OSender)
>> METHOD FormInitialize( oSender )
>> METHOD FormCreate( oSender )
>>
>> ENDCLASS
>>
>> #include "FrmPaisEdi.xfm"
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormCreate( oSender ) CLASS TFrmPaises
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>>
>> WITH OBJECT oSender:oDataSet
>> // aca voy a cambiar la forma de validar el registro, voy a esperar
>> el
>> error que me envie la base de datos por registros duplicados
>> IF :lOnAppend
>> :SaveState( .t. )
>> if Empty( ::oEdicod:Value )
>> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
>> oSender:Value := ""
>> MsgBeep()
>> ENDIF
>> :RestoreState( .t. )
>> ENDIF
>> END WITH
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>>
>> RETURN !Empty( ::oEdiCod:Value )
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>>
>> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
>> //::oAdoDataSource1:lConnected := .t.
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD asignadataset( oSender ) CLASS TFrmPaises
>>
>> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>>
>> RETURN Nil
>> //-------------------------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Frenando,
>>>
>>> Posiblemente el problema se encuentra en como ha capturado el evento
>>> OnGetData de las columnas del browse. En concreto puede haber hecho
>>> algo
>>> así:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>>
>>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>>> en
>>> edición, y el valor del buffer de edición cuando se encuentra en
>>> edición.
>>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>>> mostrando el valor del buffer que en ese momento está vacío.
>>>
>>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>>> lo
>>> que desea es SIEMPRE el valor del campo de esta forma:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>>
>>> Un saludo
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>>> Buenas a Todos
>>>>
>>>> Espero me pueda explicar bien !!
>>>>
>>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6
>>>> para
>>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>>
>>>> Tengo un evento para agregar un nuevo pais,
>>>>
>>>> //---------------------------------------------------------- ---
>>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>>> :lOnAppend := .t.
>>>> ::oSqltable1:AddNew()
>>>> :RequestState()
>>>> :cText := "Agregar Paises"
>>>> IF :ShowModal() == mrOK
>>>> ::osqltable1:Update()
>>>> ELSE
>>>> ::osqltable1:Cancel()
>>>> ENDIF
>>>> ::oDbBrowse1:refresh()
>>>> END WITH
>>>> RETURN NIL
>>>> //---------------------------------------------------------- -------
>>>>
>>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>>> el
>>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>>> adjunto ??.
>>>>
>>>> Como puedo agregar un registro, siempre mostrando la información total
>>>> del
>>>> DBbrowse1 ??
>>>>
>>>> En espera de su ayuda
>>>>
>>>> Saludos ??
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Consulta sobre Addnew()
Buenas Noches.
El probado con varias opciones para tratar de solucionar el problema, solo
para aclarar un poco, cuando invoco el evento ADDNEW, el dbbrowse queda
vacio esto lo puedo ver luego de invocar el evento refresh y antes de llamar
el dialogo modal.
Pensando en voz alta, como si cuando se cuando voy a agregar el registro, el
dataset solo me muestra el registro que quiero agregar y no todos los demas.
Aunque seguire probando, ya que esta rutina quiero que sea la base de toda
mi aplicacion, si encuentro la solucion luego le comento. Adjunto otra vez
parte del metodo MantenAlta de mi aplicacion.
//---------------------------------------------------------- ---------
METHOD MantenAlta( oSender ) CLASS TFrmPais
WITH OBJECT TFRMPAISES():New( Application:oMainForm )
:lOnAppend := .t.
::osqltable1:addnew()
:cText := "Agregar Paises"
// al invocar este refresh, es donde veo que queda vacio el dbbrowse y
dataset
::oDbBrowse1:refresh()
:RequestState()
IF :ShowModal() == mrOK
::osqltable1:Update()
ELSE
::osqltable1:Cancel()
ENDIF
// Esto para que me vuelva a refrescar el dbbrowse cuando regresa del
dialogo modal
::oDbBrowse1:refresh()
END WITH
RETURN NIL
//---------------------------------------------------------- ---------
Saludos y Gracias
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b9cc54$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo
> que
> comentas, es decir, mostrandose un dataset en un browse y lanzando un
> proceso AddNew en otro diálogo, y en dicho caso parece que funciona
> correctamente, y para nada se crea ese registro fantasma que aparece en la
> imagen que has mandado.
>
> Es posible que con OracleExpress se crea un registro fantasma en el
> dataset
> cuando se realiza una operación AddNew, pero me cuesta un montón creer que
> ADO funciona de distinta forma dependiendo del servidor con que se
> conecte.
>
> Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
> antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
> una llamada a Update() si es correcto o Cancel() si deseas cancelar la
> operación. Si haces un AddNew(), seguido inmediatamente de un Update()
> efectivamente se crea el registro. Espero que no sea este tu error.
>
> Por otra parte, existe una forma de hacer para que el ningún datacontrol,
> incluido el browse, se enteren temporalmente de modificaciones que se
> producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
> Te aconsejo que también les eches un vistazo a los métodos SaveState() y
> RestoreState() de TDataset.
>
> Si te siguiese fallando te ruego que intentes reproducir el problema con
> el
> ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo
> se
> produce con Oracle.
>
> Un saludo,
>
> Ignacio Ortiz
> www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
>> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
>> que
>> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
>> (Ver imagen1)
>>
>> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
>> (Ver imagen 2)
>>
>> El evento MantenAlta es el mismo que esta al final del corro. Veo el
>> ejemplo
>> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
>> conectado
>> usando ADO a una base de datos en oracle; o existe algun otro evento para
>> evitar que el registro en blanco que se agrega en el addnew se actualice
>> en
>> el browse, sino hasta que el usuario agregue correctamente el pais en la
>> pantalla respectiva
>>
>> Adjunto la el fuente de la pantalla de edicion de paises,
>>
>> Lo que estoy haciendo es creando un formulario base para luego ser usado
>> por
>> toda la aplicacion.
>>
>> Gracias por su ayuda y saludos,
>>
>> //-------------------------------------------------------
>> #include "Xailer.ch"
>>
>> CLASS TFrmPaises FROM TForm
>>
>> DATA lOnAppend INIT .f.
>> DATA oDbfPais
>>
>> COMPONENT oLabel1
>> COMPONENT oEdiCod
>> COMPONENT oLabel2
>> COMPONENT oEdiNom
>> COMPONENT oBtnAceptar
>> COMPONENT oBtnCancelar
>> Component oSqlTable2
>> component oAdoDataSource2
>> COMPONENT oAdoDataSource1
>>
>> METHOD CreateForm()
>> METHOD EdiCodExit( oSender, oNextCtl )
>> METHOD BtnAceptarCheckState( oSender )
>> METHOD ASIGNADATASET( OSender)
>> METHOD FormInitialize( oSender )
>> METHOD FormCreate( oSender )
>>
>> ENDCLASS
>>
>> #include "FrmPaisEdi.xfm"
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormCreate( oSender ) CLASS TFrmPaises
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>>
>> WITH OBJECT oSender:oDataSet
>> // aca voy a cambiar la forma de validar el registro, voy a esperar
>> el
>> error que me envie la base de datos por registros duplicados
>> IF :lOnAppend
>> :SaveState( .t. )
>> if Empty( ::oEdicod:Value )
>> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
>> oSender:Value := ""
>> MsgBeep()
>> ENDIF
>> :RestoreState( .t. )
>> ENDIF
>> END WITH
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>>
>> RETURN !Empty( ::oEdiCod:Value )
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>>
>> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
>> //::oAdoDataSource1:lConnected := .t.
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD asignadataset( oSender ) CLASS TFrmPaises
>>
>> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>>
>> RETURN Nil
>> //-------------------------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Frenando,
>>>
>>> Posiblemente el problema se encuentra en como ha capturado el evento
>>> OnGetData de las columnas del browse. En concreto puede haber hecho
>>> algo
>>> así:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>>
>>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>>> en
>>> edición, y el valor del buffer de edición cuando se encuentra en
>>> edición.
>>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>>> mostrando el valor del buffer que en ese momento está vacío.
>>>
>>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>>> lo
>>> que desea es SIEMPRE el valor del campo de esta forma:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>>
>>> Un saludo
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>>> Buenas a Todos
>>>>
>>>> Espero me pueda explicar bien !!
>>>>
>>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6
>>>> para
>>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>>
>>>> Tengo un evento para agregar un nuevo pais,
>>>>
>>>> //---------------------------------------------------------- ---
>>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>>> :lOnAppend := .t.
>>>> ::oSqltable1:AddNew()
>>>> :RequestState()
>>>> :cText := "Agregar Paises"
>>>> IF :ShowModal() == mrOK
>>>> ::osqltable1:Update()
>>>> ELSE
>>>> ::osqltable1:Cancel()
>>>> ENDIF
>>>> ::oDbBrowse1:refresh()
>>>> END WITH
>>>> RETURN NIL
>>>> //---------------------------------------------------------- -------
>>>>
>>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>>> el
>>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>>> adjunto ??.
>>>>
>>>> Como puedo agregar un registro, siempre mostrando la información total
>>>> del
>>>> DBbrowse1 ??
>>>>
>>>> En espera de su ayuda
>>>>
>>>> Saludos ??
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
El probado con varias opciones para tratar de solucionar el problema, solo
para aclarar un poco, cuando invoco el evento ADDNEW, el dbbrowse queda
vacio esto lo puedo ver luego de invocar el evento refresh y antes de llamar
el dialogo modal.
Pensando en voz alta, como si cuando se cuando voy a agregar el registro, el
dataset solo me muestra el registro que quiero agregar y no todos los demas.
Aunque seguire probando, ya que esta rutina quiero que sea la base de toda
mi aplicacion, si encuentro la solucion luego le comento. Adjunto otra vez
parte del metodo MantenAlta de mi aplicacion.
//---------------------------------------------------------- ---------
METHOD MantenAlta( oSender ) CLASS TFrmPais
WITH OBJECT TFRMPAISES():New( Application:oMainForm )
:lOnAppend := .t.
::osqltable1:addnew()
:cText := "Agregar Paises"
// al invocar este refresh, es donde veo que queda vacio el dbbrowse y
dataset
::oDbBrowse1:refresh()
:RequestState()
IF :ShowModal() == mrOK
::osqltable1:Update()
ELSE
::osqltable1:Cancel()
ENDIF
// Esto para que me vuelva a refrescar el dbbrowse cuando regresa del
dialogo modal
::oDbBrowse1:refresh()
END WITH
RETURN NIL
//---------------------------------------------------------- ---------
Saludos y Gracias
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b9cc54$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Acabo de hacer pruebas utilizando ADO+Access, realizando exactamente lo
> que
> comentas, es decir, mostrandose un dataset en un browse y lanzando un
> proceso AddNew en otro diálogo, y en dicho caso parece que funciona
> correctamente, y para nada se crea ese registro fantasma que aparece en la
> imagen que has mandado.
>
> Es posible que con OracleExpress se crea un registro fantasma en el
> dataset
> cuando se realiza una operación AddNew, pero me cuesta un montón creer que
> ADO funciona de distinta forma dependiendo del servidor con que se
> conecte.
>
> Por si acaso te comento que tan sólo has de hacer la llamada a AddNew()
> antes de lanzar el diálogo modal y que a la salida de éste, deberás hacer
> una llamada a Update() si es correcto o Cancel() si deseas cancelar la
> operación. Si haces un AddNew(), seguido inmediatamente de un Update()
> efectivamente se crea el registro. Espero que no sea este tu error.
>
> Por otra parte, existe una forma de hacer para que el ningún datacontrol,
> incluido el browse, se enteren temporalmente de modificaciones que se
> producen en su dataset, y es a través de la propiedad oDataset:lUpdLinked.
> Te aconsejo que también les eches un vistazo a los métodos SaveState() y
> RestoreState() de TDataset.
>
> Si te siguiese fallando te ruego que intentes reproducir el problema con
> el
> ejemplo datacontrolsado2 pues dudo muy mucho que sea un error que sólo
> se
> produce con Oracle.
>
> Un saludo,
>
> Ignacio Ortiz
> www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45b6e8d4@news.xailer.com...]45b6e8d4@news.xailer.com...[/email]
>> Ok, gracias. Ya los cambios estan realizados, pero el problema en si es
>> que
>> cuando invoco el evento ADDNEW, en el Browse, me inserta una linea vacia.
>> (Ver imagen1)
>>
>> Luego le doy un refresh a la pantalla y el browse ya no me muestra nada
>> (Ver imagen 2)
>>
>> El evento MantenAlta es el mismo que esta al final del corro. Veo el
>> ejemplo
>> de DBFDATA6, y este problema no se me presenta. Recuerde que estoy
>> conectado
>> usando ADO a una base de datos en oracle; o existe algun otro evento para
>> evitar que el registro en blanco que se agrega en el addnew se actualice
>> en
>> el browse, sino hasta que el usuario agregue correctamente el pais en la
>> pantalla respectiva
>>
>> Adjunto la el fuente de la pantalla de edicion de paises,
>>
>> Lo que estoy haciendo es creando un formulario base para luego ser usado
>> por
>> toda la aplicacion.
>>
>> Gracias por su ayuda y saludos,
>>
>> //-------------------------------------------------------
>> #include "Xailer.ch"
>>
>> CLASS TFrmPaises FROM TForm
>>
>> DATA lOnAppend INIT .f.
>> DATA oDbfPais
>>
>> COMPONENT oLabel1
>> COMPONENT oEdiCod
>> COMPONENT oLabel2
>> COMPONENT oEdiNom
>> COMPONENT oBtnAceptar
>> COMPONENT oBtnCancelar
>> Component oSqlTable2
>> component oAdoDataSource2
>> COMPONENT oAdoDataSource1
>>
>> METHOD CreateForm()
>> METHOD EdiCodExit( oSender, oNextCtl )
>> METHOD BtnAceptarCheckState( oSender )
>> METHOD ASIGNADATASET( OSender)
>> METHOD FormInitialize( oSender )
>> METHOD FormCreate( oSender )
>>
>> ENDCLASS
>>
>> #include "FrmPaisEdi.xfm"
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormCreate( oSender ) CLASS TFrmPaises
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD EdiCodExit( oSender, oNextCtl ) CLASS TFrmPaises
>>
>> WITH OBJECT oSender:oDataSet
>> // aca voy a cambiar la forma de validar el registro, voy a esperar
>> el
>> error que me envie la base de datos por registros duplicados
>> IF :lOnAppend
>> :SaveState( .t. )
>> if Empty( ::oEdicod:Value )
>> ElseIF oSender:oDataset:locate("Pais='"+::oedicod:value+"'" )
>> oSender:Value := ""
>> MsgBeep()
>> ENDIF
>> :RestoreState( .t. )
>> ENDIF
>> END WITH
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD BtnAceptarCheckState( oSender ) CLASS TFrmPaises
>>
>> RETURN !Empty( ::oEdiCod:Value )
>>
>> //---------------------------------------------------------- --------------------
>> METHOD FormInitialize( oSender ) CLASS TFrmPaises
>>
>> //::OaDOdATAsOURCE1:cConnect:= '&OP_ORACLE'
>> //::oAdoDataSource1:lConnected := .t.
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>> METHOD asignadataset( oSender ) CLASS TFrmPaises
>>
>> oSender:oDataSet := Application:oMainForm:oTabpais:osqltable1
>>
>> RETURN Nil
>> //-------------------------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b62baf$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Frenando,
>>>
>>> Posiblemente el problema se encuentra en como ha capturado el evento
>>> OnGetData de las columnas del browse. En concreto puede haber hecho
>>> algo
>>> así:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName }
>>>
>>> Fijese que oDataSet:FieldName retorna el valor del campo cuando NO está
>>> en
>>> edición, y el valor del buffer de edición cuando se encuentra en
>>> edición.
>>> Como se encuentra en edición (al llamar a AddNew) la columna le está
>>> mostrando el valor del buffer que en ese momento está vacío.
>>>
>>> Para solucionarlo simplemente indique en el OnGetData de la columna que
>>> lo
>>> que desea es SIEMPRE el valor del campo de esta forma:
>>>
>>> oCol:OnGetData := {|o, c, n| oDataSet:FieldName( dsFIELD ) }
>>>
>>> Un saludo
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45b62965@news.xailer.com...]45b62965@news.xailer.com...[/email]
>>>> Buenas a Todos
>>>>
>>>> Espero me pueda explicar bien !!
>>>>
>>>> Tengo una consulta, estoy tomando el ejemplo de la carpeta DBFDATA6
>>>> para
>>>> generar una pantalla de captura de datos, pero sobre Oracle Express.
>>>>
>>>> Tengo un evento para agregar un nuevo pais,
>>>>
>>>> //---------------------------------------------------------- ---
>>>> METHOD MantenAlta( oSender ) CLASS TFrmPais
>>>> WITH OBJECT TFRMPAISES():New( Application:oMainForm )
>>>> :lOnAppend := .t.
>>>> ::oSqltable1:AddNew()
>>>> :RequestState()
>>>> :cText := "Agregar Paises"
>>>> IF :ShowModal() == mrOK
>>>> ::osqltable1:Update()
>>>> ELSE
>>>> ::osqltable1:Cancel()
>>>> ENDIF
>>>> ::oDbBrowse1:refresh()
>>>> END WITH
>>>> RETURN NIL
>>>> //---------------------------------------------------------- -------
>>>>
>>>> Mi pregunta es, cuando selecciono el metodo ADDNEW(), los registros en
>>>> el
>>>> dbbrowse1 son 0, y por eso me queda la pantalla tal como el archivo
>>>> adjunto ??.
>>>>
>>>> Como puedo agregar un registro, siempre mostrando la información total
>>>> del
>>>> DBbrowse1 ??
>>>>
>>>> En espera de su ayuda
>>>>
>>>> Saludos ??
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
>