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 25-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Imagen en base de datos.

Hola he estado repasando el foro pero no veo información de como hacer una base de datos con los nombre dirección etc y que salga la foto de persona, me refiero a como hacer con paradox una tabla he insertar ficheros de imagen en bmp, lo de los datos se como hacerlo la duda es en el de la imagen.


Bueno si saben de algun manual en concreto y su dirección os lo agradeceria.


Saludos a la peña.

Kwan
Responder Con Cita
  #2  
Antiguo 26-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola German gracias x contestar, mira soy nuevo en esto igual es algo simple pero yo lo desconozco, cuando estoy editando una tabla donde en la columna le asigno el nombre FOTO asignandole el graphic no me deja de poner nada ya que pone "BLOB Graphic" como devo de darle una ruta o insertar la imagen k quiero que muestre.

Gracias.

Kwan

Última edición por kwan fecha: 26-07-2003 a las 13:04:38.
Responder Con Cita
  #3  
Antiguo 26-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola gracias x la rapidez en contestar, mira lo hago como dices de primera hora, pero te digo no me deja copiar nada en el dbImage no se porque??


seguire intentandolo yo soy cabezón.

chao

Kwan
Responder Con Cita
  #4  
Antiguo 26-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Pues si lo hago como tú bien explicas pero nada ya es algo muy extraño no se que puede estar pasando???.

Cuando encuentre el fallo lo posteare de todas forma gracias x todo.


Saludos

Kwan.
Responder Con Cita
  #5  
Antiguo 26-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola:

Otra forma de hacerlo: si las imágenes residen en archivos, puedes importarlas de allí al campo de tipo Graphic que tienes definido en tu tabla, mediante el método LoadFromFile que tienen los TGraphicField. Mira este ejemplo, donde TAConceptoSimbolo es un campo de tipo TGraphicField (definido como Graphic en Paradox):
Código:
procedure TDialogoConceptos.BotonAnadeSimboloClick(Sender: TObject);
begin
  If OpenPictureDialog1.Execute then  // cogemos el archivo elegido en el OpenDialog
  begin
    DATAMAIN.TAConcepto.Edit;
    DATAMAIN.TAConceptoSimbolo.LoadFromFile (OpenPictureDialog1.FileName);
  end;
end;
A todo esto, estoy suponiendo que tratas con un campo de tipo Graphic, no de tipo string donde almacenas la dirección del archivo, que es como al principio de este hilo pretendías almacenar la información.
__________________
Guía de Estilo
Responder Con Cita
  #6  
Antiguo 26-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola:

German escribió:
Cita:
Te has pasado de largo Andres. Como ya habia dicho, se puede hacer por código, pero aun no habiamos llegado ahí, por que el problema que tiene Kwan es que no le permite añadir ninguna imagen al componente, sea cual sea el metodo utilizado...
He propuesto una forma alternativa, por eso puse lo de "Otra forma de hacerlo: ..." como una opción más; además, el probar una forma distinta es una buena manera de averiguar por dónde falla, yo lo veo así.

Cita:
Ademas, piensa que estas posteando a un novato, y ni siquiera explicas que es el OpenPictureDialog, ni DATAMAIN (ke supongo es un Data Module). Mejor nunca lies a un novato, y dale la información paso a paso, por que postear un código que no entiende solo le solucionará un problema concreto, pero no sabra para lo que sirve, y no podra reutilizarlo en otra ocasion.
Es cierto que dice que lleva poco en esto, aunque no puedo saber hasta qué punto desconoce ciertos aspectos de Delphi; no creo que sea tan difícil imaginarse lo que es un OpenPictureDialog, el DATAMAIN tampoco importa mucho para este ejemplo, de hecho ya le aclaré lo que era el TAConceptoSimbolo que es lo que realmente importa para este ejemplo.

El código que pongo tiene sólo 3 líneas con sentido, no veo que haya tanto que explicar. Y verás además que explico someramente lo del OpenPictureDialog1.Execute.

