Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Insertar múltiples bitmaps en BD Access

Hola amigos :

Necesito insertar en una BD Access múltiples imágenes(.bmp) en diferentes registros, en un sólo paso.
Utilizo el siguiente código, que a pesar de encontrarse en un ciclo for, inserta sólo la última imagen en la BD. Este código es una parte de otro más extenso, que permite simultáneamente insertar otros valores en la BD, aparte de las imágenes, lo cual realiza sin problemas. Lo único que no logro insertar son la totalidad de las imágenes requeridas.

Código Delphi [-]
var
I: Integer;
Bitmap1: TBitmap;
dd1: TDicomDataset;
AStream : TStream;
begin
for I := 0 to ListBox2.Items.Count - 1 do
begin
dd1:= TDicomDataset.Create;
dd1.LoadFromFile(ListBox2.Items.Strings[i]);
Bitmap1 := TBitmap.Create;
dd1.Attributes.ImageData.AssignToBitmap(Bitmap1,False);
Redimensionar(Bitmap1,80,80);
try
Data1.TablaSeries.Edit;
AStream:= Data1.TablaSeries.CreateBlobStream(Data1.TablaSeries.FieldByName('SERIES_ICON'), bmWrite);
Bitmap1.SaveToStream(AStream);
finally
Bitmap1.Free;
AStream.Free;
end;

Utilizo Edit y no Insert, porque los registros ya existen y sólo se debe agregar información en algunos campos específicos.
Si incluyo un ciclo while para la inserción de las imágenes me genera el error de que la TablaSeries no se encuentra en estado de edición, a pesar de estarlo (Data1.TablaSeries.Edit).
ListBox2 contiene los registros a los que se apuntan en la BD, obtenidos a partir de un Query.
dd1 es un DatasetDicom, a partir del cual, por sus atributos, se generan los bitmaps.
Redimensionar es un procedimiento publicado en el foro por Seoane, que permite justamente eso, redimensionar los bitmaps, los que finalmente pesan sólo 25Kb.

Agradezco de antemano cualquier ayuda.

Saludos y muchas gracias
Responder Con Cita
  #2  
Antiguo 01-11-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Faltan dos end;
Código Delphi [-]
var
  I: Integer;
  Bitmap1: TBitmap;
  dd1: TDicomDataset;
  AStream : TStream;
begin
  for I := 0 to ListBox2.Items.Count - 1 do
  begin
    dd1:= TDicomDataset.Create;
    dd1.LoadFromFile(ListBox2.Items.Strings[i]);
    Bitmap1 := TBitmap.Create;
    dd1.Attributes.ImageData.AssignToBitmap(Bitmap1,False);
    Redimensionar(Bitmap1,80,80);
    try
      Data1.TablaSeries.Edit;
      AStream:= Data1.TablaSeries.CreateBlobStream(Data1.TablaSeries.FieldByName('SERIES_ICON'), bmWrite);
      Bitmap1.SaveToStream(AStream);
    finally
      Bitmap1.Free;
      AStream.Free;
    end;
  end;
end
Responder Con Cita
  #3  
Antiguo 01-11-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias por responder Casimiro Notevi.

En realidad no faltan los end, porque como señalé este código es parte de otro, que no quise incluir, por lo extenso y porque realiza otras operaciones que funcionan bien, el cual contiene los end al final.
De hecho no obtengo ningún error al compilar, sólo que no inserta la cantidad debida de imágenes en la BD y que es lo que necesito.

Salu2
Responder Con Cita
  #4  
Antiguo 01-11-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Corrijo el código, el que he asignado a un Thread, para evitar confusiones.

Código Delphi [-]
procedure TVisor.BMDThread2Execute(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer);
var
I: Integer;
Bitmap1: TBitmap;
dd1: TDicomDataset;
AStream : TStream;
begin
for I := 0 to ListBox2.Items.Count - 1 do
begin
try
dd1:= TDicomDataset.Create;
dd1.LoadFromFile(ListBox2.Items.Strings[i]);
Bitmap1 := TBitmap.Create;
dd1.Attributes.ImageData.AssignToBitmap(Bitmap1,False);
Redimensionar(Bitmap1,80,80);
Data1.TablaSeries.Edit;
AStream:= Data1.TablaSeries.CreateBlobStream(Data1.TablaSeries.FieldByName('SERIES_ICON'), bmWrite);
Bitmap1.SaveToStream(AStream);
finally
Bitmap1.Free;
AStream.Free;
Data1.TablaSeries.Post;
end;
end;
end;

Espero que alguien pueda descubrir el problema.
Salu2
Responder Con Cita
  #5  
Antiguo 01-11-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Me respondo yo mismo.
Encontré la solución, insertando las imágenes mediante un Update con ADOQuery y utilizando parámetros, con el siguiente código, el que adjunto por si alguien más pudiera servirle:

Código Delphi [-]
var
I: Integer;
Bitmap1: TBitmap;
dd1: TDicomDataset;
AStream : TStream;
begin
for I := 0 to ListBox2.Items.Count - 1 do
begin
dd1:= TDicomDataset.Create;
dd1.LoadFromFile(ListBox2.Items.Strings[i]);
Bitmap1 := TBitmap.Create;
dd1.Attributes.ImageData.AssignToBitmap(Bitmap1,False);
Redimensionar(Bitmap1,80,80);
Data1.TablaSeries.Edit;
try
AStream:= TMemoryStream.Create;
Bitmap1.SaveToStream(AStream);
ADOQuery9.Close;
ADOQuery9.SQL.clear;
ADOQuery9.SQL.add('update SERIES set SERIES_NUMBER =:SERIESN, SERIES_IMAGE_COUNT =:IMAGEN, SERIES_ICON =:ICON');
ADOQuery9.SQL.Add ('where SERIESUID like'+ QuotedStr(ListBox3.Items.Strings[i]+'%'));
ADOQuery9.Parameters.Parambyname('SERIESN').Value:= dd1.Attributes.getInteger($0020, $0011);
ADOQuery9.Parameters.Parambyname('IMAGEN').Value:= ListBox4.Items.Strings[i];
ADOQuery9.Parameters.ParamByName('ICON').LoadFromStream(AStream, ftBlob);
ADOQuery9.ExecSQL;
Data1.TablaSeries.Post;
finally
Bitmap1.Free;
AStream.Free;
end;
end;
end;

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Agregar múltiples Campo de una tabla a múltiples TEdit y TdbEdit novato_erick Varios 21 21-08-2011 01:18:58
Insertar en Access elturu15 Varios 2 12-05-2011 17:08:18
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 02:52:21
Insertar un registro en multiples bases de datos. Gaim2205 Conexión con bases de datos 2 09-11-2007 00:15:13
problema al insertar en bd access manoley23 SQL 12 20-07-2006 14:16:31


La franja horaria es GMT +2. Ahora son las 04:02:41.


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