Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   como se monta la BD en la memoria? (https://www.clubdelphi.com/foros/showthread.php?t=31223)

Alfredo 02-05-2006 19:55:54

como se monta la BD en la memoria?
 
Hola a todos!

Podiran ser tan amables de explicarme como se carga una base de datos en memoria?

La idea es que en un set de varios cd de imagenes en el primero este la base de datos que enlaza datos con sus respectivas imagenes, y que al introducir el 1 cd la BD se carge y asi al hacer una consulta pueda enviarle un mensaje al usuario pidiendole que inserte el cd numero X (donde esta la imagen que haria falta para mostrar los datos).

Por supuesto el FB es embebido y la BD es de solo lectura.
Uso FB 1.5 y delphi 7.

Agradecido como siempre por el tiempo que puedan dedicar a responderme... :)

Neftali [Germán.Estévez] 03-05-2006 09:08:58

Creo que vas a tener que hacer una copia de la Base de Datos a disco, e ir cambiando los CD's de las imágenes, sino no vas a parar de introducir/sacar CD's.
De todas formas, no me hagas mucho caso, porque no se si he entendido bien la cuestión...

Alfredo 03-05-2006 13:57:23

Gracias Neftali por tu atención,

Quiza deba explicarme un poco, aunque tienes una idea de lo que necesito..

El catalogo de imagenes esta distribuido a lo largo de 10 cds... pero solo el primero contiene la BD en la cual estan los datos correspondientes a las imagenes. al hacer una consulta, esta arroja la informacion solicitada mas una o varias imagenes de archivo, las cuales pueden estar en cualquiera de los 10 cds.

Lo unico que se me ha ocurrido es adaptar mi programa (que actualmete esta en uso, leyendo las imagenes que estan en directorios del disco duro), para que carge la base de datos (de FB) en Memoria, se conecte, y mantenerla alli mientras se esten haciendo consultas.

Es algo asi como la encarta de Microsoft, cuando te pide que insertes el disco 3 porque es alli donde esta el video de lo que consultas.

Espero haberme explicado mejor, por favor cualquier ayuda... bien recibida; De todos modos estoy buscando informacion al respecto

y si alguien tiene una mejor idea ¡Super!:D

kalimero 03-05-2006 14:49:25

Hola
Se me ocurre que podrias guardar en la BD un campo que haga referencia al nº de CD donde se encuentra la imagen. Ese numero de CD podria ser una etiqueta, con lo que solo hay que buscar una manera de leer la etiqueta por código.
Saludos

Neftali [Germán.Estévez] 03-05-2006 15:42:53

Perdoname, pero es que no acabo de entenderte; Por un lado dices:
Cita:

Empezado por Alfredo
...El catalogo de imagenes esta distribuido a lo largo de 10 cds... pero solo el primero contiene la BD en la cual estan los datos correspondientes a las imagenes....

y luego:
Cita:

Empezado por Alfredo
...mi programa (que actualmete esta en uso, leyendo las imagenes que estan en directorios del disco duro),...

¿Las tienes en CD o las tienes en disco? No se si te refieres a cómo lo tienes ahora y cómo lo quieres,...

Otra cosa que no comentas y que aclararía las cosas es decir cómo tienes almacenasods los "apuntadores" a las imágenes. Supongo (por suponer) que almaceneas el path de la imagen; Si es así, se me ocurren dos altenativas; ¿Cual estás utilizando?

(a) c:\Imagenes\001\imagen1 (path completo)
(b) \001\imagen1 (path relativo)

Alfredo 03-05-2006 20:59:08

Ok.. gracias por la duda

Cita:

¿Las tienes en CD o las tienes en disco? No se si te refieres a cómo lo tienes ahora y cómo lo quieres,...
Correcto, El programa actualmente corre con la base de datos y las imagenes en disco duro. De hecho las imagenes estan organizadas en carpetas segun cierto criterio.

La idea es pasar toda esa informacion a CDs (ya lo hice y me quedo en 10 dcs, en el primero la base de datos y algunas carpetas de imagenes pequeñas y en los otros 9 el resto de carpetas con imagenes, organizadas) para poderla distribuir y se consulte como solo lectura.

Cita:

Supongo (por suponer) que almaceneas el path de la imagen
Realmente no. Como el path hacia las imagenes es tan estructurado, me parecio mas facil (asi funciona actualmente) cargar el archivo con un loadfromfile al que solo le paso el nombre del archivo y directorio. Lo pienso hacer de igual forma para el uso de los cds, osea, algo como si la caregoria es "varios" entonces busca en el cd 5.

Cita:

kalimero:
Ese numero de CD podria ser una etiqueta, con lo que solo hay que buscar una manera de leer la etiqueta por código.
Voy cerca, ya concegui como leer el numero de serie y otras cosas de un cd.

