PDA

Ver la Versión Completa : Memory Data


Neeruu
30-09-2013, 01:19:19
Hola a todos...

Necesito algún componente Memory Data.... (Es como una tabla en memoria... ) con la característica cargar datos en tiempo de diseño y que estos datos queden guardados en el componente....

Ejemplo: Cargo un Memory Data con localidades... y que ese memory data quede siempre cargado...

Necesitaría algo como dxMemData de DevExpress, pero tienen que ser otro...

Probé con rxMemoryData pero no permite cargar los datos en tiempo de diseño!!!
KbmMemoryTable, pero este no me almacena los datos que el cargo...


Alguna idea de que componente puedo usar....


O alguien me podría guiar como hacer para que el RxMemoryData almacene internamente los datos que le cargo...

Saludos

nlsgarcia
30-09-2013, 01:56:01
Neeruu,


...algún componente Memory Data...con la característica cargar datos en tiempo de diseño y...queden guardados en el componente...


Revisa este componente:

VirtualTable Overview : http://www.devart.com/vtable/

Nota de DevArt: You can download binary version of VirtualTable Componet for free using.

Espero sea útil :)

Nelson.

ecfisa
30-09-2013, 01:57:49
Hola Neeruu.

¿ Y no te sirve un TClientDataSet ?, revisa este enlace (http://www.clubdelphi.com/foros/showthread.php?t=69061)

Saludos :)

Edito: También te pueden servir estos:

