Este ejemplo demuestra cómo acceder a archivos de imágenes en la base de datos.
Agregue un componente TListBox, un componente TImage y un componente TTable al formulario. La interfaz principal diseñada se muestra en la Figura 1.
Figura 1 Interfaz principal
En este sistema, es necesario diseñar una nueva base de datos Image.db basada en Paradox 7. La Figura 2 muestra la base de datos Image.db completa.
Figura 2 La base de datos diseñada
Para facilitar las pruebas del programa, la base de datos Image.db se almacena en la ruta donde se encuentra el programa de ejemplo.
Establezca la propiedad TableName del componente TTable en Image.db y la propiedad Active en True.
Al comienzo de la ejecución del programa, primero determinará si hay un registro en la base de datos Image.db. Si no existe ningún registro, ejecute el siguiente código para agregar el archivo "bird.bmp" a la base de datos Image.db:
procedimiento TForm1.FormCreate(Remitente: TObject);
var
mem:TMemoryStream;
comenzar
si Table1.Eof y Table1.Bof entonces
comenzar
con la Tabla 1 hacer
comenzar
Insertar;
FieldByName('Nombre').AsString:='Pájaro';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Datos')).LoadFromStream(mem);
Correo;
fin;
fin;
fin;
Luego agregue los archivos de imagen "sample.wav", "leaf.wav" y "lotus" a la base de datos Image.db secuencialmente de la misma manera.
Finalmente, agregue el nombre del archivo almacenado en la base de datos Image.db al componente TListBox del formulario mediante el siguiente código:
con la Tabla 1 hacer
comenzar
Primero;
mientras no lo hagas
comenzar
ListBox1.Items.Add(FieldByName('Nombre').AsString);
Próximo;
fin;
fin;
Durante la ejecución del programa, si el usuario selecciona un archivo de imagen en el componente TListBox del formulario, el programa utilizará el primer método del componente TTable para establecer el primer registro en la tabla de datos como el registro actual y luego recorrerá la base de datos a través de un bucle. Si el contenido del campo Nombre en un determinado registro es el mismo que la selección del usuario, entonces se lee la información de la imagen en el campo Datos del registro y la imagen se muestra en el componente TImage del formulario. El código es el siguiente:
procedimiento TForm1.ListBox1Click(Remitente: TObject);
var
mem:TStream;
bmp:TBitmap;
comenzar
con la Tabla 1 hacer
comenzar
Primero;
mientras no lo hagas
comenzar
si FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] entonces
romper;
Próximo;
fin;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Datos'),bmRead);
posición.mem:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Gratis;
mem.Gratis;
fin;
fin;
El código del programa es el siguiente:
unidad Unidad1;
interfaz
usos
Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios,
Diálogos, StdCtrls, DB, DBTables, mmsystem, ExtCtrls;
tipo
TForm1 = clase(TForm)
ListBox1: TListBox;
Tabla 1: TTable;
Imagen 1: TImagen;
procedimiento FormCreate(Remitente: TObject);
procedimiento ListBox1Click (Remitente: TObject);
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
var
Formulario1: TForm1;
implementación
{$R *.dfm}
procedimiento TForm1.FormCreate(Remitente: TObject);
var
mem:TMemoryStream;
comenzar
si Table1.Eof y Table1.Bof entonces
comenzar
con la Tabla 1 hacer
comenzar
Insertar;
FieldByName('Nombre').AsString:='Pájaro';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Datos')).LoadFromStream(mem);
Correo;
Insertar;
FieldByName('Nombre').AsString:='Muestra';
mem:=TMemoryStream.Create();
mem.LoadFromFile('muestra.bmp');
TBlobField(FieldByName('Datos')).LoadFromStream(mem);
Correo;
Insertar;
FieldByName('Nombre').AsString:='hoja';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Datos')).LoadFromStream(mem);
Correo;
Insertar;
FieldByName('Nombre').AsString:='Loto';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Datos')).LoadFromStream(mem);
Correo;
mem.Gratis;
fin;
fin;
con la Tabla 1 hacer
comenzar
Primero;
mientras no lo hagas
comenzar
ListBox1.Items.Add(FieldByName('Nombre').AsString);
Próximo;
fin;
fin;
fin;
procedimiento TForm1.ListBox1Click(Remitente: TObject);
var
mem:TStream;
bmp:TBitmap;
comenzar
con la Tabla 1 hacer
comenzar
Primero;
mientras no lo hagas
comenzar
si FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] entonces
romper;
Próximo;
fin;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Datos'),bmRead);
posición.mem:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Gratis;
mem.Gratis;
fin;
fin;
fin.
Guarde el archivo y luego presione la tecla F9 para ejecutar el programa. La pantalla inicial del programa se muestra en la Figura 3.
Después de seleccionar un elemento en el componente TListBox, se mostrará el archivo de imagen correspondiente, como se muestra en la Figura 4.
Figura 3 Pantalla inicial del programa en ejecución