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 27-07-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Question Reparar Tablas Paradox

Saludos a todos los foreros.. Tengo un programa terminado en Delphi 6 con Paradox 7, el caso es que a veces las tablas se corrompen (mas de lo que me gustaria) ¿Alguien me puede sugerir algun metodo para implementarle al programa una opcion o procedimiento para chequeo y reparacion de las tablas?? de tal forma que cuando inicialize la aplicacion verifique que todas las tablas necesarias estan correctas.
(Ya tengo implementado un sistema de copias de respaldo, pero tambien me han fallado estas...)
Gracias por su interes...
Reciban un cordial Saludo.

PD: ya se que FireBird es mejor que Paradox, pero ya esta acabado...
Responder Con Cita
  #2  
Antiguo 27-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
EPA! yo no sabía que las BDs Paradox tuvieran problemas de integridad tan "marcados"... a mi me parece que hay alguna fallita en el diseño; cuentanos un ejemplillo de lo que sucede para ver que se podría hacer.

PD: si el sistema vale la pena aconsejaría que comiences a pensar en migrar a otro SGBD...
Responder Con Cita
  #3  
Antiguo 29-07-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Question Problema con los AutoInc

He revisado las tablas y el problema me surge de los campos AutoIncrementales que les tengo puestos de Key primaria y el problema surge cuando se va la luz (problema antiguo, ya lo se) que despues las tablas que usan ese sistema me saltan con un problema de Key Violation al intentar añadir un registro. Uso el programa DBExplor32 para reindexar y empaquetar pero no resuelve el problema... Usando el Database Desktop reestructuro la tabla añadiendo otro autoincremental de llave primaria y borrando la anterior y asi logro corregir la tabla.... !!vaya solucion de pena....!!!! ¿alguna sugerencia para que esto no me pase??...
Gracias por su tiempo...
Un Saludo
Responder Con Cita
  #4  
Antiguo 29-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Ok respecto a la integridad de las tablas, a mi tambien me ha pasado pero con ayuda del club lo solucione chequea este hilo, y para que no suceda revisa este articulo de paradox en red, simplemente genial
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 29-07-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Angry No va

Gracias por tu respuesta... probe las dos herramientas de reparacion de tablas pero ninguna de ellas es capaz de reconstruir el autoincremental... o sea que sigo con el mismo problema...
Gracias ...
Responder Con Cita
  #6  
Antiguo 30-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por tarco35
...el problema surge cuando se va la luz...
Vaya en tal caso, ántes de tener que solucionar el problema; por qué no intentas prevenirlo? no creo que "cueste" mucho cerrar la conexión con la BD, hacer un backup y restaurar la conexion cada cierto intervalo de minutos. Al iniciar tu aplicacion verificas si se ha cerrado adecuadamente el programa y dependiendo de eso restauras o no el backup.

Saludos.
Responder Con Cita
  #7  
Antiguo 30-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
y un UPS???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #8  
Antiguo 30-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Mejor aún.
Responder Con Cita
  #9  
Antiguo 31-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Me pregunto si tus tablas siempre estan abiertas, de ser así es necesario que trates de mantener cerradas las tablas hasta que realizas una operación de insertar, borrar, actualizar.

Con eso minimizaras los problemas de corrupcion de tablas, ademas de lo ya mencionado de tener un UPS.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 03-08-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Question Aun Asi

Disculpen la tardanza pero he tenido un problemilla de conexion a internet... El caso es que las tabla, no todas, pero si algunas han de estar permanentemente abiertas porque la aplicacion tiene que realizar apuntes de cronometros y cosas así.... por ahora la solucion que he aportado ha sido poner un UPS y ponerle al programa una opcion de cerrado de emergencia, que guarda todos los vectores de datos antes de salir y cierra las tablas... Pero evidentemente no es solucion definitiva ¿Alguien conoce alguna forma de reconstruir este autoincremental siendo llave primaria de la tabla?
Gracias por su colaboracion
Responder Con Cita
  #11  
