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.

TMemDataset

Foro de Xailer profesional en español
Responder
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

Tengo unos detalles con los MemDataset
1.- No puedo crear una clase con un arreglo vacio por que marca un error,
por lo que tengo que poner un registro en blanco y luego borrarlo.
1.1.- No seria mejor una propiedad tipo Struc en la que demos al menos los
nombres de los campos y los valores por default?
2.-El metodo Zap no tiene ningun efecto en esta clase? lo quiero usar para
limpiar el arreglo de datos pero no hace nada.
3.-Cual hay que usar Append o AddNew()?
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9452
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TMemDataset

Mensaje por ignacio »

Ramón,
> 1.- No puedo crear una clase con un arreglo vacio por que marca un error,
> por lo que tengo que poner un registro en blanco y luego borrarlo.
Lógico. El TMemDataSet no tiene ni idea del tipo de campos que tiene que
mostrar. No obstante si que puede hacerse, no tiene más que crear los
DataField para dicho DataSet antes de la apertura del Dataset o utilizar el
método GetStructFrom.
> 1.1.- No seria mejor una propiedad tipo Struc en la que demos al menos los
> nombres de los campos y los valores por default?
Ya respondido.
> 2.-El metodo Zap no tiene ningun efecto en esta clase? lo quiero usar para
> limpiar el arreglo de datos pero no hace nada.
Ese método no Existe, debería haberte dado un error de ejecución.
> 3.-Cual hay que usar Append o AddNew()?
AddNew() se utiliza necesariamente cuando hay DataControls enlazados al
DataSet pero puede ser utilizado igualmente en cualquier caso. Si es una
alta másiva recomiendo Append por ser más rápido. Consulta la documentación
al respecto.
Un saludo,
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

Aplicando la logica mejor ya le anexe los metodo que requiero.
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9452
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TMemDataset

Mensaje por ignacio »

Ramón,
Creo que ya se le explico en un Email anterior, pero usted comento que lo habí­a resuelto creando métodos nuevos con más lógica. Se le indico que utilizará el método GetStructFrom( aData ) donde aData tiene la misma estructura que el array devuelto por DBCreate() o que crease los objetos TDataField manualmente antes de abrir el DataSet. Le recomiendo que utilice el método GetStructFrom() por ser más sencillo de usar.
Un saludo
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=44c09790@news.xailer.com...]44c09790@news.xailer.com...[/email]
Despues de analizar un buen rato el TMemDataSet veo que si uso:
Open({}, {"Campo1", "Campo2"})
aFields se encuentra vacio, por lo que intento asignarle los TDataField pero no me los toma,
este proceso requiere de algun metodo especial que no esta disponible para reutilizarlo o hacer un proceso alterno?
Lo unico que busco es evitar tener que eliminar el registro 1, que me especifica los valores y los tipos de datos.
Gracias desde ya.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

Despues de analizar un buen rato el TMemDataSet veo que si uso:
Open({}, {"Campo1", "Campo2"})
aFields se encuentra vacio, por lo que intento asignarle los TDataField pero no me los toma,
este proceso requiere de algun metodo especial que no esta disponible para reutilizarlo o hacer un proceso alterno?
Lo unico que busco es evitar tener que eliminar el registro 1, que me especifica los valores y los tipos de datos.
Gracias desde ya.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9452
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TMemDataset

Mensaje por ignacio »

Ejemplo usando AddField:
METHOD MemDataSet1Create( oSender ) CLASS TForm1
WITH OBJECT oSender
WITH OBJECT :AddField( "Nombre" )
:cType := "C"
:nLen := 10
END WITH
WITH OBJECT :AddField( "Tipo" )
:cType := "C"
:nLen := 1
END WITH
WITH OBJECT :AddField( "Long" )
:cType := "N"
:nLen := 15
END WITH
WITH OBJECT :AddField( "Dec" )
:cType := "N"
:nLen := 10
END WITH
:Open()
:Append()
:Nombre := "Prueba"
:Tipo := "C"
:Long := 10
:Dec := 0
END WITH
RETURN Nil
Compruebo que el método AddField no estaba documentado. Se subsanará para la próxima actualización.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:44c0bb10$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ramón,
Creo que ya se le explico en un Email anterior, pero usted comento que lo habí­a resuelto creando métodos nuevos con más lógica. Se le indico que utilizará el método GetStructFrom( aData ) donde aData tiene la misma estructura que el array devuelto por DBCreate() o que crease los objetos TDataField manualmente antes de abrir el DataSet. Le recomiendo que utilice el método GetStructFrom() por ser más sencillo de usar.
Un saludo
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=44c09790@news.xailer.com...]44c09790@news.xailer.com...[/email]
Despues de analizar un buen rato el TMemDataSet veo que si uso:
Open({}, {"Campo1", "Campo2"})
aFields se encuentra vacio, por lo que intento asignarle los TDataField pero no me los toma,
este proceso requiere de algun metodo especial que no esta disponible para reutilizarlo o hacer un proceso alterno?
Lo unico que busco es evitar tener que eliminar el registro 1, que me especifica los valores y los tipos de datos.
Gracias desde ya.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

