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 02-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Eterno problemas de indices

Hola gente... tengo delphi 5 y paradox... 15 pc una con NT (servidor) y otras W95/98/Me el problema es que se rompen los indices...
Tengo un Tsession, todas las tablas y querys apuntan al tsession, este componente tiene el netfiledir como \\servidor\c\sistema\datos y el private (dicen lugar visible) en C:\. El archivo *.NET siempre se aloja en el C: en cada máquina (el cual elimino al ejecutar el prg) y los *.LCK se alojan en Datos. La ruta del servidor lo leo al arrancar cada prg de un .Ini, el Tsession se activa despues de leer el .ini... Funcionó bien unos días (1 semana) y ahora se rompen los indices todos los días . Tengo un prg que los arregla pero para hacerlo necesito apagar todas las pc (o salir del prg) y bueno no es solución... He leido todos los artículos que encontré en la internet más los del club... aparentemente esta todo correcto pero no es asi.
¿Tendrán alguna sugerencia?
Gracias bye
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #2  
Antiguo 02-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
C:\. El archivo *.NET siempre se aloja en el C: en cada máquina
El archivo Net debe de estar solamente en el servidor, en las demás maquinas debe de indicarse en donde se van a guardar los ficheros de tipo lck, que si todo va bien se eliminaran automáticamente cuando el usuario cierre la sesión.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 02-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias por responder tan rápido...
Cita:
Empezado por marcoszorrilla
El archivo Net debe de estar solamente en el servidor
Este archivo se crea al iniciar el prg. ¿cómo hago para crear el net solo en el servidor?

Cita:
Empezado por marcoszorrilla
en las demás maquinas debe de indicarse en donde se van a guardar los ficheros de tipo lck.

Un Saludo.
Los lck se crean solamente en el servidor ¿está bien?
Gracias
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #4  
Antiguo 02-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Pablo Carlos
Este archivo se crea al iniciar el prg. ¿cómo hago para crear el net solo en el servidor?
Antes de abrir la sesion, indica la carpeta \\servidor\carpeta en el parametro Session.NetFileDir.

Cita:
Empezado por Pablo Carlos
Los lck se crean solamente en el servidor ¿está bien?
Si.

Los indices pueden corromperse, sugiero que uses el programa caerques (en la seccion "ejemplos" del Club) para mantener los indices y empaquetar la base de datos.

Necesitarás saber que no hay más usuarios activos antes de rehacer los índices, esta función sirve de ayuda

Código Delphi [-]
uses bde, dbiProcs;
// devuelve el nº de usuarios usando el BDE.
// tambien incluye al que usa esta funcion, por tanto devolverá 
// como mínimo 1
function GetUsers():Integer;
var
  UserList: TStringlist;
  TmpCursor: hDbiCur;
  rslt: dbiResult;
  UsrDesc: USERDesc;
begin
  Result:=0;
  Check(DbiOpenUserList(TmpCursor));
  UserList := TStringList.Create;
  try
    UserList.Clear;
    repeat
      Rslt:= DbiGetNextRecord(TmpCursor, dbiNOLOCK, @UsrDesc, nil);
      if Rslt <> DBIERR_EOF then
        UserList.Add(UsrDesc.szUserName);
    until Rslt <> DBIERR_NONE;
    Result := UserList.Count;
  finally
    Check(DbiCloseCursor(TmpCursor));
    FreeAndNil(UserList);
  end;
end;
Espero que no haga falta más "uses".

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 03-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Lepe...
Mira, tengo este código...
Código Delphi [-]
procedure TdmTablas.DataModuleCreate(Sender: TObject);
var
 i : TIniFile;
 Ruta : String;
