Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2004
lemon-club lemon-club is offline
Miembro
 
Registrado: jun 2003
Posts: 19
Poder: 0
lemon-club Va por buen camino
como puede mi aplicacion asignar el NETFILEDIR??

Hola a todos.

Tengo una aplicación con la base de datos paradox en red y no consigo asignar correctamente el directorio de red NETFILEDIR del BDE para que se bloqueen los registros que están en edición para otros usuarios.

Mi intención es que mi aplicación pueda asignar este directorio antes de conectar la base de datos, pues lo hice leyendo en varios libros y en el artículo de esta web "paradox en red" y tal cual venía explicado.
Con un TSession y un TDataBase, completando cada una de sus propiedades, especialmente la propiedad NETFILEDIR del TSession que es igual para todos los ordenadores que utilizan la misma base de datos.

Cuando intento abrir cualquier tabla me da el siguiente error:

Not initialized for accessing network files.
table: \\SERVIDOR\tablas\clientes.db

Pues hasta la fecha únicamente puedo hacer funcionar correctamente la aplicación en red si cambio la variable en el BDE manualmente:
BDE Administrator->configuration->drivers->native->paradox->NET DIR

Repito que completo minuciosamente las propiedades del Tsession y tdatabase:
tsession.PrivateDir
tsession.NETFILEDIR
tdatabase.Params.Values['PATH'] := '\\SERVIDOR\tablas'
...

...pero no sé por qué no puedo cambiar la variable del NETDIR del BDE dinámicamente a través de mi aplicación.

Se os ocurre qué puede estar fallando??

P.D.: la variable LOCALSHARE la tengo para todos los ordenadores = FALSE. Lo he probado también cambiando esta propiedad a TRUE manualmente en el servidor y no he notado ninguna diferencia.

graciass de nuevo!
Responder Con Cita
  #2  
Antiguo 11-01-2004
lemon-club lemon-club is offline
Miembro
 
Registrado: jun 2003
Posts: 19
Poder: 0
lemon-club Va por buen camino
Hola de nuevo,
No sé si no me he explicado bien, no quería aburriros pero me planteo 2 únicas preguntas que tal vez resuelvan mi duda ya que no puedo hacer pruebas porque no tengo una red en mi casa:

-¿¿¿ Puedo hacer funcionar una aplicación en red dejando vacía la variable del BDE: "BDE Administrator->configuration->drivers->native->paradox->NET DIR" y utilizando correctamente los componentes Tsession y tdatabase, especialmente la propiedad session.NETFILEDIR ????

o por el contrario, ¿¿ Debo poner también manualmente la variable en el BDE Administrator ''paradox->NET DIR'' ??

Lo que busco es hacerlo yo a través de mi aplicación y no marear al cliente.

-Si es necesario poner el NET DIR correctamente en el BDE Administrator, ¿¿ abeis alguna forma de editar el fichero IDAPI.CFG (fichero de configuración del BDE)??

gracias otra vez
Responder Con Cita
  #3  
Antiguo 11-01-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La cara oculta de delphi 4 de ians marteens deja claro como hacerlo, aqui te pongo un trocito de código que yo uso.

notas:
MensajeAdd es simplemente un log de inicio de sesion que hago para detectar errores.
gl.db es un registro global de la aplicación donde se guarda las opciones (las inicializo desde un TiniFile)
Código:
if misession.Active then
  misession.Close;
     with MiSession do
  begin
  try
   MensajeAdd(true,'1   Configurar la sesion' );
   MensajeAdd(true,'1.1 Usando Carpeta de Red: '+gl.DB.NetFileDir );
     NetFileDir:=gl.DB.NetFileDir ;
   MensajeAdd(true,'1.2 Usando carpeta temporal: '+gl.DB.PrivateDir );
     PrivateDir:= gl.DB.PrivateDir  ;
   MensajeAdd(true,'1.3 Modo Sesion: cmAll');
   ConfigMode := cmAll;
   MensajeAdd(true,'1.4 Modo servidor: '+BooltoStr(ini.ReadInteger('Settings','RGClient',1)= 0,true));
   MensajeAdd(true,'2   Alias' );

   if IsAlias(gl.DB.Alias) then
   begin
    MensajeAdd (true,'2.1 Usando alias existente: '+gl.DB.Alias);
   end
   else
   begin
     MensajeAdd(true,'2.1 Creando Alias: '+gl.DB.Alias +' para la carpeta:'+gl.DB.DatabaseDir  );
     AddStandardAlias(gl.DB.Alias , gl.DB.DatabaseDir, 'Paradox');
   end;
  except
    on E:Exception do HandleException('Error al configurar la sesion',E);
  end;

  end;

  with dtbppal do
  begin
    try
       MensajeAdd(true,'3   Configurar Base de datos:');
    DatabaseName     := gl.DB.Alias ;
    MensajeAdd(true,'3.1 Asignando Controlador');
    DriverName:= 'STANDARD';
    MensajeAdd(true,'3.2 Carpeta de Base de Datos: '+ gl.DB.DatabaseDir );
   params.Add('PATH='+gl.DB.DatabaseDir );
   params.Add('DEFAULT DRIVER=PARADOX');
   params.Add('ENABLE BCD=FALSE');
      MensajeAdd ( true, '3.1 Asignado Alias a la Base de Datos. ');
   except
      on E:exception do HandleException('Error de BDE',E);
    end;

  end;   // dtbppal
    MensajeAdd(true,'4   Alias: '+ gl.DB.Alias );