Gracias, es que si lo resolvi, pero me trabe por que no halle referencia de addfiel o no lo supe encontrar y pues ya vez, jejejeej
Ademas, podria pedirles, aunque es mucho trabajo, poner mas ejemplos en el chm?
estuve usando esto y me anexaba los campos pero no me los reconocia.
With Object oDataField
:cName := cName
:cDisplayName := cName
:cDBFName := cName
:InitValue := xInitValue
:nLen := nLen
:nDec := nDec
:cType := cType
:nIndex := nField //Columna Posicion
//:Value := xInitValue
//:oDataSet := Self
//:Value := xInitValue
//:oParent := Self
:Create()
End With
Todo es cuestion de conocer mas a fondo Xailer, su vida privada ;)
Probare lo que sugieres.
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:44c0c1b6$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ejemplo usando AddField:
METHOD MemDataSet1Create( oSender ) CLASS TForm1
WITH OBJECT oSender
WITH OBJECT :AddField( "Nombre" )
:cType := "C"
:nLen := 10
END WITH
WITH OBJECT :AddField( "Tipo" )
:cType := "C"
:nLen := 1
END WITH
WITH OBJECT :AddField( "Long" )
:cType := "N"
:nLen := 15
END WITH
WITH OBJECT :AddField( "Dec" )
:cType := "N"
:nLen := 10
END WITH
:Open()
:Append()
:Nombre := "Prueba"
:Tipo := "C"
:Long := 10
:Dec := 0
END WITH
RETURN Nil
Compruebo que el método AddField no estaba documentado. Se subsanará para la próxima actualización.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:44c0bb10$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ramón,
Creo que ya se le explico en un Email anterior, pero usted comento que lo habí­a resuelto creando métodos nuevos con más lógica. Se le indico que utilizará el método GetStructFrom( aData ) donde aData tiene la misma estructura que el array devuelto por DBCreate() o que crease los objetos TDataField manualmente antes de abrir el DataSet. Le recomiendo que utilice el método GetStructFrom() por ser más sencillo de usar.
Un saludo
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=44c09790@news.xailer.com...]44c09790@news.xailer.com...[/email]
Despues de analizar un buen rato el TMemDataSet veo que si uso:
Open({}, {"Campo1", "Campo2"})
aFields se encuentra vacio, por lo que intento asignarle los TDataField pero no me los toma,
este proceso requiere de algun metodo especial que no esta disponible para reutilizarlo o hacer un proceso alterno?
Lo unico que busco es evitar tener que eliminar el registro 1, que me especifica los valores y los tipos de datos.
Gracias desde ya.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

Lo intente usar pero no entendi la documentacion.
CLASS TMemDataSet FROM XMemDataSet
Data aTempFields Init {}
METHOD Zap()
METHOD Field(cName, xInitValue, cType, nLen, nDec)
Method Open()
//Method MakeStruct()
ENDCLASS
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:44c0bb10$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ramón,
Creo que ya se le explico en un Email anterior, pero usted comento que lo habí­a resuelto creando métodos nuevos con más lógica. Se le indico que utilizará el método GetStructFrom( aData ) donde aData tiene la misma estructura que el array devuelto por DBCreate() o que crease los objetos TDataField manualmente antes de abrir el DataSet. Le recomiendo que utilice el método GetStructFrom() por ser más sencillo de usar.
Un saludo
"Ramón Zea" <zeasoftware@hotmail.com> escribió en el mensaje news:[email=44c09790@news.xailer.com...]44c09790@news.xailer.com...[/email]
Despues de analizar un buen rato el TMemDataSet veo que si uso:
Open({}, {"Campo1", "Campo2"})
aFields se encuentra vacio, por lo que intento asignarle los TDataField pero no me los toma,
este proceso requiere de algun metodo especial que no esta disponible para reutilizarlo o hacer un proceso alterno?
Lo unico que busco es evitar tener que eliminar el registro 1, que me especifica los valores y los tipos de datos.
Gracias desde ya.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

TMemDataset

Mensaje por zeasoftware »

No funciona, pongo lo siguiente pero los valores de los campos quedan en blanco.
METHOD MemDataSet1Create( oSender ) CLASS TCotizaConsulta
With Object oSender //::oMemDataSet1
//:Field("Cantidad", 0)
//:Field("Codigo", "")
//:Field("UniMed", "")
//:Field("Descrip", "")
//:Field("Precio", 0.00)
//:Field("Importe", 0.00)
With Object :AddField( "Cantidad" )
:nLen := 15
:nDec := 2
:cType := "N"
End With
With Object :AddField( "Codigo" )
:nLen := 15
:nDec := 0
:cType := "C"
End With
With Object :AddField( "UniMed" )
:nLen := 15
:nDec := 0
:cType := "C"
End With
With Object :AddField( "Descrip" )
:nLen := 15
:nDec := 0
:cType := "C"
End With
With Object :AddField( "Precio" )
:nLen := 15
:nDec := 2
:cType := "N"
End With
With Object :AddField( "Importe" )
:nLen := 15
:nDec := 2
:cType := "N"
End With
:Open()
End With
RETURN Nil
El :cType lo incluyo por que me manda un error de KindOf ADS... por que tengo anexado las lib de ADS
el metodo :Field lo defino igual en TMemdataset que intercepto:
METHOD Field( cName, xInitValue, cType, nLen, nDec) CLASS TMemDataSet
With Object ::AddField( cName )
:nLen := nLen
:nDec := nDec
:cType := cType
End With
RETURN ( Nil )
pero sucede lo mismo.
Alguna sugerencia?
Gracias.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--
Responder