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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2006
URBANO URBANO is offline
Miembro
 
Registrado: jul 2003
Ubicación: Huelva
Posts: 126
Poder: 21
URBANO Va por buen camino
Error al abrir tabla en Winxp, pero en Win98 funciona, por que?

Hola foro, tengo una aplicacion realizada en delphi 5 y que utiliza tablas en paradox 7 . He estado leyendo distintos hilos sobre paradox en red y he llegado a generar el siguiente codigo:

Código:
const
     ENV_TEMP: PChar = 'TEMP';
     ENV_TMP: PChar = 'TMP';

type
  Talias= Record
    ano: integer;
    nombre: string[50];
    end;

var
  Fprincipal: TFprincipal;
  alias: Talias;
  Archivoatm: File of Talias;


procedure TFprincipal.configuracionred();
var
temp: PChar;
nombre,carpeta: string;
begin
//para solucionar problemas de impresion del qreport
//con windows2000 y xp.
//Con estas Lineas se corrigue el error que se daba con los
//listados grandes.
//El problema es por que la ruta del directorio
//temporal es muy larga y con esto la acortamos
//El directorio debe existir y en el se guardaran los distintos ficheros
//temporales que genera la aplicacion cuando realiza consultas a las tablas.
TEMP:= Pchar(ExtractFilePath(ParamStr(0))+'TEMPORAL');
SetEnvironmentVariable(ENV_TMP, TEMP);
SetEnvironmentVariable(ENV_TEMP, TEMP);

//Definir el directorio Privado y el Net
//El directorio privado "privatedir" contiene los ficheros *.LCK--> (LOCK)
//Archivos de bloqueo, se crean en cuanto un usuario edita un registro,
//contiene la información de qué registros está modificando un usuario,
//se creena en el directorio que indiquemos en "PrivateDir". Este directorio
//debe estar de forma local, en cada maquina.

Session.PrivateDir := ExtractFilePath(ParamStr(0)) + 'PRIV';

//El directorio "Net" contien al fichero *.NET --> Archivo que contiene
//los usuarios que estan accediendo a las tablas, por eso es MUY importante
//que todas las PCs apunten al servidor. Se crea, logicamente en la carpeta
//previamente compartida NETFILEDIR. Es decir, este directorio debe estar
//en el servidor.

//buscamos el alias seleccionado.
 AssignFile(archivoatm,ExtractFilePath(ParamStr(0))+'Datos\ALIAS.DAT');
 Reset(archivoatm);
 while not eof(archivoatm) do
 begin
 try
   read(archivoatm, alias);
 except on exception do
 begin
        showmessage('Fallo de lectura del alias.');
        abort;
 end;
 end;
 if fprincipal.aliasnombre.text = inttostr(alias.ano) then
   nombre:= alias.nombre;

 end;
 closefile(archivoatm);

carpeta:=DBGetPathAlias(nombre); //ruta del servidor.

Session.NetFileDir:= carpeta+'\NET';

//definimos el el BDE si el programa esta en modo cliente (datos en otro eq.)
//"LOCAL SHARE = FALSE" o esta en modo servidor (datos en el eq.)
//"LOCAL SHARE = TRUE".
carpeta:=ExtractFilePath(ParamStr(0))+'Datos\NET';
if DirectoryExists(carpeta) then //estamos en el servidor
begin
 LocalShareTrue();
end
else
begin //estamos en el cliente.
 LocalShareFalse();
end;

end;

//Esta funcion necesita en los  uses a:  Registry
// Function sets the "LOCAL SHARE" registry setting
// to TRUE in the BDE (32-bit BDE only).
procedure TFprincipal.LocalShareTrue();
var
  Reg : TRegistry;
const
  BDE_LOCAL_SHARE_KEY = '\Software\Borland\Database Engine\Settings\SYSTEM\INIT';
begin
  Reg := TRegistry.Create;
  With Reg Do
    begin
      Access := KEY_READ or KEY_WRITE;
      RootKey := HKEY_LOCAL_MACHINE;

      { Write the BDE keys }
      OpenKey(BDE_LOCAL_SHARE_KEY, True);
      WriteString('LOCAL SHARE', 'TRUE');
    end;
  Reg.Free;
end;

//Esta funcion necesita en los  uses a:  Registry
// Function sets the "LOCAL SHARE" registry setting
// to FALSE in the BDE (32-bit BDE only).
procedure TFprincipal.LocalShareFalse();
var
  Reg : TRegistry;
const
  BDE_LOCAL_SHARE_KEY = '\Software\Borland\Database Engine\Settings\SYSTEM\INIT';
begin
  Reg := TRegistry.Create;
  With Reg Do
    begin
      Access := KEY_READ or KEY_WRITE;
      RootKey := HKEY_LOCAL_MACHINE;

      { Write the BDE keys }
      OpenKey(BDE_LOCAL_SHARE_KEY, False);
      WriteString('LOCAL SHARE', 'FALSE');
    end;
  Reg.Free;
end;
Con este codigo defino (eso creo yo) los distintos directorios donse se alojaran los ficheros que intervienen en la gestion de paradox en red e identifico cuando la aplicacion esta ejecutando en modo cliente o en el servidor.

Este codigo lo ejecuto antes de crear el datamodule que contiene todas mis tablas.
El codigo lo ejecuto y va perfectamente (creo yo). Independientemente que la aplicacion este instalada en win98 o en winxp.
El problema esta en el momento que habro una tabla, ya que si lo hago desde el servidor no me da ningun tipo de problema, pero si lo hago desde el cliente
me da el siguiente:
Cita:
Detail Table Open operation failed.
Table: proveedores.DB
Siempre me da este error, habra la tabla que habra.
En el servidor tengo instalado win98 y en cliente winxp.
Ya he probado a reparar la base de datos con sysutil y TUtility, pero ambas utilidades me dicen que las tablas estan bien.

Haber si alguien puede hecharme una mano. Gracias.
__________________
El saber no ocupa lugar.
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 17:47:09.


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