claro estoy abierto a sugencias y les comentare los progresos.. :D

Alfredo 05-05-2006 00:26:11

Re planteo el asunto... no vayan a figurarse que deseo que me hagan el trabajo :D


¿Existe alguna forma de hacer que se cargue la base de datos en memoria se haga la conexion a la misma sin necesidad de que este montado en cd que la contiene?

orodriguezc 05-05-2006 02:55:15

Usa un TkbmMemTable
 
Que tan grande es la base de datos?.

Supongo que la información que necesitas para catalogar las imagenes la puedes almacenar en una sola tabla. De ser así puedes "subir" la tabla a memoria usando algún DataSet de este tipo. Yo suelo utilizar para estos menesteres la clase TkbmMemtable. Funciona de maravilla, además es free.

rastafarey 08-05-2006 18:55:39

Resp
 
Primero a que te refieres con imagenes.

1. A imagenes graficas(fotos etc).
2. O A imagenes de del archivo principal d el abase de datos(osea la base de datos esta seaprada en varios archivos. Ya se apor que es muy grande o por que tu gusto).

Cual es tu caso.

Si es el primero. Deberias comensar por meter las imagenes en la base de datos.

si tu caso es el segundo no deberias tenr ningun problema.

Por lo cual intuyo que que tu caso es le primero.

Lepe 08-05-2006 20:57:47

La verdad es que 10 cds de imágenes.... es una pasada. He hecho algunos cálculos y comprimiendo en zip podrías ahorrar 1 Cd nada más (los cálculos los hice con 85 megas en fotos de cámara digital, 400 kb cada una y quedó en 77 Megas.)

Supongo que hacerlo con DVD's es inviable ¿no? con uno de 7 Gigas, casi cabe todo. Las grabadoras de este tipo andan por 89 €.

En cuanto a tu pregunta, sin hacer pruebas yo diría que no. Quizás fuese mejor copiar la BD al directorio temporal de windows (demora de XX Segundos) y despues configurar dinámicamente la conexión (no creo que sea complicado).

A partir de aquí, ya puedes pedir el CD que sea. Si no recuerdo mal había un componente por aquí llamado TCDChange que detectaba cuando se introduce un CD nuevo en Windows.

Saludos

Alfredo 09-05-2006 18:02:39

Les agradezco un millon por el interes!! han revivido mis esperanzas.

Voy a hacer unas pruebas y luego comento

Alfredo 12-05-2006 20:56:26

Pues descubrí (interesante :rolleyes: ) que no tenia que preocuparme por nada de lo que pregunte en realidad.....

La razón: Al conectar (de forma embebida) puedo hacer consultas tranquilamente, cambiar de disco y poner el que solicita las imagenes, sin problemas, la base de datos esta en memoria y la conexion es permante!!!.

Lo unico es que si no coloco el disco Nº 1 antes de cerrar la aplicacion me presenta un error, creo que de windows: "volumen incorrecto, inserte volumen ...." :confused: porque al cerrar la aplicación ejecuto: 'database.close'.

En cualquier caso agradezco a todos lo que me tiraron una soga y si se les ocurre algo respecto al error, bienvenido... ;)

pepon386 17-05-2006 12:36:13

Desconozco el tamaño total de tu base de datos, pero si no es demasiado grande (y como dices, ya te la está cargando entera), podrías almacenar la información de tus tablas en ClientDataSets (a cada tabla le conectas un DataSetProvider y a este un ClientDataSet) y así cargar toda la información de la base de datos al principio, para a continuación cerrar la base de datos y así evitar que te dé ese error.

Espero que esto te sirva.

Alfredo 18-05-2006 17:36:58

Gracias Pepon386,

De hecho intente algo con esos componentes, pero la urgencia a veces se lleva en los cachos a lo importante... seguire pronto con ese experimento del Tclientdataset, por el momento decidí, para entregar mas que todo (hoy estoy en eso :cool: ) optar por copiar la base de datos, que es pequeña - 5 megas- junto con el gsd32.dll (embebido) y el ejecutable (por si acaso) a la carpeta tempora, y hacer la conexion desde alli. Resuelta la primera parte. Y con respecto a las lecturas de las imagenes, solo me quedó conocer la letra de la unidad de cdrom, y direcionar las busquedas con esa letra de unidad, previa solicitud de insertar el disco correspondiente.

Lo que no he podido hacer, bajo este esquema, es evitar que el windows me muestre la pantalla que se muestra cuando metes un cd, algo como "¿que accion tomar con el cd que inserto?" (no se si me entienden). La verdad es fastidioso que aparesca cuando estas en cambio de disco. se me esta ocurriendo asignarle una cadena vacia a la clave open de autorun.ini a ver que pasa..

En todo caso un millon por la sugerencia, seguro lo intentare cuando entregue eso y baje la presión. :D


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

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