try
  for i:=0 to pred(ComponentCount) do
     if (components[i] is TTable) then
        TTable(components[i]).DatabaseName:= gl.DB.Alias
     else
        if (components[i] is TQuery) then
          TQuery(components[i]).DatabaseName:=gl.DB.Alias;


    MensajeAdd(true,'4.1 Alias asignado' );

    Misession.Open;

    MensajeAdd(true,'5   Sesion Activa');

    dtbppal.Open;

    MensajeAdd(true,'6 **Conectado a Base de Datos**');
except
  on E:Exception do
    HandleException('No se ha podido Abrir la Base de Datos.',E);
end; // except
// saludos

Última edición por Lepe fecha: 11-01-2004 a las 20:18:14. Razón: jejeje
Responder Con Cita
  #4  
Antiguo 12-01-2004
lemon-club lemon-club is offline
Miembro
 
Registrado: jun 2003
Posts: 19
Poder: 0
lemon-club Va por buen camino
gracias Lepe, seguí pasao a paso lo que me indicaba ians marteens en la cara oculta de D4 pero:
¿¿hay que dejar la variable del Paradox->NETDIR en el BDEAdministrator vacía??

Así lo hice pero no me bloquea los registros al acceder varios usuarios si la dejo vacía. Si pongo el correspondiente directorio en el NETDIR del BDEAdministrator manualmente SÍ que funciona perfectamente.

Puede alguien responderme a la primera pregunta??

cenquiu
Responder Con Cita
  #5  
Antiguo 12-01-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En mi caso, Si.

Yo asigno todo por codigo, si creas el alias en tiempo de ejecución y asignas ahí el NETFILEDIR de la Sesion, que yo sepa, no estas usando el driver NATIVE de paradox, sino que te basas en él, para crearte el alias.

No he podido arrancar la red ahora para hacer las pruebas, así que las he hecho mediante 2 instancias, eso si, cada una de ellas con alias distintos (creados dinamicamente) y controlando que el directorio TEMP para ambas sea distinto. Controla bien los bloqueos

ahhh, por cierto en el driver nativo de paradox NET DIR he puesto c:\pepito y desde luego esa carpeta no existe. Tambien he probado a dejarlo en blanco, y repito, los bloqueos van bien.

Imagina que usas 2 Databases y 2 componentes Sessions en la misma aplicación, para tranferir datos de una a otra. Si tuvieses que modificar el parámetro NATIVO NET DIR con el bdeAdministrator, seria imposible trabajar con dicha aplicación. Veo lógico dejar ese parámetro en blanco y configurarlo por cada sesión.

No puedo darte una respuesta 100 % segura y esto, es lo único que puedo asegurarte al 100 %
Responder Con Cita
  #6  
Antiguo 12-01-2004
lemon-club lemon-club is offline
Miembro
 
Registrado: jun 2003
Posts: 19
Poder: 0
lemon-club Va por buen camino
gracias otra vez.
Lo natural es dejar la variable del BDEAdministrator en blanco si asignamos el directorio de red en ejecución, eso es lo que intento desde hace tiempo pero no consigo que me funcione.
Partiendo de que se debe dejar esa variable en blanco sé que debo estar haciendo algo mal. Repasaré todas las propiedades del Tsession y del Tdatabase por enésima vez a ver qué se me ha escapao :S

hasta pronto
Responder Con Cita
  #7  
Antiguo 13-01-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
crees que el MensajeAdd ese lo hice por capricho?? Bastantes dolores de cabeza me dió.

PD: el modo de sesion yo puse cmAll en lugar del que viene por defecto cmConfig, en la ayuda explica mejor que hace cada modo.

Seguro que es una tonteria, de esas que cuando la encuentras es para darte de porrazos contra la pared, pero mientras se encuentra y no.....
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


La franja horaria es GMT +2. Ahora son las 22:19:47.


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