PDA

Ver la Versión Completa : Tablas paradox


Bicholoco
07-03-2007, 21:08:01
En primer lugar, hola a todos los que me lean. :)

Tengo un problema. Llevo algún tiempo manejando Delphi, pero hace poco entré en bases de datos y me estoy volviendo loco. :eek::eek::eek:

Tengo que crear una base de datos no excesivamente grande.La tabla es sencillita: 2000 elementos (filas) con 8-10 valores(columnas) cada una.

Pero ha de ser rapidilla porque se leerán/modificarán esos miles de datos de una vez. La tabla almacena datos de un cálculo largo y mi programa en Delphi debe leer lo valores de las primeras columnas de la tabla, calcular con ellos, y escribir los resultados en el resto de la tabla.

Todo se ejecuta en un mismo ordenador (nada de consultas a un servidor).

He probado con un DataSource, un ClientDataSet y un DBGrid (con un archivo *.cds), pero cuando la cosa se hace grande, aquello se ralentiza.

Tengo 2 dudas.

- ¿Veis correcto emplear mejor una tabla Paradox? ¿O sería mejor otro tipo?. Tengan en cuenta que apenas poseo conocimientos de bases de datos, pero no quiero que se ralentice todo mucho.

- En tal caso, ¿Como puedo crear dicha base de datos?¿Y enlazarla a Delphi?( Los TDataBase, TTable y esas cosillas del Form).

Sé que es una pregunta muy general, con respuesta algo larga, pero es que no he tocado nada de BBDD nunca. Y siguiendo los libros estoy algo loco.

Mil gracias por adelantado.

PD: Al que me lo resuelva, le hago un monumento.

karlaoax
07-03-2007, 22:01:41
Te recomiendo que utilices MYSql con los componentes de ZeosLib, pues es mas facil controlar tus registros, ademas mysql es facil de utilizar, en red o local Paradox es muy malo, yo estoy con ese problema ahora :S

Onti
07-03-2007, 22:08:42
FireBird es una gran opcion

Onti
07-03-2007, 22:14:54
Aqui (http://www.clubdelphi.com/foros/showthread.php?t=40813) coloque un ejemplo simple de la conexión a una bd

marcoszorrilla
07-03-2007, 22:24:57
Creo que lo que quieres hacer se puede realizar perfectamente con Paradox, porque 8.000 registros los puede manejar sin gran dificultad, el problema quizás venga dado porque mientras actualizas no desconectas la rejilla de la fuente de datos y esto hace que vaya lento prueba y nos cuentas.


DmXX.Cli.DisableControls;

Try

while not(Data.eof) do
begin

for columna := 0 to Dbgrid1.Columns.Count-1
do
begin
excel.Cells[fila,columna + 1].Value:=Data.FieldByName(Dbgrid1.Columns[columna].FieldName).asString;
end;
Data.Next;
fila:= fila + 1;
end;
Except
ShowMessage('Atención, se produjo un error en la transmisión.');
end;
DmXX.Cli.EnableControls;
end;

Un Saludo.

roman
07-03-2007, 22:27:35
el problema quizás venga dado porque mientras actualizas no desconectas la rejilla de la fuente de datos y esto hace que vaya lento

¡Ah! ¡Eso debe ser! Ya me extrañaba que le fuera lento, sobre todo porque la prueba la hizo con un ClientDataSet.

// Saludos

Bicholoco
08-03-2007, 11:05:43
¡Ah! ¡Eso debe ser! Ya me extrañaba que le fuera lento, sobre todo porque la prueba la hizo con un ClientDataSet.

¿Insinuas que los ClientDataSet son rapidillos?
Pues como me da pereza empezar de cero, voy a seguir con ellos.

Y si, la culpa de que fuera lento era por el DbGrid. Ha sido desactivarlo e ir todo como la seda.

Gracias a todos por la ayuda. En breve comenzaré la construcción del monumento.:)

basti
08-03-2007, 12:42:50
Si lo que necesitas es velocidad, prueba dos cosas. Primero desconectar todos los controles visuales mientras haces las operaciones con ClientDataset.DisableControls (cuidado, también se desactivarán las relaciones maestro-detalle si las tienes). No hacer ningún ApplyUpdates hasta que hayas finalizado, así el ClientDataset trabajará siempre en memoria.

roman
08-03-2007, 19:55:55
cuidado, también se desactivarán las relaciones maestro-detalle si las tienes

Gracias por la información, no estaba al tanto de eso. Y para complementar, según la ayuda, al parecer podemos lograr el mismo efecto del DisableControls poniendo Table.BlockReadSize igual a un valor positivo. Con esto los controles de datos no se actualizan ni se generean eventos, pero no se rempre la relación maestro-detalle.

// Saludos

Lepe
08-03-2007, 20:35:44
según la ayuda, al parecer

Lo ratifico, he usado blokReadSize con excelentes resultados en tablas paradox.


For BDE-enabled datasets, setting BlockReadSize also causes the dataset to fetch database information in blocks of BlockReadSize records, which it then buffers.

No asignemos un 1 a BlockReadSize, quizás un valor de 50 o 200 según la cantidad de información que se quiera rescatar de un golpe.

Saludos

basti
08-03-2007, 20:55:36
podemos lograr el mismo efecto del DisableControls poniendo Table.BlockReadSize igual a un valor positivo. Con esto los controles de datos no se actualizan ni se generean eventos, pero no se rempre la relación maestro-detalle.


Gracias por la información, esta no la sabía yo.