Y si tiene alguna duda sobre el código que le puse, mejor que sea él el que me lo haga notar. Así de una tacada se enterará de más cosas. Quizás sea cuestión de gustos, pero prefiero poner ese código y esperar a que postee de nuevo si tiene alguna duda, a explicar pasito a pasito todo lo que hago.

Cita:
Kwan, o bien como tu dices buscas el error, o bien me pasas el form para ke pueda verlo a CtaTmp@hotmail.com
Estamos en un foro y lo mejor es que se publique el código para todos, sin recurrir a mensajes privados.
__________________
Guía de Estilo
Responder Con Cita
  #7  
Antiguo 26-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola en primer lugar que alla paz, os agradezcos a ambos la ayuda prestada en cuanto a mis conocimientos son bastante basicos aunque se lo k es el OpenPictureDialog y entiendo algo del codigo aunque lo del DATAMAIN no se a que se lo llamas, prefiero primero saber porque no me deja de pegar si es que como dice German se puede pegar con copiar y pegar, como segunda opción lo que dice Andres intentaria de hacerla ya que si no hay otro remedio que mediante codigo me tendria que espavilar y sí que preguntaria lo que no entendiera sin ser un poco pelma.

Lo dicho no me gustaria que mis preguntas causaran que personas de este Foro discutieran, y os quedo agradecidos.


Saludos

Kwan.

Última edición por kwan fecha: 27-07-2003 a las 11:57:49.
Responder Con Cita
  #8  
Antiguo 26-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola:

Antes que nada, decirte Kwan que me ha gustado mucho tu respuesta, has sido conciliador y diplomático con los dos.

También aclararte que lo de DATAMAIN es un DataModule, como intuyó German, donde suelo poner las tablas principales de la aplicación (el ejemplo lo cogí de una aplicación hecha y no creí necesario quitar ciertas cosas).

Si sigues los pasos que te indica German para copiar y pegar, no debería darte ningún problema, lo acabo de probar ahora mismo sobre una tabla Paradox con un campo de tipo Graphic; me he ido al Paint, he dibujado un garabato, y luego lo he copiado y pegado sobre un TDBImage ligado a esa tabla y a ese campo. Todo ha ido bien. Asegúrate de que la tabla esté abierta y no protegida contra escritura y de tener bien enlazado el TDBImage al DataSource y DataField correpondiente.

Por otro lado, la opción de recurrir al código mediante LoadFromFile quizás sea más "difícil" por aquello de que implica escribir algo de código, pero ten en cuenta que es la forma más probable con que se deban introducir los datos; en tu caso seguramente las fotos están ya almacenadas en archivos y el paso lógico para incorporarlo a la base de datos sea ése.
__________________
Guía de Estilo
Responder Con Cita
  #9  
Antiguo 27-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola Andres, mira yo las fotos las tengo escaneadas y puestas en una carpeta no las tengo en ningun archivo, esa es otra pregunta como hago un archivo de fotos ?? si esque te refieres a un archivo como los de datos.

Me gustaria que me diera German tambien su parecer.


Saludos.

Última edición por kwan fecha: 27-07-2003 a las 14:38:03.
Responder Con Cita
  #10  
Antiguo 27-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si las fotos las tienes escaneadas, y están como es lógico en una carpeta, por ejemplo:

C:\fotos

Con el código de Andrés te tiene que funcionar, no tienes mas que dirigir OpenPictureDialog1 a la carpeta en donde se encuentran las fotos, en este caso C:\fotos y seleccionar una.

Código de Andrés:

Código:
  If OpenPictureDialog1.Execute then  // cogemos el archivo elegido en el OpenDialog
  begin
   TuTabla.Edit;
    TuTablaFoto.LoadFromFile (OpenPictureDialog1.FileName);
  end;
Ten en cuenta que cada foto es un archivo que se hallaría en la carpeta fotos.

Ahora bien, lo que yo quería apuntar no tenía nada que ver con el código de Andrés que es perfecto y tiene que funcionar, ni con las indicaciones de Germán.

Sino si es conveniente almacenar las Fotos en la propia BD.

