PDA

Ver la Versión Completa : Como conectar a servidor base de datos remoto????


AFilth
02-01-2006, 23:55:06
Hola, tras buscar en los foros, no he encontrado nada q me sirva en principio. Os cuento la situacion:

Tengo un programa hecho en Delphi 7, la base de datos esta en SQLServer en la misma maquina. Hasta ahora se accedia mediante un componente TDatabase. En este configuraba el AliasName, DatabaseName y los Params (Usuario y password).
Por otro lado, con el BDE Administrator, me creaba una nueva "conexion a base de datos" en la q ponia: El tipo, DataBaseName, Server Name (Aqui ponia el nombre de la maquina) y el user name. Con esto va todo perfecto teniendo el servidor de base de datos y el programa en la misma maquina.

Pero ahora viene el problema. Quiero q se pueda acceder con el mismo programa a la base de datos desde otro ordenador de fuera de esa "red local", es decir, conociendo su ip poder conectarme desde cualquier cliente.

He probado a poner en Server Name la IP del equipo q tiene la bbdd pero de este modo no funciona.

Como deberia hacerlo?? Estoy muy verde en este tema ya q siempre habia trabajado en Red Local y funcionaba bien de esa forma...

Un saludo y muchas gracias.

jabim
03-01-2006, 09:35:31
Este es un extracto del código que yo utilizo. Debes sustituir las palabras clave (en negrita) por los valores apropiados (En NombreMaquina debes ponerlo sin \\ ;Ejemplo: NombreMaquina=SERVIDORBD):

varConexion := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=usuario;Password=clave;Initial Catalog=NombreBaseDatos;Data Source=NombreMaquina'
{ Se abre la conexión a la base de datos }
ADOConexion := TADOConnection.Create(nil);
ADOConexion.Close;
ADOConexion.CommandTimeout := 30;
ADOConexion.ConnectionTimeout := 15;
ADOConexion.CursorLocation := clUseClient;
ADOConexion.IsolationLevel := ilCursorStability;
ADOConexion.LoginPrompt := False;
ADOConexion.ConnectionString := varConexion;
ADOQuery := TADOQuery.Create(nil);
try
try
ADOConexion.Open;
ADOQuery.Connection := ADOConexion;
except
{ Error al abrir la base de datos }
ADOQuery.Close;
ADOConexion.Close;
end;
{ Se obtienen los datos }
ADOQuery.Close;
ADOQuery.SQL.Clear;
strSQL := 'Select ......';
ADOQuery.SQL.Add(strSQL);
ADOQuery.Open;
if ADOQuery.RecordCount <> 0 then
while not ADOQuery.EOF do
begin
otener datos....;
ADOQuery.Next;
end;
ADOQuery.Close;
finally
ADOQuery.Free;
ADOConexion.Free;

AFilth
03-01-2006, 11:19:58
En primer lugar, gracias por tu respuesta.

Ese código me da la sensación q unicamente funcionaria en red local no?

En ningún punto pones la ip del servidor de BBDD.

Salu2.

PD: Por cierto, al usar un TADOConnection ya me tendria q olvidar del TDataBase o lo tengo q mantener?

jabim
03-01-2006, 14:02:00
No veo porque solo ha de funcionar en red local. Hay que asegurarse de que la máquina donde esté corriendo la BD tenga los permisos necesarios para que máquinas de otras redes puedan acceder a ella a través de su IP. Yo no trabajo montando las redes, pero según me comentan los compañeros de sistemas, eso funciona sin problemas.

La IP del servidor tienes que ponerla en el parámetro "Data Source" de la cadena de conexión. Yo lo probé y sin problema. Por error, antes puse mal el ejemplo :
NombreMaquina=SERVIDORBD
debería haber puesto: Data Source=SERVIDORBD
y por IP sería por ejemplo: Data Source=22.22.22.22

El TDataBase ya no es necesario.

AFilth
03-01-2006, 15:39:06
Ok, creo q entiendo por donde van los tiros. La unica pega ahora va a ser para hacer pruebas, jejeje, tendre q ir a casa de amigos o mandarles el ejecutable para ver si se pueden conectar :)

Un saludo y gracias por tu ayuda.

AFilth
03-01-2006, 17:12:48
Otra cosa q acabo de pensar...tendré q, al poner el TADOConnection en vez del TDatabase con su correspondiente configuración del BDE Administrator, todas las TQuerys como TAdoQuerys y todos los TDataSet ccomo TAdoDataSet???
Un saludo.

AFilth
03-01-2006, 22:23:38
Nada, sigo sin poder conectarme...he probado y no me puedo conectar. Lo mismo es algun problema con la configuracion del propio SQLServer pq sigo los pasos q me has dado. Bueno, en realidad lo unico q hago es configurarme el connectionString poniendo la IP del servidor SQL, el usuario y el password y el nombre de la BBDD pero no logra conectar.

En cambio en red local todo funciona correctamente.

Salu2.

jabim
04-01-2006, 13:06:51
Respecto al tema de usar los TADO... en vez de los otros, te puedo decir que en la aplicación de donde saqué el ejemplo únicamente se utiliza este tipo, pero se trata de un programa que ya tiene varios años y se comenzó a desarrollar en Delphi5 y en aquel momento los TADO eran los que mejor se adaptaban a las necesidades. Quizás ahora los otros permitan hacer lo mismo, no lo sé, habría que investigarlo.

Respecto a lo de la red no local, en mi ejemplo no se da el problema pues el programa reside en la misma red del servidor de BD; en tu caso y si no has conseguido que te funcione habría que investigar en detalle las posibilidades de la conexión.