Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Que pasa con mi base de datos!??? (https://www.clubdelphi.com/foros/showthread.php?t=39123)

gamez2809 11-01-2007 05:22:33

Que pasa con mi base de datos!???
 
Que tal amigos!? Soy nuevo en este foro, quisiera que alguien me ayudara con este problema que tengo, no se por donde atacarlo..

La situacion es esta, estoy haciendo un proyecto de punto de venta en delphi 6, y estoy utilizando Paradox, normalmente no tengo este problema.

Tengo una tabla con varios campos, y ya tiene muchos registros, pero le acabo de agregar el campo Year, y mediante un procedimiento lo llené para todos los registros que ya tenia ,checo la tabla con Database Desktop y efectivamente el campo Year esta lleno, pero al seguir programando un rato despues me encuentro con que la tabla esta como antes, con el campo Year vacio para todos los registros. Ejecuto varias veces el programa y ahi estan los datos que escribi.. pero a las tantas de repente los datos ya no estan...

Esto no es todo... copio todos los archivos que se generan de la tabla, incluyendo los indices y todo, a otra carpeta, cuando el campo Year de la tabla esta lleno, y al abrir la tabla con Database Desktop, desde la nueva ubicacion de la tabla, dicho campo esta vacio otra vez!!! como si un documento de excel no guardara los ultimos cambios.

Esto tambien me paso al agregar automaticamente muchos registros a otra tabla.. la abri de nuevo, y los registros ya no estaban... no se que sucede... quizá es mi metodo para escribir los datos a la tabla.. les dejo el codigo, y espero que alguien me eche una mano...

Código Delphi [-]
{ Este es el codigo que me dio el problema del campo Year}
ventas.Filtered:=false;
        ventas.First;
        for i:=1 to ventas.RecordCount do
                begin
                        ventas.Edit;
                        ventas['year']:=strtoint(copy(ventas['fecha'],7,4));
                        ventas.Post;
                        if ventas.Eof=false then ventas.Next;
                end;

{ Este es el que me preocupa mas, porque los datos no se guardan por mucho tiempo... desaparecen }

        ventas.First;
        for i:=1 to ventas.RecordCount do
                begin
                        if clientes.Locate('nombre',ventas['nombre'],[])=false then
                                begin
                                        clientes.Append;
                                        clientes['nombre']:=ventas['nombre'];
                                        clientes['domicilio']:=ventas['domicilio'];
                                        clientes['ciudad']:=ventas['ciudad'];
                                        clientes['rfc']:=ventas['rfc'];
                                        clientes['vendedor']:=ventas['vendedor'];
                                        clientes.Post;
                                end;
                        if ventas.Eof=false then ventas.Next;
                end;

Muchas Gracias!!!

roman 11-01-2007 06:50:24

Primero que nada, bienvenido al Club y felicidades porque son pocos quienes en su primer mensaje usan las etiquetas correctas.

Ahora bien, en cuanto al asunto que preguntas pues no sé yo cuál pueda ser la razón de que desparezcan los datos, sobre todo porque comentas que ya los has visto con el Database Desktop.

Sin embargo, el código que muestras es un poco raro porque lo usual para recorrer una tabla es:

Código Delphi [-]
ventas.First;

while not ventas.EoF do
begin
  ...

  ventas.Next;
end;

en lugar de basarse en el número de registro. Por otro lado, yo creo que te convendría más usar un Query para la actualización, usando la siguiente consulta SQL:

Código SQL [-]
update ventas
set year = extract(year from fecha)

en el caso de qe fecha sea de tipo DATE. Si no, si es un alfanumérico, entonces puedes usar la función SUBSTR:

Código SQL [-]
update ventas
set year = substring(fecha from 7 for 4)

Cualquiera de las dos opciones, además de hacer la actulización en un sólo paso, puedes hacerla desde el SQL Explorer, de manera que ni siquiera tendrías que programar un procedimiento.

// Saludos

roman 11-01-2007 07:09:13

Una corrección:

Como year es una palabra reservada para paradox, las consultas SQL deberán ser:

Código SQL [-]
update ventas
set "ventas"."year" = extract(year from fecha)

De cualquier manera, te convendría cambiar el nombre del campo para evitar problemas.

// Saludos

basti 11-01-2007 13:29:46

Comprueba que cierras la tabla antes de finalizar la aplicación. De hecho, prueba a cerrarla justo después del código para rellenar el campo. Puede ser que la aplicación no cierre la tabla correctamente, entonces no se actualizarán los datos, sólo los verás mientras esté la aplicación funcionando. Y si copias, como dices, los datos a otra carpeta, estarán vacíos.

gamez2809 11-01-2007 20:39:13

Thankz
 
Que tal, gracias por sus respuestas, realmente cuando aprendi a programar en delphi no profundice mucho en base de datos, asi que lo que se hacer es casi puro instinto, jeje, gracias por el consejo con el codigo, y en cuanto lo de cerrar las tablas, en que consiste? es ponerlas en active:=false ? o no me enseñaron eso? Gracias por su ayuda!

Saludos


La franja horaria es GMT +2. Ahora son las 10:23:30.

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