A mi juicio existen 3 posibilidades:

1º.- Dejar las fotos en una carpeta a parte y en campo Texto de la Bd almacenar el nombre y el camino de la foto en cuestion y cargarla al vuelo en el momento correspondiente en un Timage.

2º.- Crear una segunda BD en donde solamente estén las fotos y un campo común con la BD de personas cual es tu caso, con una relación maestro detalle.

3º.- Almacenar las fotos en la propia BD como tu pretendes.


Yo por mi parte mis preferencias van en el orden que las he expuesto, me gustaría que opinará Andrés y los demás al respecto.

PD. Me parece que por lo que intuyo tu estás intentando esto con una rejilla, y este sería otro caso.

Un Saludo.
Responder Con Cita
  #11  
Antiguo 27-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola Marcos podrias postear como sera el codigo de de tú 1º opción?? ya que lo de cargarla al vuelo no se a k te refieres me imagino que lo diras x k se carga al momento? y como lo relacionarias con un TImage.

Gracias.
Responder Con Cita
  #12  
Antiguo 27-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Para la primera opción yo haría lo siguiente, colocar un Timage en el lugar apropiado del formulario.

Y en el evento AfterScroll del Ttable poner este código:

Código:
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
  Try
  Image1.Picture.LoadFromFile(Table1Direccion.Value);
  Except
  Image1.Picture.LoadFromFile('D:\pruebas\nofoto.bmp');
  end;
end;
Direccion en este ejemplo sería el campo de la tabla Clientes aquí Table1, en donde guardaríamos la ubicación y el nombre de la foto a cargar:

C:\Fotos\Pepe.bmp por ejemplo.

NoFoto sería un archivo llamado Nofoto.bmp, en el que yo colocaría un aspa de color rojo, para mostrar cuando el cliente no tenga foto o en el peor de los casos se produzca un error, de ahí la estructura:
Código:
Try
Except
end;
Un Saludo.
Responder Con Cita
  #13  
Antiguo 28-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola:

De las tres opciones propuestas por Marcos, me quedo con la tercera, aunque dependiendo de la finalidad que le des a esa base de datos, ode lo que ocupen las fotos, puede que la primera opción sea más oportuna en ciertos casos. Me explico:

La primera opción, la de almacenar en un campo STRING el nombre del archivo con la foto, tiene el hándicap de que si migras la aplicación a otro ordenador debes arrastrar consigo también la carpeta con las fotos, está claro que lo mismo has de hacer con la Base de Datos, pero no deja de ser un paso más. La ventaja que le veo es que es más fácil retocar o cambiar una imagen y que quede reflejado en tu programa. Si la foto estuviera en la misma BD, habría que habilitar una opción de dibujo desde tu programa (o quizás copiar y pegar a un programa de retoque fotográfico, ejem, ejem, algo engorroso). Si usas esta opción veo recomendable que sólo almacenes en la tabla el nombre del archivo, sin la ruta. Ésta residiría, o bien en otra tabla de índole general en tu aplicación, o bien en un archivo .INI, etc, el caso es que sea fácil redirigir desde el programa el lugar donde debe buscar las fotos. Una ventaja de esta opción es que alivias de peso la BD.

La segunda opción que plantea Marcos me parece algo complicada. Quizás el propósito es aliviar el peso de la tabla maestra (la que contiene el resto de datos de personas), pero hay que tener en cuenta que ya de por sí los campos GRAPHIC, al igual que los MEMO, se almacenan en un fichero aparte en Paradox. Además, la programación de esta opción es más complicada, pues implica cada vez relacionar dos tablas.

Me quedo con la tercera opción, la de almacenar directamente en un campo GRAPHIC cada foto, más que nada por un tema de simplicidad y de tenerlo todo en la misma BD. También admito que el uso de esta opción va ligado al tamaño de las fotos, si éstas ocupan mucho, pueden sobrecargar la BD en exceso.

Si optas por la primera opción, Marcos ya te ha propuesto una buena manera de mostrar una foto alternativa en caso de que no haya foto original. Éste es un artificio difícil de implementar si usamos un TDBImage en vez de un TImage.

