FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Pasar objetos entre Cliente y Servidor
Hola Club, En mi aplicación Datasnap quiero hacer una función del lado servidor que tome como parámetro un objeto tipo TClientDataSet y otro tipo TField, el problema es que aparentemente y no se bien el porque pero así parece en la ayuda Delphi, solo soporta entre las capas los siguientes tipos de datos, algo que resulta bastante limitado.
Boolean, SmallInt, Integer, Int64 ,Single ,Double ,AnsiString ,String , TDBXTime ,TDBXDate ,TJSONValue and all descendents ,TDBXWideStringValue ,TDBXAnsiStringValue, TDBXUInt8Value ,TDBXInt8Value ,TDBXInt16Value ,TDBXInt32Value ,TDBXInt64Value ,TDBXSingleValue ,TDBXDoubleValue ,TDBXBcdValue ,TDBXTimeValue ,TDBXDateValue TDBXTimeStampValue ,TDBXBooleanValue ,TDBXReaderValue ,TDBXStreamValue los siete primeros tipos son familiares pero los tipo TDBX, resultan nuevos para mi y estan relacionados con DBEXPRESS, ademas aparecen como clases. ¿Alguno de ustedes ha utilizado este tipo de datos? ¿Alguien tiene alguna sugerencia de como podría pasar objetos entre las dos capas? Cualquier información referida es bienvenida. Utilizo Delphi 2010. Quizás en las versiones XE y XE2 esto se halla ampliado (que lo digan los usuarios de estas versiones). |
#2
|
||||
|
||||
Para pasar mensajes por fuera del proceso de un ejecutable (osea, lo que esta en memoria en tu programa) con capacidad de operar en internet se necesita serializar/deserializar las cosas.
http://es.wikipedia.org/wiki/Serializaci%C3%B3n Piensa que el mundo exterior a tu ejecutable no es delphi, ergo, no entiende los tipos de datos y funciones de delphi. Aunque te comuniques Delphi=>Delphi no hay una forma de decir "Hey, haz de cuenta que corremos en el mismo espacio de memoria, asi tu estes en nigeria!". Asi que hay que traducir un objeto en un formato simplificado. Por ejemplo, si una clase:
Entonces se pasaria en un formato como json, xml, binario, o ini como este caso:
Entre ambos procesos. El que se pueda enviar TDBXTime y demas es solo porque esas clases tienen definido su codigo de serializacion/deserializacion. Osea, realmente NO ESTAS PASANDO EL OBJETO, estas pasando los datos que permiten recrear el objeto en el otro lado. Entonces, debes es convertir tu objeto delphi en un formato que ambos extremos entiendan, como por ejemplo: (Esto es un caso GENERICO) http://stackoverflow.com/questions/3...ti-and-not-cus y luego en el extremo que recibe el formato, creas un objeto TClientDataSet, y le metes esos valores. ---- AFORTUNADAMENTE ClientDataset permite guardar datos en un stream/xml: http://stackoverflow.com/questions/3...xml-contents-i
Defines que el servidor pasa datos string. y usas el metodo de LoadFromFile en el otro extremo. Listo
__________________
El malabarista. |
#3
|
||||
|
||||
Defines que el servidor pasa datos string. y usas el metodo de LoadFromFile en el otro extremo. Listo[/quote] Hola, muchas gracias por la respuesta gracias. guiame un poco como sera esto de cargar el un archivo xml. ya que no tengo experiencia en este lenguaje. Del lado servidor lo que tengo es esto por ejemplo:
Esta función la llamaría desde el lado cliente al generar la clase cliente atreves del componente SQLConnection obviamente que esto no es posible ya que este tipo de datos (TCustomClientDataset y TField) no son soportados, por lo tanto como lo arias de la forma que vos me recomendaste? Slds. |
#4
|
||||
|
||||
Estuve probando el procedimiento y va bien pero al instante de hacer el LoadFromFile me da una excepción donde enuncia que no se puede abrir el archivo "C:\Users\..." (toda la ruta exacta en donde esta ubicado). Luego formula: El sistema no puede encontrar el archivo especificado. todo en la misma notificación. pero resulta raro que no lo localize siendo que la dirección que figura es exacta.
|
#5
|
||||
|
||||
Hola Jere_84
Vamos a guiarnos por la sugerencia de mamcx, que está muy buena Antes de nada unas palabras...: "El poderoso Datasnap que acorta distancias" Jere_84 dice: Cita:
Cita:
En el lado cliente de tu aplicativo Datasnap
En el lado server el método que recepciona los datos debria ser mas o menos asi:
Espero que sirva de algo el código... Your friend StartKill Lima-Perú Última edición por StartKill fecha: 08-06-2012 a las 01:18:03. |
#6
|
||||
|
||||
Hola StartKill. Gracias por el código ¿Esto anda si mi aplicación cliente y servidor se alojan en distintas terminales de una red? o ¿En el caso de que estén conectadas por internet, en redes distintas?
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Llamados a objetos entre formularios | cmagno | OOP | 3 | 19-02-2010 22:41:01 |
se pueden pasar objetos como parametros? | gabrielflowers | PHP | 1 | 01-04-2009 18:58:16 |
Cliente / Servidor | carlosro_ec | C++ Builder | 2 | 11-12-2005 17:06:14 |
Cliente/Servidor | Juvenal | Varios | 1 | 02-03-2005 21:27:43 |
BD en Cliente-servidor | Phacko | Conexión con bases de datos | 0 | 18-08-2004 00:03:41 |
|