La potencia de los ClientDataSet (I) (http://delphiallimite.blogspot.com.ar/2007/09/la-potencia-de-los-clientdataset-i.html)
La potencia de los ClientDataSet (II) (http://delphiallimite.blogspot.com.ar/2007/09/la-potencia-de-los-clientdataset-ii.html)
La potencia de los ClientDataSet (III) (http://delphiallimite.blogspot.com.ar/2007/09/la-potencia-de-los-clientdataset-iii.html)
La potencia de los ClientDataSet (IV) (http://delphiallimite.blogspot.com.ar/2007/10/la-potencia-de-los-clientdataset-iv.html)
La potencia de los ClientDataSet (y V) (http://delphiallimite.blogspot.com.ar/2007/10/la-potencia-de-los-clientdataset-y-v.html)

Neeruu
30-09-2013, 02:47:32
Como cuesta, cuando uno se acostumbra a trabajar con un componente y por x motivos no puede utilizarlo, tener que confiar en otro...

Gracias por recomendar la Virtual table, es lo que necesito...
Gracias por ClientDataSet es también lo que necesito....


Hay alguna forma de, al ClientDataSet, cargarle los datos en tiempo de diseño?

Supongo que el ClientDataSet no me traerá ningún problema, en futuro, ya que es nativo de delphi...


Por otro lado, hace algo que lo estoy haciendo " A MANO", por llamarlo de alguna forma...
Donde mis datos son ingresados en un Memory Data y luego son volcados a un IboQuery...

Pero por lo poco que voy leyendo con el ClientDataSet podría hacer esto automáticamente, mediante el DataSetProvider... Es correcto esto?

Y viendo el ClientDataSet veo una propiedad que se llama "ObjectView"... que hace esta propiedad?

Saludos...
P/D: Sigo leyendo la información adjuntada....

ecfisa
30-09-2013, 07:59:48
Hola Neeruu.

Hay alguna forma de, al ClientDataSet, cargarle los datos en tiempo de diseño?
Click derecho sobre el componente TClientDataset y del menú emergente:

Assign Local Data ...
Load from MyBase table ...


Pero por lo poco que voy leyendo con el ClientDataSet podría hacer esto automáticamente, mediante el DataSetProvider... Es correcto esto?
Así es.

Y viendo el ClientDataSet veo una propiedad que se llama "ObjectView"... que hace esta propiedad?
Cuando la tabla incluye campos con tipos abstracto de datos (Array fields, DataSet fields, Reference fields) y la propiedad ObjectView es igual a True, dichos campos son almacenados jerárquicamente en la propiedad Fields. Cualquier campo secundario de un objeto field se referencia al objeto en vez de presentarse secuencialmente.

Saludos :)

Neeruu
30-09-2013, 18:31:25
Como hago para cargarle datos a un ClientDataSet en tiempo de ejecución a a partir de un query...

O sea, cuando inicia mi aplicación, se ejecuta una consulta con la cual tengo que cargar me MemoryData (ClientDataSet) y que este quede cargado mientras dure la ejecución del programa!!!

Hay alguna forma de hacerlo asi: ClientDataset.LoadFromDataSet(Query)?
O si o si lo cargo mediante un DataProvider aunque el query se cierre luego de cargar el cds?

Saludos...

nlsgarcia
30-09-2013, 18:54:11
Neeruu,


...¿Como hago para cargarle datos a un ClientDataSet en tiempo de ejecución?...


Revisa este link:

To use TClientDataset as Memory Dataset : http://www.scalabium.com/faq/dct0150.htm
Pregunto: ¿Probastes el componente sugerido en el Msg #2?, creo que se adapta a tu requerimiento y ha tenido una constante evolución desde Delphi 6 hasta Delphi XE5.

Espero sea útil :)

Nelson.

MartinS
30-09-2013, 19:06:25
Ejemplo: Cargo un Memory Data con localidades... y que ese memory data quede siempre cargado...

Necesitaría algo como dxMemData de DevExpress, pero tienen que ser otro...

Probé con rxMemoryData pero no permite cargar los datos en tiempo de diseño!!!
KbmMemoryTable, pero este no me almacena los datos que el cargo...

Hola: y probaste con el JvMemoryData de JEDI?. Yo uso ese.-

Funciona igual que un TTable, es decir, se crea la estructura de la tabla y se carga recorriendo un query u otra tabla agregando los registros (Insert, post, etc).-

Saludos.-

Neeruu
30-09-2013, 19:52:52
nlsgarcia...

Si probé pero no te mantiene los datos guardados... si cierras y abres la el componente los datos se pierden y yo necesito cargarle los datos que estos queden guardados en el componente...


Saludos....

Neeruu
30-09-2013, 19:58:32
Haber... siguiendo con el ClientDataSet....

Tengo esta situación:

1 - Ejecuto una Consulta.
2 - La Cargo en el ClientDataSet.
3 - Cierro la Consulta.

Ahora viene mi pregunta... Para cargar el ClientDataSet tengo que hacerlo si o si con un While, recorriendo la consulta o puedo hacerlo con un datasetprovider por mas que después cierre la consulta.?

ecfisa
30-09-2013, 20:00:13
Como hago para cargarle datos a un ClientDataSet en tiempo de ejecución a a partir de un query...

O sea, cuando inicia mi aplicación, se ejecuta una consulta con la cual tengo que cargar me MemoryData (ClientDataSet) y que este quede cargado mientras dure la ejecución del programa!!!

Hay alguna forma de hacerlo asi: ClientDataset.LoadFromDataSet(Query)?
O si o si lo cargo mediante un DataProvider aunque el query se cierre luego de cargar el cds?

Saludos...
Hola.

En el mensaje #4 consultabas como cargarlo en tiempo de diseño...

De forma directa en ejecución:

with TuClientDataSet do
begin
Close;
SetProvider(TuQuery);
Open;
end;


Saludos :)

Neeruu
30-09-2013, 20:04:21
Es que necesito cargar aveces en tiempo de ejecución y otra en tiempo de diseño...

Y con mi pregunta en tiempo de diseño me refería a cargarle los datos yo mismo.... a lo que me refería era si había alguna forma de que me muestre alguna grilla o algo donde ingresaba los datos que quería que contenga ese ClientDataSet... sin tener que cárgalos de un dataset...


Gracias por la respuesta, es lo que andaba buscando... creo.... lo pruebo y aviso....

Neeruu
30-09-2013, 20:33:20
with TuClientDataSet do
begin
Close;
SetProvider(TuQuery);
Open;
end;


Al hacer esto el ClientDataSet se vacía y se vuelve a cargar? o hace falta un EmptyDataSet?

nlsgarcia
30-09-2013, 20:51:07
Neeruu,


...Si probé pero no te mantiene los datos guardados...si cierras y abres el componente los datos se pierden...


Pregunto: ¿Revisastes el Demo del Componente?, en el se muestra un ejemplo donde los datos están guardados en el componente y son mostrados en un TDBGrid.

Te comento como guardar los datos en el Componente TVirtualTable:

1- Abre el menú del componente y selecciona Fields Editor.

2- Crea los campos que requieras manejar en el componente.

3- Abre el menú del componente y selecciona VirtualTable Editor.

4- Graba la información asociada a los campos creados en el punto 2 que requieras.

5- Para finalizar presiona Save y los datos quedan preservados en el componente, también puedes salvar los datos a un archivo con la opción Save to File y cargarlos nuevamente con la opción Load From File. Con VirtualTable puedes grabar datos en tiempo de ejecución y en tiempo de diseño, lo cual se ajusta a tu requerimiento del Msg #12.

Te sugiero revisar el ejemplo y la documentación del componente para más detalles.

Espero sea útil :)

Nelson.

ecfisa
30-09-2013, 21:43:35
with TuClientDataSet do
begin
Close;
SetProvider(TuQuery);
Open;
end;


Al hacer esto el ClientDataSet se vacía y se vuelve a cargar? o hace falta un EmptyDataSet?
Hola Neeruu.

Cuando se llama al método Close (o se pone la propiedad Active en False), no es necesario llamar a EmptyDataSet.

Saludos :)

Neeruu
02-10-2013, 00:29:43
Cuando compile mi proyecto se perdieron todos los datos que tenia en los clientdataSet en memoria.... :mad:
Es como que los dataset creados se borraron....

Ahora estoy probando con el virtualtable....

Empezando de nuevo....

Casimiro Notevi
02-10-2013, 00:51:52
¿Pero cómo los usas?, ningún componente de datos en memoria puede cargarlos en diseño. Y si compilas o ejecutas el programa, obviamente, se perderán hasta que cargues los datos mediante la opción que tengas en tu programa.

Neeruu
02-10-2013, 01:55:02
No es tan así.... Por ejemplo el componente dxMemData, puedes cargarlo en tiempo de diseño y los datos que le cargas quedan cargados en el componente...

El VirtualTable hace exactamente lo mismo.... cargo los datos en tiempo de diseño... ya sea extrayendo de los datos de un query o cargándolos a mano.... y quedan cargados...

Un Ejemplo corto... tengo un campo sexo, donde se debe guardar M (masculino), F (Femenino)...

Agrego cualquiera de los dos componentes mencionados anteriormente:
1 - Creo los campos (COD_SEXO, DES_SEXO).
2 - Abro el edito de datos del componente.
3 - Cargo los datos que quiero (F, Femenino; M, Masculino), todo esto es una grilla.

y listo, el componente queda cargado con estos datos...
Después puedo utilizar esto para enlazarlo a lo que quiera... y puedo hacer operación como agregar, borrar, modificar, filtrar, relacionar...

Es lo que entendí que iba a hacer el ClientDataSet... pero a mi no me anduvo así.... (Porque hice algo mal o no, nose....)

Casimiro Notevi
02-10-2013, 10:00:29
Pero si mantiene los datos es porque los guarda en algún sitio, ya que al ejecutar el programa esos datos no estarían.
De todas formas, ¿para qué quieres unos datos en tiempo de diseño y que luego estén en ejecución? :confused:

Neeruu
02-10-2013, 14:35:15
Para que?

Por ejemplo... si tengo que conectarme a una base de datos, supongamos por internet y la conexión no es buena, para que voy a gastar ancho de banda y tiempo trayendo datos que se que no van a cambiar... si puedo tenerlos en un memorydata y trabajarlos de la misma forma que trabajaría en una situación normal....

O puedo cargar los memorydata al comienzo de mi aplicación y trabajarlos y la conexión con la base de datos se limita solo cuando tengo que mandar los datos a la DB....

Tiene sus cosas interesantes....

Por ejemplo, estoy trabajando con una aplicación en la que tiene que cargar unos datos y la conexión con la db es por internet... (que anda lento, poca señal (3G), etc...) en vez de conectarme a la base de datos y trabajar online, cargo todos los datos en un memorydata y cuando grabo recién me conecto a la base de datos y guardo....

Casimiro Notevi
02-10-2013, 15:43:06
Sinceramente, no entiendo el problema :confused:

ecfisa
02-10-2013, 18:12:25
Sinceramente, no entiendo el problema :confused:
Yo tampoco...


...
Por ejemplo, estoy trabajando con una aplicación en la que tiene que cargar unos datos y la conexión con la db es por internet... (que anda lento, poca señal (3G), etc...) en vez de conectarme a la base de datos y trabajar online, cargo todos los datos en un memorydata y cuando grabo recién me conecto a la base de datos y guardo....

Correcto eso se puede resolver perfectamente con un TClientDataSet, una tabla temporal, con componentes de terceros y dependiendo del RDBMS con que trabajes pueden haber otras alternativas .

Pero hay algo que no me cierra... Y es donde encaja lo del tiempo de diseño. ¿ La carga de datos la hacen los usuarios en tiempo de diseño ?

Saludos :)

Neeruu
02-10-2013, 23:01:56
Esto es así.... estoy desarrollando una aplicación con Raudus... para que mi cliente se conecte desde internet...

Para datos secundarios, supongamos una tabla de con tipos de documento, en vez de traerlo desde mi base de datos, los cargaba en un dxMemData (En tiempo de diseño) y me quedaban disponibles para toda aplicación...

El tema es, que cuando cambio el tipo de proyecto para que me genere un modulo de Apache... no se porque razón con las dxMemData apache me generaba una excepción....

Entonces empece a buscar otros componentes con el mismo comportamiento que las dxMemData....

Intente con el clientDataSet.... pero cuando compile mi proyecto, el cds donde tenia cargados los datos de tipo de documento estaba vació....

Entonces cambie por virtual table y solucione el problema... ahora apache inicia bien el servicio, puedo acceder a la aplicación y todo perfecto....

Mi problema fue encontrar el componente que sustituya a las dxMemdata sin cambiarme demasiado la programación que ya estaba lista...