A todo esto, ¿resolviste el tema de poder cargar la imagen en el TDBImage?
__________________
Guía de Estilo
Responder Con Cita
  #14  
Antiguo 28-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola gracias x vuestras respuesta, no Andres no me deja pegar nada en el TDBImage no se k puede estar pasando??

lo dicho Garcias.

Kwan.
Responder Con Cita
  #15  
Antiguo 28-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Haz esta prueba:

Haces doble clic en el Ttable luego pulsas botón derecho y le mandas añadir todos los campos.

Ahora arrastra desde el editor de campos un par de campos entre ellos el campo foto.

Y una vez hecha la prueba nos cuentas.

Un Saludo.
Responder Con Cita
  #16  
Antiguo 28-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola de nuevo Marcos ya me estoy poniendo algo pesado pero no veo la solución, ya lo he probado pero nada me crea directamente el DBImage y un label con el nombre, pero cuando copio una foto o un dibujo hecho con el pain y me voy al DBImage no meda la opción de "paste" osea pegar.


Saludos.


Kwan
Responder Con Cita
  #17  
Antiguo 28-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ten en cuenta que tienes que ejecutar el programa y poner el Ttable en modo Append para añadir un registro o en modo edit, sino te dará error.

Ejecutas programa.
MiTabla.Append;
ó
MiTabla.Edit;

Un Saludo.
Responder Con Cita
  #18  
Antiguo 29-07-2003
German C. C. German C. C. is offline
Miembro
 
Registrado: jul 2003
Posts: 11
Poder: 0
German C. C. Va por buen camino
No es necesario activar antes el modo edit, ya que es activado automáticamente al pegar la imágen con ese método (CONTROL + V). El problema tiene que ser otro. Lo único necesario seria tener la tabla abierta (Table1.Open).

Y el modo append solo seria necesario activarlo antes si es para añadir una foto a un registro nuevo.

(Sí seria necesario activar el modo edit antes de pegar o cargar la imagen de disco mediante código.)

Salu2.

Última edición por German C. C. fecha: 29-07-2003 a las 10:32:42.
Responder Con Cita
  #19  
Antiguo 29-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
Hola de nuevo:

Releyendo este hilo, que quizás ya se alarga demasiado para lo que trata, tengo una intuición maliciosa. Kwan, ¿estás tratando de pegar la foto con el programa en ejecución o en diseño desde el IDE de Delphi? Desde diseño no puedes modificar datos de una tabla. Disculpa si es una pregunta demasiado obvia pero no se me ocurre otra cosa.

Por cierto, en el control TDBImage, en ejecución, no te va a aparecer ningún menú flotante con las opciones de Copiar / Pegar, esto sólo lo puedes hacer manualmente mediante Control + V (o también puedes probarlo desde código mediante DBImage.PasteFromClipBoard, que hace exactamente lo mismo). Como dice German, no hace falta que la tabla esté en edición para que funcione, este método ya se encarga de ponerla en edición; y si es con una tabla vacía, ya se encarga de crear un nuevo registro.
__________________
Guía de Estilo
Responder Con Cita
  #20  
Antiguo 29-07-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Hola, solo decir que debo darle la razon a German ya k soy mas novato de lo que me creia, pero al final me di cuenta de mi error por el ultimo post de Andres cuando decia que desde el IDE no se podia pegar y era como yo lo estaba haciendo, siento averos hecho perder el tiempo pero prefiero quedar como tonto un dia y no toda la vida, creo que con mi novatada sirva para ayudar algun novato más.

Solo decir como lo hice al final por si hay alguien que no lo sepa?
ejecutar delphi,database,explore situarte en la base de datos le das a data y picar en el campo Graphic y en la ventana k sale se debe pegar la foto ,huuuu por fin.


Lo dicho os quedo a todos agradecidos.
Esto si es un foro

Kwan.
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


La franja horaria es GMT +2. Ahora son las 09:16:21.


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