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)
-   -   No se banca datos KiloMetricos (https://www.clubdelphi.com/foros/showthread.php?t=44280)

casacham 02-06-2007 03:06:04

No se banca datos KiloMetricos
 
Hola amigos del foro

Otra vez aqui comunicandonos y yo planteando problemas. Esta vez se trata de una base de datos creada con Acces que contiene muchos millones de registros, mas de 40 millones para ser algo mas preciso (PAdron Electoral Argentino). El tema es que cuando quiero acceder a esta base de datos con los clasicos TAdoConection y TAdoTable, al realizar Adotable1.Open comienza a leer el disco y se tarda unos minutos para finalmente devolverme un error que dice que FALTA MEMORIA. Me da la impresion que quisiera cargar todos los registros en memoria al mismo tiempo. Mi idea era desarrollar una aplicacion que pudiera administrar esta base de datos realizando diversas consultas. Pero encontre este escollo en el primer paso y no puedo resolverlo. En definitiva no puedo conectar mi aplicacion con la base de datos. Estoy leyendo manuales que busque en internet de ADO y Deplhi, pero la verdad es que no me dicen nada al respecto. ¿Alguien sabra algo por aqui?

gatosoft 02-06-2007 05:29:41

Hola casacham,

No conzco muy bien el funcionamiento de estos componetes, pero te puedo decir que la utilización de un componente TTable no es muy recomendada, precisamente por que la tabla se carga toda en memoria con el open, pues no se le da ninguna restricción...

Lo mas recomendado es utilizar un componente TQuery (supongo que existirá un TAdoQuery, o algo asi) y traer los registros filtrados, solo el o los que necesites (nunca vas a necesitar en pantalla a los 40 millones, ni siquiera tendria sentido tener cargados al tiempo 10.000 o 1.000 registros al tiempo (aunque uno nunca sabe)....

Podrias en un caso extremor querer tener en pantalla todas las personas que votan en una misma mesa o un mismo lugar... en fin...

Por otro lado, te recomiendo que cambies tu motor de base de datos, pues Access es una base de datos "de combate" y como todos los productos M$ se comen todos los recursos del sistema para poder trabajar.... hay otras opciones que tambien funcionan como base de escritorio que son muy buenas... InterBase, PostgreSQL (la recomiendo), Sql-server, etc.

Bueno no sabria en que mas ayudarte... por ahora no se si puedes hacer esta consulta en esa base de datos y me envias los resultados para mirar unos aspectos tecnicos...

SELECT DIRECCION, TELEFONO, E_MAIL
FROM ELECTORES
WHERE NOMBRE='NATALIA'
AND APELLIDO='OREIRO'

:D

Faust 03-06-2007 00:12:34

Fraude electoral
 
Wow, que harás o que planearás hacer con el padrón electoral argentino, mmm, no creo que sea algo bueno.

Más bien a mi no me gustaría que esa información estuviera al alcance de cualquiera.

xander 03-06-2007 01:09:11

Un médico cirujano, programando en Delphi, contra el Padrón Electoral Argentino, que es una base de datos de 40 milllones de registros, montada en Access!!!!

Si esto no es surrealismo entonces ya no se que lo sería...:D

Un saludo, Doitor...

casacham 03-06-2007 01:35:00

No tiene nada que ver
 
Lo lamento por xander:mad: y por Faust:mad: . El hehco de que opinen asi es que son gente de poco confiar, com podría encargarles que realizaran una aplicacion para una empresa si estan pensando en utilizar datos para objetivos no aprobados, es de poca etica lo que sus lineas denotan detras de ustedes. A ver, que es lo que se puede hacer o no con eso, es algo que no les interesa. Ademas aqui no se les esta pidiendo que opiniones sobre utilidad o no de datos, para el chismoserio existen otros foros donde sus comentarios tal vez sean aplaudidos. Aqui a nadie le interesa esos comentarios.
Para los que les interese saber sobre el proyecto, estoy en un proceso de aprendizaje de programación de base de datos y necesitaba conseguir alguna con varios miles de registros, que mejor que lo que consegui. Millones de registros. El punto es aprender a manipular grandes volumenes probando los limites de Delphi. El desafio fue traspasar esos datos desde dBase a tablas de Acces, que con una aplicacion de Delphi lo logré. El punto es que delphi no puede abrir las tablas con los componentes mencionados ni siquiera con TAdoQuery ya que solo cambia la forma en que se conecta con la base de datos pero no el procedimiento madre, generandose el mismo error y demoras. Pero el desafio es: Si Acces puede abrir y manipular esa gran cantidad de datos, como no puedo hacerse a traves de Delphi. Debe existir alguna manera de lograrlo.

pd: voy a conseguirme tambien el padron mexicano para ver que hago con el:D. Todo esta en internet, solo es cuestion de bajarlo a tu ordenador

xander 03-06-2007 02:02:06

:D:D:D:D Ahora resulta que describir una situación particular como surrealista me hace un tipo de poca ética y de dudosa confiabilidad... vaya, generalmente las muchachas me dicen eso por ahí de la segunda o tercera invitación a cenar pero no de primera y pata... bueno, alguna vez tenía que suceder...

No se arlebreste doitor que no era en mal plan... solo yo con mi apestoso e irreverente humor negro, que nunca me doy a entender...

Tu problema debe ser la forma como te conectas a esa base de datos... seguro que cuando abres la tabla en acces no esta tratando de cargarse a memoria los 40 millones de registros.. y tu programa (dependiendo de la forma en como te conectes) al darle Open a la tabla o Consulta si lo está tratando de hacer... además no me imagino para que quieras abrir una tabla de 40 millones nomás así porque si, a menos que le quisieras pasar un super complicadisimo algoritmo de DataMining...

Mi recomendación... Access no es para esos trotes... si de verdad quieres aprender a manipular grandes cantidades de información, utiliza un servidor SQL y ahi si encontrarás muchas formas de explotar la información usando Vistas, Procedimientos Almacenados, Triggers y demas chunches... con access te limitarás más de lo que aprenderás...

Casimiro Notevi 03-06-2007 02:14:59

Yo estoy con xander, porque en la "vida real" no sirve para nada traerse una lista de millones de registros, además de que Access es una base de datos "doméstica" no "profesional".
Aquí tienes un hilo donde se explica gráficamente la diferencia entre Access, Paradox y Firebird. :)

P.d. En cuanto a la base de datos que tienes, no sé en tu país, pero aquí en España, creo que ya estarías en la cárcel además de tener que pagar una multa multimuchimillonaria

roman 03-06-2007 02:20:04

casacham, ¿has probado modificar la propiedad CursorLocation del ADOTable? Para esa cantidad de información, te convendría más clUseServer que el default clUseClient.

// Saludos

Caral 03-06-2007 04:35:27

Hola
Y algo asi:
Código Delphi [-]
AdoTable1.Open limit 50;
o algo asi:
Código Delphi [-]
Adoquery1.sql.text:= ' Select * from TuTabla limit 50';
Pregunto: Maestro Roman, se puede?.
Saludos

Faust 03-06-2007 06:00:49

Lo malo no está en lo que yo piense
 
Lo malo no está en lo que yo piense. Yo más bien pienso que sería de poco confiar alguien capaz de obtener la base de datos del padrón electoral para practicar, que tal que por ahí algún malicioso o por causas de seguridad informática en tu oficina la obtiene sin tu autorización.

Y es que Casacham es psiquiatra o psicólogo para psicoanalizarme con un par de líneas que escribí y saber que tan confiable soy.

Oye y de paso no podrías conseguirme la base de datos de México y la de el Salvador porfa. Mándame cotización.

Faust 03-06-2007 06:05:18

Perdón no contesté
 
Ah al usar el TADOQuery usa una instrucción SQL que te pudiera devolver un número pequeño de registros, por ejemplo:

Código SQL [-]
SELECT *
FROM Votantes
WHERE Edad=90

También ya checaste si esa base de datos se abre sin problema en Access, si es que está demasiado grande en tamaño o está demasiado lenta en Access trata de usar el "Compactar y reaparar" de access en el menú herramientas, esto me ha funcionado un par de veces.

Lepe 03-06-2007 12:23:43

Aunque estoy de acuerdo que con Access puede hacerse, recomiendo encarecidamente usar una base de datos SQL (Firebird, por ejemplo).

Las técnicas de programación son distintas y "te obliga" a hacer un buen uso del sistema.

En realidad podrías usar un objeto TTable con una base de datos SQL, pero en los manuales te dice claramente que no debe hacerse, de hecho te dá las bases para crear una base de datos robusta (en su estructura), rápida (en cuanto a creación de índices, selección de 1 solo registro en lugar de 3.000, etc) y una gran variedad de soluciones para atacar situaciones difíciles (triggers, Store procedures, etc).

Después de usar Firebird, me avergüenza las cosas que hice con paradox..... ;).

Saludos

Casimiro Notevi 04-06-2007 02:33:16

Cita:

Empezado por Lepe
[..] Después de usar Firebird, me avergüenza las cosas que hice con paradox..... ;).
Saludos

Te entiendo, aunque en mi caso no fue con paradox :)


La franja horaria es GMT +2. Ahora son las 01:44:39.

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