Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2010
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Conectar varias Bases de Datos con Server DataSnap

Hola amigos:
Agradecería me den sus opiniones o consejos sobre el siguiente tema.
Tengo una aplicación Cliente-Servidor funcionado perfectamente, el programa Servidor, instalado en el Servidor donde está la Base de Datos MSSQL, da servicio a los clientes accediendo a una Base de Datos (BD). Ahora se me propone que el programa pueda atender a varias empresas y como requisito necesario es que cada una de ellas tenga, físicamente, su propia BD. Y es aquí donde se me presenta el problema para seleccionar la mejor estrategia a implementar para atender a varias BD teniendo un solo Programa Servidor (SRV). Con el programa cliente no hay mayor problema en decidir que BD se debe usar.
Considerando que en el SRV hay un TSQLConnection donde se indica en su propiedad DataBase = DB1, las alternativas que estoy estudiando son las siguientes:
1. Duplicar el SRV, establecer otro puerto de conexión, cambiando la conexión TSQLConnection para que use otra BD y todos los componenetes dbExpress para que apunten al nuevo TSQLConnection . Pero aquí tendría que tener tantas copias de SRV ejecutándose en el Servidor como empresas hubiera además del problema de mantenimiento de los procedimientos almacenados (PROC) en las respectivas BD.
2. Duplicar el Data Module remoto del SRV, y modificar lo necesario en el TSQLConnection del nuevo Data Module según el punto 1. Aquí tendría una sola ejecución de SRV, siendo necesario hacer esta duplicación por cada nueva empresa que se desee incorporar.
3. Dejar el SRV tal como está, siendo necesario modificar todos los PROC, incluyendo como parámetro el nombre de la BD y tabla la cual el PROC atiende teniendo que armar la sentencia SQL en una variable para su ejecución final, algo así como el siguiente código ejemplo:
Código SQL [-]
DECLARE @DBase varchar(20);
DECLARE @dbTabla25 varchar(50);
DECLARE @SQL nvarchar(MAX);
SET @DBase = 'Ges120.dbo.';
SET @dbTabla25 = @DBase+'Tabla25';
SET @SQL = 'SELECT * FROM '+@dbTabla25;
EXECUTE SP_EXECUTESQL@SQL;

Con esta opción tendría que hacer una modificación importante en los PROC y en aquellos que tengo escritos en el programa cliente, pero la ventaja sería la del mantenimiento posterior y no importaría la cantidad de empresas.
No me he decidido todavía por ninguna de ellas, por eso recurro a ustedes por si me pueden indicar alguna otra alternativa que sea segura, su implantación sea más sencilla y el mantenimiento posterior normal.
Muchas gracias.
Responder Con Cita
  #2  
Antiguo 24-12-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola,

¿cómo tienes programado el servidor? ¿DataSnap? ¿utilizas Borland Socket Server? ¿socket connection)

Si utilizas socket connection, puede implementar un procedimiento remoto en el servidor y que reciba un parámetro indicándole a qué base de datos se ha de conectar el tSQLConnection.

Si es así, te podría indicar cómo hacerlo.

Un saludo.
Responder Con Cita
  #3  
Antiguo 09-01-2011
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Hola Manuc:

Mi conexión es DataSnap, uso procedimientos remotos a través del TsqlServerMethod para otros procesos. No sé como hacer para cambiar la conexión a la Base de Datos, si me puedes ayudar te lo agradeceré.
Pero también me queda la duda, ¿qué pasaría si un usuario usa la BD1 y otro cambia a la BD2 teniéndo un solo TSQLConnection?

Saludos
Responder Con Cita
  #4  
Antiguo 10-01-2011
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola gcaffe,

Divido las respuestas, para que no se haga muy pesao. :-)

Cita:
Pero también me queda la duda, ¿qué pasaría si un usuario usa la BD1 y otro cambia a la BD2 teniéndo un solo TSQLConnection?
Depende de cómo hayas creado la capa SQL (la que se ejecuta en el servidor). Lo normal, es que sea multi-instancia. Esto quiere decir, que cada vez que conectar al servidor para hacer uso de tu capa SQL, se levanta una instancia, que no es más que una copia del original.