Antiguo 03-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por tarco35 Ver Mensaje
Disculpen la tardanza pero he tenido un problemilla de conexion a internet... El caso es que las tabla, no todas, pero si algunas han de estar permanentemente abiertas porque la aplicacion tiene que realizar apuntes de cronometros y cosas así.... por ahora la solucion que he aportado ha sido poner un UPS y ponerle al programa una opcion de cerrado de emergencia, que guarda todos los vectores de datos antes de salir y cierra las tablas... Pero evidentemente no es solucion definitiva ¿Alguien conoce alguna forma de reconstruir este autoincremental siendo llave primaria de la tabla?
Gracias por su colaboracion
Me imagino que usas un tipo Timer para ingresar datos a las tablas, porque no usar el evento onTimer para grabar en la tabla, de esa forma no tienes porque tener abiertas las tablas.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 05-08-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Question Es por USB

Los datos que tengo que anotar y cronometrar los adquiero a traves del puerto USB y despues de decodificarlos hago los apuntes necesarios... reitero mi pregunta... ¿se puede reconstruir el autoincremental de una tabla?
Gracias
Responder Con Cita
  #13  
Antiguo 06-08-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Este código es para reparar los campos Autonuméricos en paradox. El procedimiento ActualizarAutoInc es cortesía de Román.

Código Delphi [-]

procedure ResetAutoinc(Tabla: TTable);

  function HayAutoinc : string;
  var
    i : Integer;
  begin
    Result := '';
    i := 0;
    while (i < Tabla.FieldCount) and (Result = '')  do
    begin
      if Tabla.Fields[i].DataType = ftAutoinc then
        Result := Tabla.Fields[i].FieldName;
      i := i + 1;
    end;
  end;

  function ValorAutoinc(campo : string) : Integer;
  var
    q : TQuery;
  begin
    q := TQuery.Create(self);
    q.DatabaseName := Tabla.DatabaseName;
    q.SQL.Add(format('Select max(%s) as result from %s', [campo, Tabla.TableName]));
    q.Active := True;
    Result := q.FieldByName('result').AsInteger;
  end;

  procedure ActualizarAutoinc(valor : Integer);
  var
    mystream : tfilestream;
    AParams : TStringList;
    dir : string;
  begin
    AParams := TStringList.Create;
    AParams.Clear;
    Session.GetAliasParams(Tabla.DatabaseName, AParams);
    Dir := Copy(AParams.Strings[0],6,255);
    if dir[length(dir)] <> '\' then
      dir := dir + '\';
    AParams.Free;

    mystream := tfilestream.Create(dir + tabla.TableName,
                fmOpenWrite + fmShareExclusive);
    try
      mystream.Seek(73, soFromBeginning);
      mystream.Writebuffer(valor, SizeOf(valor));
    finally
      mystream.Free;
    end;
  end;

var
  valor : Integer;
  campo : string;
begin
  try
    Tabla.Active := True;
    campo := HayAutoinc;
    if campo <> '' then
    begin
      valor := ValorAutoinc(campo);
      Tabla.Active := False;
      ActualizarAutoinc(valor);
    end;
  finally
    if Tabla.Active then
      Tabla.Active := False;
  end;
end;
Responder Con Cita
  #14  
Antiguo 12-08-2007
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Thumbs up Lo pruebo

gracias por el codigo... voy a probarlo a ver como va.... gracias de nuevo
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La instruccion "optimize" tambien puede reparar tablas?? ctronx MySQL 0 19-05-2005 17:36:14
Reparar Paradox pruz Conexión con bases de datos 2 11-11-2004 19:07:50
Reparar Tablas Mysql pruz Conexión con bases de datos 5 27-10-2004 19:59:13
Como reparar tablas tipo Innodb ctronx MySQL 1 19-08-2004 01:21:51
Saber si mi prog. se cerro bien para reparar tablas ( paradox ) jealousy Conexión con bases de datos 3 29-05-2004 18:34:21


La franja horaria es GMT +2. Ahora son las 17:25:06.


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