Club Delphi  
    Paypal   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

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 14-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por URBANO
Código Delphi [-]
Session.PrivateDir := ruta-del-ejecutable-del-cliente + 'PRIV';
Esta es la correcta.

Y se crean 2 pares de archivos LCK. Un par en el servidor y otro par en la carpeta PrivateDir, y no me preguntes por qué, porque no lo sé , es más, el par de archivos LCK del PrivateDir puede que no lo veas, sólo aparece mientras se edita el registro.

Cita:
Empezado por URBANO
Es decir que desde dos clientes puedo editar el mismo registro a la vez.
Este es el síntoma principal de que el BDE no está configurado bien.

Como dices, debe aparecer una excepción diciendo "no se puede editar el registro porque otro usuario lo está utilizando" (mensaje en inglés). te aconsejo hacerlo todo por código, incluso crear los alias, ¿por qué? por la configuración del driver, la ruta del servidor, etc.

Cita:
Empezado por URBANO
- Ya he probado lo de desactivar la cache y los bloqueos, pero sigue dandome el mismo error al abrir las tablas. Yo creo que debe haber una incompatibilidad de winxp a win98, ya que he probado ejutando el programa en modo servidor en el equipo que tiene el winxp y habre bien las tablas.
(
Te aconsejo que te centres en una sola configuración o te volverás loco (por ejemplo: Win98 Servidor, WinXP Cliente).

MensajeAdd añade textos a un Memo para ver todos los parámetros de configuración.
Código Delphi [-]

// Tendrás que crear un FormXX que tenga un Memo dentro.
procedure TFPrincipal.MensajeAdd(VerFecha: Boolean; str: String);
begin
  if VerFecha then
    FormXX.Memo1.Add(datetimetostr(now) + ' >> ' + str)
  else
    FormXX.Memo1.Add(str); 

end;
DtbPpal es el TDatabase

Todo esto va dentro de tu procedimiento "Configuracionred".
Verás que te he puesto la definición de un registro TGlobal y TParadoxConfig,
lo he hecho para que solo tengas que modificar lo mínimo posible:
- Buscar "dtbppal" y sustituir por el nombre de tu componente TDatabase.
- sustituir las lineas "ini.ReadString...." por tus rutas de la base de datos, del .net etc.
Código Delphi [-]

type
  TParadoxConfig = record
    NetFileDir:    String[255];     
    PrivateDir:    String[255];
    DatabaseDir:   String[255];
    Alias:         String[20];
  end;

  Tglobal = record
    ModoServidor:Boolean;
    DB:         TParadoxConfig;
  end;
var
  GL: TGlobal;
begin

// modifica esto con tus valores
  gl.DB.NetFileDir    := ini.ReadString('Paradox', 'NetFileDir', '\\');
  gl.DB.PrivateDir    := ini.ReadString('Paradox', 'PrivateDir', GetTmpDir);
  gl.DB.DatabaseDir   := ini.ReadString('Paradox', 'DatabaseDir', '\\');
  gl.DB.Alias         := ini.ReadString('Paradox', 'Alias', 'prog1');
  GL.ModoServidor := ini.ReadInteger('Settings', 'RGClient', 1) = 0;


  if GL.ModoServidor then // SERVIDOR
    LocalShareTRUE
  else   // es un ordenador cliente
    LocalShareFALSE;

  if dtbppal.Connected then  // si se queda abierto en diseño, nos dará problemas
    dtbppal.Close;

  if DtbPPal.Session.Active then // si se queda abierto en diseño, nos dará problemas
    DtbPPal.Session.Close;

  // DONE -c MOTOR BD : borrados los *.LCK

//  borraarchivos([lck, net]);

  //_________________________ SESSION Y ALIAS____________________________________
  with DtbPPal.Session do
  begin
    MensajeAdd(true, '2   Alias');
    if IsAlias(gl.DB.Alias) then  // un string que es el nombre del alias
      MensajeAdd(true, '2.1 Usando alias existente: ' + gl.DB.Alias)
    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;


      MensajeAdd(true, '1   Configurar la sesion');
      NetFileDir := GL.DB.NetFileDir; // un string del tipo '\\nombreservidor\prog\net'
      MensajeAdd(true, '1.1 Usando Carpeta NET: ' + NetFileDir);
      MensajeAdd(true, '1.2 Usando carpeta temporal: ' + gl.DB.PrivateDir);
      PrivateDir := gl.DB.PrivateDir; // un string del tipo 'c:\temp'
      MensajeAdd(true, '1.3 Modo Sesion: cmAll');
      ConfigMode := cmAll;
      MensajeAdd(true, '1.4 Modo servidor: ' + BoolToStrSP(GL.ModoServidor));  // Gl.ModoServidor es un Boolean, me indica si está o no en el servidor.
      OnPassword := MiSessionPassword; // para la contraseña de la BBDD 

  end;//with session
      //_________________________ SESSION _______________________________________
//_________________________ DATABASE __________________________________________
  with dtbppal do
      MensajeAdd(true, '3   Configurar Base de datos:');
      DatabaseName := gl.DB.DatabaseDir; // un string del tipo '\\nombreservidor\prog\datos'
      MensajeAdd(true, '3.1 Asignando Controlador');
      //    DriverName:= 'STANDARD';
      MensajeAdd(true, '3.2 Carpeta de Base de Datos: ' + GL.DB.DatabaseDir);
      MensajeAdd(true, '3.3 Asignando parámetros de Base de Datos (dtbppal) ');
      Params.Clear;
      params.Add('PATH=' + DatabaseName);
      MensajeAdd(True, 'PATH = ' + DatabaseName);
      params.Add('DEFAULT DRIVER=PARADOX');
      params.Add('ENABLE BCD=FALSE');

  MensajeAdd(true, '4   Alias: ' + gl.DB.Alias);
  MensajeAdd(true, '4.1 Alias asignado');
  //_________________________TDATABASE_________________________________________FIN

  DtbPPal.Session.Open;
  MensajeAdd(true, '5   Sesion Activa');
  DtbPPal.Connected := True;

{
El siguiente código asigna el Alias a todas las tablas y Querys que uso
De esta forma si en tiempo de ejecución, se crea un Alias nuevo, 
se configura todo el sistema.
}
    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, '6 **Conectado a Base de Datos**');