Si conectas dos usuarios al mismo tiempo, realmente en el servidor se deben estar levantando dos instancias de tu capa SQL y cada una de ellas tendrá una copia del componente SQLConnection. De tal forma que puedes manipular las propiedades del SQLConnection, sin que afecte al resto de instancias.
Responder Con Cita
  #5  
Antiguo 10-01-2011
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Al segundo tema:

Cita:
No sé como hacer para cambiar la conexión a la Base de Datos...
Intentaré describirte el proceso paso a paso:
  1. Crear el procedimiento remoto.
    • En la Capa SQL o Capa Intermedia: Ir al menú View -> type Library: se abrirá un cuadro de dialogo, con la estructura de tu capa SQL.
    • A la izquierda, debe aparecer un árbol. Debes seleccionar el item que representa la "interface", que es el que tiene como una piruleta roja.
    • Al marcar este "item", se han de habilitar algunos de los botones superiores. Pulsa "New Method" y teclea el nombre para tu procedimiento remoto. Dale un nombre sencillo, sin mayúsculas ni caracteres raros.
    • Selecciona el método que acabas de crear en el árbol de la izquierda. A la derecha, debes de encontrar un panel con varias páginas. Selecciona la página que indica "Parameters" y pulsas en el botón "Add" que encontrarás en la parte inferior.
    • En la columna "name" introduce el nombre de tu parámetro (por ejemplo: basededatos)
    • En la columna "Type" introduce "BSTR *" (sin las comillas).
    • En la columna "modifier" introduce "[out, retval]" (sin las comillas).
    • En la barra de botones, pulsa sobre el botón "Refresh implementation".
    • Guarda los cambios.
    • En la unidad donde tienes los componentes de conexión, tienes que localizar el método que acabas de crear e introducir el código que quieres ejecutar, en la implementación del mismo.
    • Guarda los cambios y RECOMPILA la Capa SQL o Capa Intermedia.

    Ya tendríamos listo la implementación del procedimiento.
  2. Llamar al procedimiento remoto.
    • Mediante el SocketConnection llamamos al método remoto:
      Código Delphi [-]
      TSocketConnection.AppServer.nombre-de-tu-método-remoto(nombre-base-de-datos-a-conectar)

Esto sería todo.

Yo tengo Delphi 6. Imagino que en versiones posteriores puede ser que haya cambiado algún icion o alguna opción.

Puede parecer un tanto "complicado", pero hayas hecho 200 o 300 se le coge el hilo.

Si tienes alguna duda, comentamelo sin problemas.

Espero que se entienda.

Un saludo.
Responder Con Cita
  #6  
Antiguo 22-05-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, lee nuestra guía de estilo, gracias por tu colaboración
Cita:
Empezado por GURIFA1 Ver Mensaje
Buenas noches tengo un duda,
no se como hacer la conexión datasnap en el lado del servidor para varios clientes y conexión a distintas bases de datos.
Tengo la función en el servidor que modifica la conexión a la base de datos y donde el cliente ya la modifico pero el problema es que si la modifico jodo al que este conectado a otra
¿ COMO PUEDO HACER PARA QUE CADA CLIENTE NO SE CREEN CONFLICTOS ENTRE ELLOS ?
SALUDOS
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consulta a varias bases de datos carlos gonzalez Conexión con bases de datos 13 04-10-2007 19:51:41
Crear una transacción que modifique varias bases de datos Borjaserrano Firebird e Interbase 4 17-09-2007 08:54:58
comparacion entre varias bases de datos edelphi Conexión con bases de datos 9 26-02-2007 23:51:26
varias bases de datos... como?? User_baja1 MS SQL Server 3 25-05-2005 14:27:41
Es posible tener varias bases de datos.... Carlosguiland MySQL 5 24-06-2004 20:39:10


La franja horaria es GMT +2. Ahora son las 00:24:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi