Que hago mal aqui?
Me marca:
Error Method "AddNew()" not declared in class tDBFRecords
Error Method "Delete()" not declared in class tDBFRecords
Error Method "Edit()" not declared in class tDBFRecords
Class tDBFRecords From tForm
COMPONENT oDBBrowse1
COMPONENT oDataSet
COMPONENT oDataSource
PROPERTY nTag INIT 1 WRITE InLine ::SetTag( Value )
DATA oTagMenu
Data oTagBtn
Data aTags
DATA oToolBar
Data oRebarBand
DATA oFilterBtn
Data bEdit
METHOD Addnew() VIRTUAL
Method Delete() VIRTUAL
Method Edit() VIRTUAL
METHOD SetTag( Value )
METHOD Filter()
Method FormInitialize( oSender )
EndClass
METHOD FormInitialize( oSender ) CLASS tDBFRecords
LOCAL oSortMenu
LOCAL aTags
LOCAL nFor
//este menu es para los indices del cdx.
oSortMenu := TMenu():Create( Self, .t. )
::aTags := ::oDataSet:GetTags()
FOR nFor := 1 to len( ::aTags )
WITH OBJECT TMenuItem():New( oSortMenu )
:cText := "Orden: " + ::aTags[ nFor ]
:Cargo := nFor
:OnClick := {|o| ::nTag := o:Cargo }
:Create()
END
NEXT
WITH OBJECT ::oToolBar := TToolBar():New( ::oRebar1 )
:lList := .t.
:lAutoSize := .t.
:Create()
::oTagBtn := :AddButton( "", "bOrden",,, "Orden: ", {|| ::nTag++ },
oSortMenu )
::nTag := 1
WITH OBJECT ::oFilterBtn := :AddButton( "", "bFiltro",,, "Crear
Filtro", {|| ::Filter() } )
:lChecked := .f.
END
:AddSeparator(10)
:AddButton( "", "bInicio",,, "Primer Registro", {||
::oDBBrowse1:GoTop() } )
:AddButton( "", "bAnterior",,, "Registro Anterior", {||
::oDBBrowse1:GoUp() } )
:AddButton( "", "bSiguiente",,, "Siguiente Registro", {||
::oDBBrowse1:GoDown() } )
:AddButton( "", "bUltimo",,, "Último Registro", {||
::oDBBrowse1:GoBottom() } )
:AddSeparator(10)
:AddButton( "", "bNuevo",,, "Nuevo Registro", {|| ::AddNew() } )
:AddButton( "", "bEditar",,, "Editar Registro", {|| ::Edit() } )
:AddButton( "", "bEliminar",,, "Borrar Registro", {|| ::Delete() } )
//:AddButton( "", "bMovimientos",,, "Ver Movimientos", {||
TFrmMovtos():New( Self ):ShowModal() } )
:AddSeparator(10)
:AddButton( "", "XA_BMP_PRINTER",,, "Impresora", {|| Msginfo( "Not
available" ) } )
:AddButton( "", "XA_BMP_EXIT",,, "Regresar al Menú", {|| ::Close() } )
END
WITH OBJECT ::oRebarBand := TRebarBand():New( ::oRebar1 )
:oControl := ::oToolBar
:Create()
END
Return ( Self )
//---------------------------------------------------------- --------------------
// Rutina para Agregar Registros
//---------------------------------------------------------- --------------------
METHOD AddNew() CLASS tDBFRecords
LOCAL oFrm
WITH OBJECT oFrm := Eval(::bEdit)
:cText := "Agregar Nuevo"
::oDataSet:AddNew()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:Refresh()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Eliminar Registros
//---------------------------------------------------------- --------------------
METHOD Delete() CLASS tDBFRecords
if MsgYesNo( "Desea Eliminar el Regisro Actual?" )
if ::oDataSet:Delete()
If ::oDataSet:Eof()
::oDataSet:Skip( -1 )
endif
::oDBBrowse1:Refresh()
endif
endif
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Editar Registros
//---------------------------------------------------------- --------------------
METHOD Edit() CLASS tDBFRecords
LOCAL oFrm
WITH OBJECT oFrm := Eval(::bEdit)
:cText := "Editando Registro " // + ::oDataset:Field[3]
::oDataSet:Edit()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:RefreshCurrent()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
METHOD SetTag( nTag ) CLASS tDBFRecords
if nTag > len( ::aTags )
nTag := 1
endif
::FnTag := nTag
if ::oDataSet != nil
::oDataSet:OrdSetFocus( nTag )
endif
if ::oDBBrowse1 != nil
::oDBBrowse1:Refresh( .t. )
endif
if ::oTagBtn != nil
::oTagBtn:cText := "Orden: " + ::aTags[ nTag ]
endif
RETURN nil
//---------------------------------------------------------- --------------------
METHOD Filter() CLASS tDBFRecords
local lFilterBar
WITH OBJECT ::oFilterBtn
lFilterBar := !:lChecked
:lChecked := lFilterBar
END
WITH OBJECT ::oDBBrowse1
:lFilterBar := !:lFilterBar
END
RETURN NIL
Saludos.
Ramón Zea
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.
Mantenimientos DBF: Virtual Error
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
Mantenimientos DBF: Virtual Error
Ramón Zea
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Mantenimientos DBF: Virtual Error
Ramón,
simplemente quíta la cláusula VIRTUAL de esos métodos. Esa cláusula sirve
para declarar métodos y que existan sin tener nada de código, por lo que no
hay que desarrollarlos. Y si los desarrollas, entonces no puedes usar esta
cláusula.
--
Un saludo,
José F. Giménez
simplemente quíta la cláusula VIRTUAL de esos métodos. Esa cláusula sirve
para declarar métodos y que existan sin tener nada de código, por lo que no
hay que desarrollarlos. Y si los desarrollas, entonces no puedes usar esta
cláusula.
--
Un saludo,
José F. Giménez
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
Mantenimientos DBF: Virtual Error
Perdon lo entendi alrevez, de todos modos lo quite y jalo,
gracias,
Ramón Zea
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=42e2188c@ozsrvnegro.ozlan.local...]42e2188c@ozsrvnegro.ozlan.local...[/email]
> Ramón,
>
> simplemente quíta la cláusula VIRTUAL de esos métodos. Esa cláusula sirve
> para declarar métodos y que existan sin tener nada de código, por lo que
> no hay que desarrollarlos. Y si los desarrollas, entonces no puedes usar
> esta cláusula.
>
> --
> Un saludo,
>
> José F. Giménez
>
gracias,
Ramón Zea
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=42e2188c@ozsrvnegro.ozlan.local...]42e2188c@ozsrvnegro.ozlan.local...[/email]
> Ramón,
>
> simplemente quíta la cláusula VIRTUAL de esos métodos. Esa cláusula sirve
> para declarar métodos y que existan sin tener nada de código, por lo que
> no hay que desarrollarlos. Y si los desarrollas, entonces no puedes usar
> esta cláusula.
>
> --
> Un saludo,
>
> José F. Giménez
>
Ramón Zea
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
-
- Mensajes: 1831
- Registrado: Mar Oct 11, 2005 9:53 am
Mantenimientos DBF: Virtual Error
Bueno aqui dejo el codigo de una clase comun para dar mantenimiento a bases
de datos, esto es:
Agregar, Borrar, Modificar, Reportear.
El reporte no esta listo aun, pero pronto lo empiezo a desarrollar con un
metodo comun.
El codigo ha qeudado de la manera siguiente, gracias al aayuda de F.Gimenez.
Si no les gusta el nombre de la clase cabienla, yo la inicie asi por prueba
y pues asi la deje. jejejej
Saludos.
Ramón Zea
/*
* Proyecto: ZeaSoftware
* Fichero: ManttoDBF.prg
* Descripción: Clase para mantenimiento de Catalogos de Base de Datos
* Autor: Ramón Rodríguez Zea
* Fecha: 23/07/2005
*/
#include "Xailer.ch"
Class tDBFRecords From tForm
COMPONENT oDBBrowse1
COMPONENT oDataSet
COMPONENT oDataSource
PROPERTY nTag INIT 1 WRITE InLine ::SetTag( Value )
DATA oTagMenu
Data oTagBtn
Data aTags
DATA oToolBar
Data oRebarBand
DATA oFilterBtn
METHOD Addnew()
Method Delete()
Method Edit(oFrm)
METHOD SetTag( Value )
METHOD Filter()
Method FormInitialize( oSender )
METHOD AssignDataSet( oSender )
EndClass
METHOD AssignDataSet( oSender ) CLASS tDBFRecords
oSender:oDataSet := ::oDataSet
RETURN Nil
METHOD FormInitialize( oSender ) CLASS tDBFRecords
LOCAL oSortMenu
LOCAL aTags
LOCAL nFor
//este menu es para los indices del cdx.
oSortMenu := TMenu():Create( Self, .t. )
::aTags := ::oDataSet:GetTags()
FOR nFor := 1 to len( ::aTags )
WITH OBJECT TMenuItem():New( oSortMenu )
:cText := "Orden: " + ::aTags[ nFor ]
:Cargo := nFor
:OnClick := {|o| ::nTag := o:Cargo }
:Create()
END
NEXT
WITH OBJECT ::oToolBar := TToolBar():New( ::oRebar1 )
:lList := .t.
:lAutoSize := .t.
:Create()
::oTagBtn := :AddButton( "", "bOrden",,, "Orden: ", {|| ::nTag++ },
oSortMenu )
::nTag := 1
WITH OBJECT ::oFilterBtn := :AddButton( "", "bFiltro",,, "Crear
Filtro", {|| ::Filter() } )
:lChecked := .f.
END
:AddSeparator(10)
:AddButton( "", "bInicio",,, "Primer Registro", {||
::oDBBrowse1:GoTop() } )
:AddButton( "", "bAnterior",,, "Registro Anterior", {||
::oDBBrowse1:GoUp() } )
:AddButton( "", "bSiguiente",,, "Siguiente Registro", {||
::oDBBrowse1:GoDown() } )
:AddButton( "", "bUltimo",,, "Último Registro", {||
::oDBBrowse1:GoBottom() } )
:AddSeparator(10)
:AddButton( "", "bNuevo",,, "Nuevo Registro", {|| ::AddNew() } )
:AddButton( "", "bEditar",,, "Editar Registro", {|| ::Edit() } )
:AddButton( "", "bEliminar",,, "Borrar Registro", {|| ::Delete() } )
//:AddButton( "", "bMovimientos",,, "Ver Movimientos", {||
TFrmMovtos():New( Self ):ShowModal() } )
:AddSeparator(10)
:AddButton( "", "XA_BMP_PRINTER",,, "Impresora", {|| Msginfo( "Not
available" ) } )
:AddButton( "", "XA_BMP_EXIT",,, "Regresar al Menú", {|| ::Close() } )
END
WITH OBJECT ::oRebarBand := TRebarBand():New( ::oRebar1 )
:oControl := ::oToolBar
:Create()
END
Return ( Self )
//---------------------------------------------------------- --------------------
// Rutina para Agregar Registros
//---------------------------------------------------------- --------------------
METHOD AddNew(oFrm) CLASS tDBFRecords
WITH OBJECT oFrm
:cText := "Agregar Nuevo"
::oDataSet:AddNew()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:Refresh()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Eliminar Registros
//---------------------------------------------------------- --------------------
METHOD Delete() CLASS tDBFRecords
if MsgYesNo( "Desea Eliminar el Regisro Actual?" )
if ::oDataSet:Delete()
If ::oDataSet:Eof()
::oDataSet:Skip( -1 )
endif
::oDBBrowse1:Refresh()
endif
endif
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Editar Registros
//---------------------------------------------------------- --------------------
METHOD Edit(oFrm) CLASS tDBFRecords
WITH OBJECT oFrm
:cText := "Editando Registro " // + ::oDataset:Field[3]
::oDataSet:Edit()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:RefreshCurrent()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
METHOD SetTag( nTag ) CLASS tDBFRecords
if nTag > len( ::aTags )
nTag := 1
endif
::FnTag := nTag
if ::oDataSet != nil
::oDataSet:OrdSetFocus( nTag )
endif
if ::oDBBrowse1 != nil
::oDBBrowse1:Refresh( .t. )
endif
if ::oTagBtn != nil
::oTagBtn:cText := "Orden: " + ::aTags[ nTag ]
endif
RETURN nil
//---------------------------------------------------------- --------------------
METHOD Filter() CLASS tDBFRecords
local lFilterBar
WITH OBJECT ::oFilterBtn
lFilterBar := !:lChecked
:lChecked := lFilterBar
END
WITH OBJECT ::oDBBrowse1
:lFilterBar := !:lFilterBar
END
RETURN NIL
/*
* Fin: ManttoDBF.prg
*/
/*
* Proyecto: SCIWin
* Fichero: Clientes.prg
* Descripción:
* Autor: Ramón Rodríguez Zea - ZeaSoftware
* Fecha: 26/06/2005
*/
#include "Xailer.ch"
CLASS TFrmClientes FROM tDBFRecords
COMPONENT oReBar1
COMPONENT oDBBrowse1 //el nombre es comun y es el que usa la classe de
Mantenimiento
COMPONENT oStatusBar1
METHOD CreateForm()
METHOD FormInitialize( oSender )
Method Edit( oSender ) InLine Super:Edit( tFrmEditClie():New( Self ) )
Method Add( oSender ) InLine Super:Add( tFrmEditClie():New( Self ) )
ENDCLASS
/*
Aqui hacen su Forma con el IDE
*/
#include "Clientes.xfm"
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TFrmClientes
RETURN Super:FormInitialize( oSender )
//---------------------------------------------------------- --------------------
/*
* Fin: Clientes.prg
*/
de datos, esto es:
Agregar, Borrar, Modificar, Reportear.
El reporte no esta listo aun, pero pronto lo empiezo a desarrollar con un
metodo comun.
El codigo ha qeudado de la manera siguiente, gracias al aayuda de F.Gimenez.
Si no les gusta el nombre de la clase cabienla, yo la inicie asi por prueba
y pues asi la deje. jejejej
Saludos.
Ramón Zea
/*
* Proyecto: ZeaSoftware
* Fichero: ManttoDBF.prg
* Descripción: Clase para mantenimiento de Catalogos de Base de Datos
* Autor: Ramón Rodríguez Zea
* Fecha: 23/07/2005
*/
#include "Xailer.ch"
Class tDBFRecords From tForm
COMPONENT oDBBrowse1
COMPONENT oDataSet
COMPONENT oDataSource
PROPERTY nTag INIT 1 WRITE InLine ::SetTag( Value )
DATA oTagMenu
Data oTagBtn
Data aTags
DATA oToolBar
Data oRebarBand
DATA oFilterBtn
METHOD Addnew()
Method Delete()
Method Edit(oFrm)
METHOD SetTag( Value )
METHOD Filter()
Method FormInitialize( oSender )
METHOD AssignDataSet( oSender )
EndClass
METHOD AssignDataSet( oSender ) CLASS tDBFRecords
oSender:oDataSet := ::oDataSet
RETURN Nil
METHOD FormInitialize( oSender ) CLASS tDBFRecords
LOCAL oSortMenu
LOCAL aTags
LOCAL nFor
//este menu es para los indices del cdx.
oSortMenu := TMenu():Create( Self, .t. )
::aTags := ::oDataSet:GetTags()
FOR nFor := 1 to len( ::aTags )
WITH OBJECT TMenuItem():New( oSortMenu )
:cText := "Orden: " + ::aTags[ nFor ]
:Cargo := nFor
:OnClick := {|o| ::nTag := o:Cargo }
:Create()
END
NEXT
WITH OBJECT ::oToolBar := TToolBar():New( ::oRebar1 )
:lList := .t.
:lAutoSize := .t.
:Create()
::oTagBtn := :AddButton( "", "bOrden",,, "Orden: ", {|| ::nTag++ },
oSortMenu )
::nTag := 1
WITH OBJECT ::oFilterBtn := :AddButton( "", "bFiltro",,, "Crear
Filtro", {|| ::Filter() } )
:lChecked := .f.
END
:AddSeparator(10)
:AddButton( "", "bInicio",,, "Primer Registro", {||
::oDBBrowse1:GoTop() } )
:AddButton( "", "bAnterior",,, "Registro Anterior", {||
::oDBBrowse1:GoUp() } )
:AddButton( "", "bSiguiente",,, "Siguiente Registro", {||
::oDBBrowse1:GoDown() } )
:AddButton( "", "bUltimo",,, "Último Registro", {||
::oDBBrowse1:GoBottom() } )
:AddSeparator(10)
:AddButton( "", "bNuevo",,, "Nuevo Registro", {|| ::AddNew() } )
:AddButton( "", "bEditar",,, "Editar Registro", {|| ::Edit() } )
:AddButton( "", "bEliminar",,, "Borrar Registro", {|| ::Delete() } )
//:AddButton( "", "bMovimientos",,, "Ver Movimientos", {||
TFrmMovtos():New( Self ):ShowModal() } )
:AddSeparator(10)
:AddButton( "", "XA_BMP_PRINTER",,, "Impresora", {|| Msginfo( "Not
available" ) } )
:AddButton( "", "XA_BMP_EXIT",,, "Regresar al Menú", {|| ::Close() } )
END
WITH OBJECT ::oRebarBand := TRebarBand():New( ::oRebar1 )
:oControl := ::oToolBar
:Create()
END
Return ( Self )
//---------------------------------------------------------- --------------------
// Rutina para Agregar Registros
//---------------------------------------------------------- --------------------
METHOD AddNew(oFrm) CLASS tDBFRecords
WITH OBJECT oFrm
:cText := "Agregar Nuevo"
::oDataSet:AddNew()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:Refresh()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Eliminar Registros
//---------------------------------------------------------- --------------------
METHOD Delete() CLASS tDBFRecords
if MsgYesNo( "Desea Eliminar el Regisro Actual?" )
if ::oDataSet:Delete()
If ::oDataSet:Eof()
::oDataSet:Skip( -1 )
endif
::oDBBrowse1:Refresh()
endif
endif
RETURN NIL
//---------------------------------------------------------- --------------------
// Rutina para Editar Registros
//---------------------------------------------------------- --------------------
METHOD Edit(oFrm) CLASS tDBFRecords
WITH OBJECT oFrm
:cText := "Editando Registro " // + ::oDataset:Field[3]
::oDataSet:Edit()
:ShowModal()
if :nModalResult == mrOK
::oDataSet:Update()
::oDBBrowse1:RefreshCurrent()
else
::oDataSet:Cancel()
endif
END WITH
RETURN NIL
//---------------------------------------------------------- --------------------
METHOD SetTag( nTag ) CLASS tDBFRecords
if nTag > len( ::aTags )
nTag := 1
endif
::FnTag := nTag
if ::oDataSet != nil
::oDataSet:OrdSetFocus( nTag )
endif
if ::oDBBrowse1 != nil
::oDBBrowse1:Refresh( .t. )
endif
if ::oTagBtn != nil
::oTagBtn:cText := "Orden: " + ::aTags[ nTag ]
endif
RETURN nil
//---------------------------------------------------------- --------------------
METHOD Filter() CLASS tDBFRecords
local lFilterBar
WITH OBJECT ::oFilterBtn
lFilterBar := !:lChecked
:lChecked := lFilterBar
END
WITH OBJECT ::oDBBrowse1
:lFilterBar := !:lFilterBar
END
RETURN NIL
/*
* Fin: ManttoDBF.prg
*/
/*
* Proyecto: SCIWin
* Fichero: Clientes.prg
* Descripción:
* Autor: Ramón Rodríguez Zea - ZeaSoftware
* Fecha: 26/06/2005
*/
#include "Xailer.ch"
CLASS TFrmClientes FROM tDBFRecords
COMPONENT oReBar1
COMPONENT oDBBrowse1 //el nombre es comun y es el que usa la classe de
Mantenimiento
COMPONENT oStatusBar1
METHOD CreateForm()
METHOD FormInitialize( oSender )
Method Edit( oSender ) InLine Super:Edit( tFrmEditClie():New( Self ) )
Method Add( oSender ) InLine Super:Add( tFrmEditClie():New( Self ) )
ENDCLASS
/*
Aqui hacen su Forma con el IDE
*/
#include "Clientes.xfm"
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TFrmClientes
RETURN Super:FormInitialize( oSender )
//---------------------------------------------------------- --------------------
/*
* Fin: Clientes.prg
*/
Ramón Zea
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/
Móvil: 01-993-231-62-29
ramonzea@yahoo.com
zeasoftware@hotmail.com
zeasoft.movil@hotmail.com
http://www.paginasprodigy.com/zeasoftware/