Ir al contenido


Foto

[RESUELTO] MS SQLServer y las imágenes.


  • Por favor identifícate para responder
6 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 26 agosto 2010 - 10:28

Jóvenes compañer@s, les tengo una pregunta.

OK, Tengo una tabla de MSSQLServer, un TClientDataSet y un TADOQuery apuntando a ésta, y dentro de la tabla un campo Image. Hasta aquí, todo perfecto.

Ahora, dentro de mi aplicación tengo un componente TDBImage, apuntando al ClientDataSet y al campo que deberá contener la imagen. El problema me surge por que no puedo insertar la imagen en el campo vía un TADOQuery (obviamente por que solo admite números, alfanuméricos y así) e intentando por casi todos los medios he llegado a ésto:



delphi
  1.           DtaMdlVrt.clndsDts.Edit;
  2. //          dbimgMpa.PasteFromClipboard;
  3.           dbimgMpa.Picture.LoadFromFile(sArchv);
  4.           DtaMdlVrt.clndsDts.Post;



Lo cual es una medida desesperada. El archivo al que apunta sArchv existe, lo lee y carga un TImage que tengo como "área de prueba", pero al momento de transferirlo al TDbImage es cuando de plano se niega, me guarda un hermoso valor NULL y ni siquiera se muestra en el componente TDbImage.

¿Alguna propuesta, ayuda, consejo o chiste que me pueda ayudar a resolver éste detalle, problema o como quieran llamarlo?
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 agosto 2010 - 10:38

Pues se me ocurre que debes pasar la imagen como stream (o fileStream?) y guardarlo así mismo a través de parámetros en la Consulta.
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 26 agosto 2010 - 10:51

Pues se me ocurre que debes pasar la imagen como stream (o fileStream?) y guardarlo así mismo a través de parámetros en la Consulta.


La propuesta es interesante, ¿tendrás algún ejemplito para orientarme?
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 agosto 2010 - 11:09

Así de rápido se me ocurre lo siguiente:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. fStream:TFileStream;
  4. Binario: TStrings;
  5.  
  6. begin
  7.   OpenDialog1.Filter:='All Files(*.*)|*.*';
  8.   if OpenDialog1.Execute then
  9.     fStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
  10.     Binario := TStrings.Create;
  11.     try
  12.       Binario.LoadFromStream(fStream);
  13.       //aqui la comsulta
  14.     finally
  15.       fStream.Free;
  16.       Binario.Free;
  17.     end;
  18. end;



No lo he probado, no sé si funcionará llamar a la variable Binario de Tipo TStrings como parámetro en la consulta, seguro te servirá como referencia.

Saludos.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 agosto 2010 - 03:11

Saludos.

Puede que este articulo te sirva.
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 27 agosto 2010 - 03:56

Resuelto, tantito por bastante suerte en encontrar una manera rápida y fácilmente implementable.

Les platico cómo lo hice.
1.- Hice un Stored Procedure dentro de la base de datos, tal como se muestra en éste código:


sql
  1. -- =============================================
  2. -- Author:        <Felipe Eduardo Ortiz López>
  3. -- Create date: <20100826>
  4. -- Description:    <Guarda la imagen del mapa en la tabla maestra de incidencias.>
  5. -- =============================================
  6. ALTER PROCEDURE [dbo].[spInsrtrMpa]
  7. @IncID INT,
  8. @MncID INT,
  9. @Mpa Image
  10. AS
  11. BEGIN
  12.   UPDATE MstInc SET UbcGrf = @Mpa WHERE (NmrInc = @IncID) AND (ClvMnc = @MncID)
  13.   RETURN(@@ERROR)
  14. END



2.- Inserté un TADOStoredProcedure, el cual procedí a llenar con los datos pertinentes para aprovechar el nuevo procedimiento almacenado de la base de datos.

3.- Codifiqué un par de llamadas a funciones, llenado de parámetros..., y listo, funciona suave como la seda.



delphi
  1. // 20100825 FEOL Se añade la funcionalidad de guardar la imagen del mapa de la zona referida.
  2.   Image1.Picture.LoadFromFile(frmVslInc.TrnsfrrMpa(Trim(StrNumInc)));
  3.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[0].Value := StrToInt(StrNumInc);
  4.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[1].Value := StrToInt(dbedtMnc.Text);
  5.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[2].Assign(Image1.Picture);
  6.   DtaMdlVrt.ADOstrdprcdrMpa.ExecProc;
  7.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[0].Value := 0;
  8.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[1].Value := 0;
  9.   DtaMdlVrt.ADOstrdprcdrMpa.Parameters[2].Value := '';
  10. // EOM



Listo, aparentemente no era nada del otro mundo, pero si nos ponemos estrictos y "exquisitos", no hay documentación suficiente sobre éste tema en ningún lado.
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 agosto 2010 - 04:03

Que bien amigo felipe.mx, lo bueno es que ahora si, YA HAY documentación suficiente para futuras consultas (y)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.