![]() |
![]() |
| Paypal | 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
|
||||
|
||||
|
Cita:
Cita:
Ahora, por otra parte, suponiendo que no voy tan mal encaminado con lo de los RemoteDataModules queda el asunto de los mensajes que los administradores mandan a los usuarios, pues si uso Indy por un lado y RemoteDatamodules por otro pues tengo dos canales distintos. Por eso había pensado que usando el mismo canal de los mensajes podía mandar el texto de la consulta SQL al servidor (lo que llamé AppControl) y éste mandaría la consulta a la BD. Muchas gracias jachguate por tu atención y nos leemos pronto. // Saludos |
|
#2
|
||||||
|
||||||
|
Cita:
Cita:
Cita:
Cita:
![]() Cita:
Cita:
En fin... solo son ideas, creo que funcionaría de ambas formas, siempre dependiendo de los detalles de tu aplicación... Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#3
|
||||
|
||||
|
Hola jachguate
He estado no diré que estudiando sino leyendo algunas cosas y vagando por aquí y por allá. Veo que lo de los RemoteDataModules es más sencillo (igual me equivoco pero de entrada así parece) de lo que pensaba. O mejor dicho, que Borland colocó todo para que fuera prácticamente igual que en una aplicación de una sola capa. De alguna manera veo que son dos opciones las que se ajustarían a lo que quiero: DCOM y Sockets. En varios lados mencionan la dificultad de configurar DCOM aunque como todavía no lo he probado más que en local pues no sé a qué se refiera dicha complejidad y por otro lado pareciera que los sockets darían más flexibilidad en cuanto al tipo de clientes que podrían acceder en un futuro. Pero veo que el problema con los sockets es que, tal como se maneja con los RemoteDataModules, la capa intermedia maneja un único cliente a través de ScktSrvr.exe que administra todos los accesos. Poco después de mi mensaje anterior me di cuenta que la pregunta de las consultas SQL "especializadas" era un poco tonta, esto es, si puedo colocar un TTable (como en el demo de Delphi) seguro puedo colocar cualquier DataSet en la capa intermedia y esto incluye claro cualquier tipo de Query. Pero entonces me viene otra duda: muchas veces nos encontramos aquí sugieriendo construir consultas "al vuelo", ¿cómo se haría esto aquí? Esto de los dos canales (DCOM e Idy o ScktSrvr.exe e Indy) entiendo lo que dices, quizá sea un justo precio pero pienso: si hago una comunicación por sockets ¿para que establecer otra igualmente por sockets? Buscándole vi gente que propone usar una capa intermedia mediante Indy y ADO olvidándose de DCOM y ClientDataSets. No lo he visto en detalle pero quien lo propone parece ser muy convincente en cuanto a sus posibilidades o por lo menos contestó puntualmente a casi todos los peros que le ponían. Viendo esto me acordé entonces del demo que viene con las Indy (TCPDataSet) en donde usan componentes Indy junto con un dataset en memoria, el TKBMMemTable, que parece que tiene un buen manejo de envio y recepción de cursores mediante una binarización de los datos. A fin de cuentas, esto es lo que hace DCOM ¿no? empaquetar los datos de alguna forma para que sea fácil transportarlos. Si esta opción fuera viable me permitiría usar el mismo canal de comunicación para el envío de consultas así como de otro tipo de información. Bueno, sé que por ahora sólo divago pero realmente nunca he trabajado así y apenas empiezo a picarle aquí y allá. Una pregunta sí hago sin embargo: En la capa intermedia, de cualquier forma que se haga habrá, a fin de cuentas varios accesos simultáneos y supongo que de alguna manera hay que controlar las concurrencias. Si uso DCOM o ScktSrvr.exe este manejo ¿ya está dado? O tengo que preocuparme de hilos y demás yerbas. Si uso Indy no sé porque pienso que sería más sencillo en cuanto a que Indy ya maneja un hilo por cada cliente. Bueno, no espero que contestes ya que realmente no estoy diciendo ni casi preguntando nada pero seguiré curioseando. // Saludos |
|
#4
|
|||
|
|||
|
Hola amigos,
Solo comentar unas cosillas: Si utilizas remote data modules bien sea con DCOM o con sockets no tienes que preocuparte de las conexiones en la capa intermendia, pues las gestiona automaticamente. Ahora bien los problemas con la concurrencia si que tienes que gestionarla tu desde el cliente. Utilizando ClientDataSets puedes manejar un conjunto de datos remoto de forma local hasta que realizas un ApplyUpdates(); y envias los cambios al servidor, si en ese momento hubiese algun problema de concurrencia lo podrias tratar en el evento OnReconcileError del mismo. Otra cosa, tambien puedes utilizar sin problemas varias conexiones por sockets por diferentes puertos para cada uso. Uno para el acceso a los datasets y otro para los mensajes a los usuarios. Saludos,
__________________
Saludos, Bitman |
|
#5
|
||||
|
||||
|
Hombre, muchas gracias por tus comentarios Toni.
Más o menos me quedan claros los conceptos pero esto Cita:
// Saludos |
|
#6
|
||||
|
||||
|
Cita:
![]() Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#7
|
|||
|
|||
|
Todo esto es en terminos generales, depende de la acción a realizar.
De todas formas me venia a referir que tu desde el cliente (interfaz de usuario) en determinados casos tendras que decidir si quieres realizar una operación que modifique un unico registro o varios y si envias los cambios uno a uno o en conjunto al servidor de aplicaciones. Y en el momento del envio (ApplyUpdates) desde el propio cliente tienes que decir en cada caso si ocurre un error de integridad o concurrencia que acción realizas. Todo es muy relativo según como enfoques tu aplicación, claro esta. Saludos,
__________________
Saludos, Bitman |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|