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)
-   -   ¿Como cargar imagenes en SQL Server? (https://www.clubdelphi.com/foros/showthread.php?t=62548)

petete2008 31-12-2008 18:39:02

¿Como cargar imagenes en SQL Server?
 
Hola, escribo en este foro por que quería saber como puedo hacer para cargar una imagen en una bse de datos en SQL Server, la situacion es la siguiente:

INSERT INTO TABLA_IMAGEN (FOTO) VALUES (??????)

el campo "FOTO" de "TABLA_IMAGEN" es de tipo IMAGE tipo de datos para cargar imagenes tengo entendido.

necesito saber que valor es el que tengo que colocar para que se cargue la imagen en la BD
he visto en foros que sugieren cargar solo la ruta si tienen un ejemplo completo de como hacer ese insert tambien se lo agradecería

le agradezco oa quien me pueda responder lo necesito.
Uso delphi 7.
Gracias

Neftali [Germán.Estévez] 02-01-2009 10:40:37

Puedes utilizar una SQL con parámetros para añadir las imágenes.
Suponiendo que tengas una tabla con los campos:
* Entero
* Cadena
* Imagen

Coloca un TImage y carga un Bitmap en él.
Crea un ADOQuery y en la SQL coloca lo siguiente:
Código SQL [-]
INSERT INTO Tabla (entero, cadena, imagen) VALUES (:entero,:cadena,:imagen)

Puedes insertar un nuevo registro con este código:

Código Delphi [-]
  qry1.Parameters.FindParam('entero').Value := 25;
  qry1.Parameters.FindParam('cadena').Value := 'valor de la cadena';
  // paramero de imagen
  param := qry1.Parameters.FindParam('imagen');
  param.Assign(img1.Picture.Graphic); 
  qry1.ExecSQL;

petete2008 02-01-2009 13:55:23

y puedo decirle que la imagen está en c:\imagenes\image.jpg y que la coja directamente de allí en vez de cargarla?
Ademas mi idea es que tambien pueda adjuntar ficheros txt, pdf, word, etc... y no sólamente imágenes.
Graciass por la respuesta, me has sacado de muchas dudas que tenia :)
Feliz año

Neftali [Germán.Estévez] 02-01-2009 15:47:25

Cita:

Empezado por petete2008 (Mensaje 332911)
y puedo decirle que la imagen está en c:\imagenes\image.jpg y que la coja directamente de allí en vez de cargarla?
Ademas mi idea es que tambien pueda adjuntar ficheros txt, pdf, word, etc... y no sólamente imágenes.

En ese caso (más genérico) es mejor trabajar directamente con Streams para cualquier tipo de fichero y así los cargas directamente de disco.
Seguramente en tu tabla deberás tener algun campo para almacenar el nombre o el tipo del fichero original, para así después poderlo recuperar correctamente.

Para guardar un fichero en un campo de una tabla (TADOTable en este caso, con un campo definido como IMAGE) puedes usar esto:

Código Delphi [-]
var
  bs: TStream;
begin
  // editar el registro actual
 tbl1.Edit;
 // Acceder al campo BLOB (el campo IMAGE se llama blob)
 bs := tbl1.CreateBlobStream(tbl1.FieldByName('blob'), bmWrite);
 // Cargar el fichero de disco 
 TADOBlobStream(bs).LoadFromFile('c:\temp\fichero.pdf');
 // Al hacer el Free directamente se graba el campo
 bs.Free;

Para volver a guardar ese campo en disco (fichero) algo como esto:

Código Delphi [-]
var
  bs: TStream;
begin
  // Apuntar al campo BLOB (registro actual)
  bs := tbl1.CreateBlobStream(tbl1.FieldByName('blob'), bmReadWrite);
  // Grabar a disco
  TADOBlobStream(bs).SaveToFile('c:\temp\fichero_out.pdf');
  // liberar
  bs.Free;

petete2008 05-01-2009 00:08:58

var
fs : Tfilestream;
bs: TStream;

begin
ADOQuery1.active:=false;
ADOQuery1.SQL.Clear;
Adoquery1.SQL.Add('INSERT INTO FICHEROS (idempresa,Archivo) VALUES (:idempresa,:idnumero,:Archivo)');
Adoquery1.Parameters.FindParam('idempresa').Value:=1;

bs := Adoquery1.CreateBlobStream(Adoquery1.FieldByName('Archivo'),bmWrite);
TADOBlobStream(bs).LoadFromFile('c:\VICENTE.txt');

Adoquery1.ExecSQL;


me dice que el campo Archivo no existe pero si que existe ya que si hago un Adoquery1.Parameters.FindParam('Archivo').Value:='dfsfa'; me lo inserta.

¿que puede estar pasando?
Gracias

petete2008 05-01-2009 00:20:40

encontre la solucion

Adoquery1.Parameters.ParamByName('Archivo').LoadFromFile('c:\VICENTE.jpg',ftBlob);


La franja horaria es GMT +2. Ahora son las 20:14:04.

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