begin
 i := TIniFile.Create('C:\Escuela\Servidor.ini');
 Ruta := i.ReadString('Datos','Servidor', '');
 i.Free;
 Try
 Session1.Active := False;
 Session1.NetFileDir := Ruta;
 Session1.PrivateDir := ('C:\Sistema);
 Session1.Active := True;
 dbEscuela.DataBaseName := Ruta;
 dbEscuela.Connected := True;
 tblDatosPersonales.DataBaseName := Ruta;
 tblPuerto.DataBaseName := Ruta
Como ven le indico mediante un ini la ruta para el NetFileDir que segun el ini es \\server\sistema\datos y en el PrivateDir mmmm (cric cric cric pensando...)
Aparentemente tengo mal el PrivateDir ya que de acuerdo a lo que Marcos dice -se debe crear en cada máquina.
Gracias
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 03-04-2005 a las 01:28:33. Razón: Pensando
Responder Con Cita
  #6  
Antiguo 03-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Parece ser que el NetFileDir lo tienes bien asignado, sin duda se trató de un fallo al postear el primer mensaje.

Advertencia: Cuando abres el Database Desktop, se crea el fichero .NET en C:\, puede que lo hayas visto por ese motivo, pero no afecta al programa.

El PrivateDir, se puede poner apuntando a C:\WINDOWS\TEMP de cada máquina, la carpeta debe existir.

Por cierto, LOCAL SHARE del bde lo has modificado?, es algo que no se ha mencionado.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 03-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por Lepe
El PrivateDir, se puede poner apuntando a C:\WINDOWS\TEMP de cada máquina, la carpeta debe existir.
Gracias... ten presente que en windows nt c:\windows\temp no existe es por eso que al PrivateDir (generador de los .LCK?) tiene como ruta c:\Sistema que esa carpeta obviamente si está..
NetFileDir (generador, por asi decirlo, del .NET?)
el bde ni lo toque... me imagino que el local share debe estar en false... pero cómo decirle al bde que se está instalando en el servidor (ya que aqui será local) o en otra pc (red)
Saludos bye
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #8  
Antiguo 03-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
*.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 crea en la carpeta de las tablas.

*.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.

PRIVATEDIR--> directorio usado temporalmente para guardar las modificaciones de los registros, useasé un buffer.

Para indicar si es el servidor o no, puedes usar en la configuración un RadioGroup con 2 opciones:
- Este ordenador tiene la base de datos
- Este ordenador accede a la base de datos a través de la red.

Si quieres que sea automatico, al iniciar la aplicación compruebas si existe la carpeta c:\sistema\datos, y además que exista una de las tablas, si todo va correcto, estamos en el servidor y pones LOCAL SHARE a true, si es falso, estamos en los "clientes" así que lo ponemos a false. Esto último DEBE hacerse, por si el usuario cambia el ordenador "servidor".

Para modificar LOCAL SHARE, puedes usar la rutina que Marcos Zorrilla me ofreció amablemente en su tiempo.


Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 03-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Se me olvidaba un detalle.

Hay rutinas (windows.GetTempPath) para averiguar la carpeta TEMP usada en el sistema operativo, sería conveniente usarla.

Acabo de buscar por el foro y he encontrado este hilo no tiene que ver con la session, pero sí con QuickReport, quizás te sirva.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 03-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Marcos Zorrilla, Lepe
Lepe: Gracias por lo explicativo e instructivo de tu respuesta...
Resumiendo
LCK -> en cada máquina
NET -> Sólo en servidor
BDE -> Configurado por código para poner a True o False el Local Share (probaré con el código que te dió marcoszorrilla)
Un buen dato -> windows.GetTempPath lo estudiaré
Gracias nuevamente... Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #11  
Antiguo 03-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Me permito una correccion:

Resumiendo
LCK -> Sólo en servidor, carpeta de tablas
NET -> Sólo en servidor
BDE -> Configurado por código para poner a True o False el Local Share (probaré con el código que te dió marcoszorrilla)
Un buen dato -> windows.GetTempPath lo estudiaré

Gracias nuevamente...
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 03-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por marcoszorrilla
El archivo Net debe de estar solamente en el servidor, en las demás maquinas debe de indicarse en donde se van a guardar los ficheros de tipo lck, que si todo va bien se eliminaran automáticamente cuando el usuario cierre la sesión.


Un Saludo.
Cita:
Empezado por Lepe
Me permito una correccion:

LCK -> Sólo en servidor, carpeta de tablas

No entiendo
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 04-04-2005 a las 00:31:18.
Responder Con Cita
  #13  
Antiguo 04-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo siempre he visto los LCK en la carpeta de las tablas. Ahora mismo no puedo hacer la prueba.

Si alguien puede aportar más datos, será bienvenido, él y los datos

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 04-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si todo está bien configurado se crean en el PrivateDir de cada equipo cuando éste se conecta y se eliminan si no existe ningún fallo al desconectarse.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #15  
Antiguo 04-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Buenas... les comento para que quede registro en el club...
Todas las tablas y querys conectados al Tsession
Todas las tablas tienen en el AfterPost FlushBuffers (no se si será bueno esto)
Cuando se ejecuta el programa en cada máquina, (evento on create del datamodule) se abren las tablas y en el evento ondestroy se cierran las tablas.
Cada máquina tiene instalado la aplicación y el bde.
Tsession -> el PrivateDir le indico una carpeta visible de la pc local, en mi caso C:\Sistema. El NetFileDir se lo indico con un archivo ini que en este caso es \\Servidor\C\Sistema\Tablas (este archivo es leido al comenzar)
En la form de ingreso verifico, con un if, que si están las tablas en c:\Sistema\Tablas modifico el registro a la clave local share poniendo ésta a TRUE de lo contrario (si no se encuentran las tablas) la clave local share pasa a FALSE con esto logro que automáticamente si es servidor es local y si la pc está en red local share es false... además de eliminar los LCK si es que aún están (por si no se borraron al salir de la aplicación, esto si es la maquina que está en red) dentro de 3 hs vere el funcionamiento... trataré de ubicar los NET y los LCK para saber exactamente donde se localizan en esta red y confirmaré la destrucción de los índices o la no destrucción ... Según la Cara oculta de delphi (por que tambien he estado leyendo ) cuando usas paradox en red no es aconsejable que el servidor trabaje en el prg, aconseja que sea sólo eso, servidor, que en mi caso no es posible . El siguiente paso, luego de ver ese tema, es seguir estudiando y/o preguntando al respecto o confirmar que todo va sobre rieles...
Gracias a todos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 04-04-2005 a las 18:20:24. Razón: Ampliando
Responder Con Cita
  #16  
Antiguo 04-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Aqui de vuelta... Una bomba cayo en mis índices, crash.-
Les comento... usando el server donde es local los archivos LCK se crean según el PrivateDir -> c:\Sistema y el NET se crea según el NetFileDir en mi caso -> c:\Sistema\Tablas.
Cuando inicio las pc de red se crean los LCK y el NET en el server en c:\Sistema\Tablas y nunca se eliminan, aún cerrando toda las pc de red más el servidor, siempre quedan alli. en las pc de red jamas se crean ni NET ni LCK... tipo conexión y direcciones del Tsession todos esos datos están en mi pos anterior.-
Por mi lado sigo investigando y probando, si alguien me puede acercar un salvavidas tipo redondo con cabeza de patito se lo agradecere. Gracias
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #17  
Antiguo 05-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Según lo investigado, hasta el momento, lo que he realizado esta bien, pero si se destruyen los índices quiere decir que no está tan bien.-
Sigo leyendo artículos y no encuentro nada que profundice sobre el tema, simplemente "esto debe ser asi" "conectar de esta manera" y guala todo anda bien, patrañas ¿O_O? .-
En fin, acepto sugerencias
Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #18  
Antiguo 05-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si intentas modificar el mismo registro en 2 ordenadores de la red, se te queja el bde o no??

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 05-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Gracias Lepe por tu preocupación. Te comento: al enceder las maq se está insertando fecha, hora, puesto, usuario... ayer hice pruebas prendiendo y apagando 5 pc practicamnte a la vez durante casi una hora (te imaginas las veces que arrancaron y apagaron cada uno ), y no paso nada, por parte del bde, sí en un caso el servidor me paro una pc por problemas de petición pero al iniciarlo nuevamente arranco este en forma normal, hoy por la mañana arranco algunos pc y empezaron a fallar, he tenido que dejarlos todos local para que puedan trabajar con windows al menos . Ese sería el reporte de novedades, ahora mismo sigo buscando información en internet, pero poco hay de paradox en red .-
Gracias, saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #20  
Antiguo 06-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Así es imposible detectar si todo va bien, te aconsejo poner un boton que haga un table1.edit, y realices eso en 2 ordenadores, debe darte un error de record locked by another user, si no lo da, CONFIGURACION mal establecida.

En esta web de BORLAND dice que hay nada más que 8 causas posibles para los INDEX OUT OF DATE, (menos mal que solo son 8 )

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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 03:31:25.


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