// AHORA FALTA ABRIR LAS TABLAS EN EL ORDEN CORRECTO según la
// relación Maestro - Detalle.
El resultado para mí es:
Código:
 
-------------------------------
      INICIO DE SESION
-------------------------------
14/06/2006 10:31:01 >> 2   Alias
14/06/2006 10:31:01 >> 2.1 Creando Alias: prog1 para la carpeta: \\prog\tablas
14/06/2006 10:31:01 >> 1   Configurar la sesion
14/06/2006 10:31:01 >> 1.1 Usando Carpeta NET: \\PC1\prog\
14/06/2006 10:31:01 >> 1.2 Usando carpeta temporal: C:\windows\TEMP
14/06/2006 10:31:01 >> 1.3 Modo Sesion: cmAll
14/06/2006 10:31:01 >> 1.4 Modo servidor: Si
14/06/2006 10:31:01 >> 3   Configurar Base de datos:
14/06/2006 10:31:01 >> 3.1 Asignando Controlador
14/06/2006 10:31:01 >> 3.2 Carpeta de Base de Datos: \\PC1\prog\tablas
14/06/2006 10:31:01 >> 3.3 Asignando parámetros de Base de Datos (dtbppal) 
14/06/2006 10:31:01 >> PATH = \\PC1\prog\tablas
14/06/2006 10:31:01 >> 4   Alias: prog1
14/06/2006 10:31:01 >> 4.1 Alias asignado
14/06/2006 10:31:01 >> 5   Sesion Activa
14/06/2006 10:31:01 >> 6 **Conectado a Base de Datos**
En tu archivo Alias.Dat, escribe un nombre nuevo, es decir, un Alias que no exista, así este código creará un Alias nuevo y lo configura TODO.

Como verás, el archivo .Net lo tengo configurado en el mismo sitio que el ejecutable en el servidor, (no tengo una carpeta especial para él) aunque eso da igual.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 14-06-2006 a las 11:26:36.
Responder Con Cita
 



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
Conexion de base de datos en win98 y winxp monicasierrar Conexión con bases de datos 6 25-05-2005 19:54:51
Paradox en Red con WinXP y Win98 EstebanWeb Conexión con bases de datos 17 11-03-2005 18:10:58
Capturar el usuario de WinXp y Win98?? danytorres API de Windows 1 25-01-2005 22:08:21
Mi Exe no funciona en Win98 pcicom OOP 3 13-12-2004 16:43:38
Al llevar .dpr de WinXP a Win98 no existe .dpr y problema nombres archivo largos images Varios 2 10-09-2004 23:25:27


La franja horaria es GMT +2. Ahora son las 12:46:03.


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