PDA

Ver la Versión Completa : Permisos para acceder a BD en Paradox


quali
21-09-2006, 20:30:09
Hola todos.
Estoy desarrollando una aplicación que debe leer datos de una tabla Paradox que se encuentra en una maquina corriendo Windows 98. Esta maquina comparte su disco con protección con contraseña. Cuando ejecuto la aplicación, al intentar acceder a las tablas remotas, obtengo una excepción que me informa que tengo 'permiso denegado'.

Desde el explorador de la maquina en donde ejecuto la aplicación entro al entorno de red, selecciono la maquina que tiene la base de datos, accedo al recurso compartido e ingreso la clave de acceso. Luego vuelvo a ejecutar la aplicación y funciona correctamente. Evidentemente el problema es que necesito pasarle la password al recurso compartido para poder accederlo.
Alguien sabe como puedo hacer eso en tiempo de ejecución?
O sea, que la aplicación se loguee en un recurso compartido protegido por contraseña en W98.
Estoy desarrollando con Delphi y la aplicacion debe correr en windows XP o Windows server 2003
Desde ya agradezco cualquier ayuda.

marcoszorrilla
21-09-2006, 21:23:31
Tengo esta información, creo recordar haber hecho alguna prueba y que funcionaba correctamente, ya nos dirás como te va.

utilice una funcion de la api de Windows que oi mencionar aqui en el foro, la cosa esta en iniciar
una conexion con la carpeta compartida psandole un nombre de usuario y una contraseña, en
Win9x no importa el nombre de usuario solo la contraseña de la carpeta, mientras que en Windows
Nt y 2000 tienes que pasarle un usuario valido y el password del usuario no de la carpeta. el codigo
es mas o menos asi

function TDModulo.ConectaRed: boolean;
var
RecursoRed: _NETRESOURCE;
Resultado: Word;
begin
Resultado := NO_ERROR;
Conectado := false;

with RecursoRed do
begin
dwType := RESOURCETYPE_DISK;
LpLocalName := nil;
LpRemoteName := Pchar(DirServer); // dirserver podria ser "\\maquina\carpeta"
LpProvider := nil;
end;

// --------------- nos conectamos al directorio ------------------
Resultado := WNetAddConnection2(
RecursoRed, // points to structure that specifies connection details
PChar(Contrasenia), // points to password string
PChar(Usuario), // points to user name string
CONNECT_UPDATE_PROFILE // set of bit flags that specify connection options
);

// --------------------------------------- ya que te conectaste al directorio inicias la sesion de paradox
---------------------------------
try
if not Resultado in [NO_ERROR, ERROR_ALREADY_ASSIGNED] then
raise EInvalidOperation.Create('');

with Sesion do begin
NetFileDir := DirServer + '\NET';
PrivateDir := ObtenWindowsTemp;
end;

with DataBase do begin
Params.Clear;
Params.Add('PATH=' + DirServer);
Params.Add('DEFAULT DRIVER=PARADOX');
Params.Add('ENABLE BCD=FALSE');
Connected := true;
end;
Conectado := true;
except
ShowMessage('No se ha podido establecer una sesion en red para el sistema' + #13 +
'posiblemente el servidor no este funcionando en este momento o' + #13 +
'existe un error en la configuracion, por favor verifique y vuelva a intentar.');
Conectado := False;
end;
Result := Conectado;
end;

esto es obviamente al momento de crear tu Datamodulo (supongo que utilizaras uno) o en el
momento de abrir tu base de datos.

Un Saludo.

quali
04-10-2006, 15:05:10
Marcos, crei haber respondido al otro dia que pusiste tu mensaje, pero por lo visto no lo hice.
Lo que me pasaste anduvo perfecto.

Muchas gracias

marcoszorrilla
04-10-2006, 15:18:46
Hubo un problema en el Foro y se perdieron algunos mensajes, pero recuerdo haber leido tu respuesta favorable.

Un Saludo.