Cet exemple montre comment accéder aux fichiers image dans la base de données.
Ajoutez un composant TListBox, un composant TImage et un composant TTable au formulaire. L'interface principale conçue est illustrée dans la figure 1.
Figure 1 Interface principale
Dans ce système, une nouvelle base de données Image.db basée sur Paradox 7 doit être conçue. La figure 2 montre la base de données Image.db complétée.
Figure 2 La base de données conçue
Afin de faciliter le test du programme, la base de données Image.db est stockée dans le chemin où se trouve l'exemple de programme.
Définissez la propriété TableName du composant TTable sur Image.db et la propriété Active sur True.
Au début de l'exécution du programme, il déterminera d'abord s'il existe un enregistrement dans la base de données Image.db. Si aucun enregistrement n'existe, exécutez ensuite le code suivant pour ajouter le fichier "bird.bmp" à la base de données Image.db :
procédure TForm1.FormCreate(Expéditeur : TObject);
var
mem:TMemoryStream;
commencer
si Table1.Eof et Table1.Bof alors
commencer
avec Table1 faire
commencer
Insérer;
FieldByName('Nom').AsString:='Oiseau';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Poste;
fin;
fin;
fin;
Ajoutez ensuite les fichiers image "sample.wav", "leaf.wav" et "lotus" à la base de données Image.db séquentiellement de la même manière.
Enfin, ajoutez le nom du fichier stocké dans la base de données Image.db au composant TListBox du formulaire via le code suivant :
avec Table1 faire
commencer
D'abord;
bien que ce ne soit pas Eof
commencer
ListBox1.Items.Add(FieldByName('Name').AsString);
Suivant;
fin;
fin;
Lors de l'exécution du programme, si l'utilisateur sélectionne un fichier image dans le composant TListBox du formulaire, le programme utilisera la méthode First du composant TTable pour définir le premier enregistrement de la table de données comme enregistrement actuel, puis parcourra la base de données via une boucle. Si le contenu du champ Nom dans un certain enregistrement est le même que celui sélectionné par l'utilisateur, alors les informations sur l'image dans le champ Données de l'enregistrement sont lues et l'image est affichée sur le composant TImage du formulaire. Le code est le suivant :
procédure TForm1.ListBox1Click(Expéditeur : TObject);
var
mem:TStream;
bmp:TBitmap;
commencer
avec Table1 faire
commencer
D'abord;
bien que ce ne soit pas Eof
commencer
si FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] alors
casser;
Suivant;
fin;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Gratuit;
mem.Gratuit ;
fin;
fin;
Le code du programme est le suivant :
unité Unité1 ;
interface
utilise
Windows, messages, SysUtils, variantes, classes, graphiques, contrôles, formulaires,
Boîtes de dialogue, StdCtrls, DB, DBTables, mmsystem, ExtCtrls ;
taper
TForm1 = classe(TForm)
ListBox1 : TListBox ;
Tableau 1 : TTable ;
Image1 : TImage ;
procédure FormCreate(Expéditeur : TObject);
procédure ListBox1Click(Expéditeur : TObject);
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
Formulaire1 : TForm1 ;
mise en œuvre
{$R *.dfm}
procédure TForm1.FormCreate(Expéditeur : TObject);
var
mem:TMemoryStream;
commencer
si Table1.Eof et Table1.Bof alors
commencer
avec Table1 faire
commencer
Insérer;
FieldByName('Nom').AsString:='Oiseau';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Poste;
Insérer;
FieldByName('Name').AsString:='Exemple';
mem:=TMemoryStream.Create();
mem.LoadFromFile('sample.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Poste;
Insérer;
FieldByName('Name').AsString:='feuille';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Poste;
Insérer;
FieldByName('Nom').AsString:='Lotus';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Poste;
mem.Gratuit ;
fin;
fin;
avec Table1 faire
commencer
D'abord;
bien que ce ne soit pas Eof
commencer
ListBox1.Items.Add(FieldByName('Name').AsString);
Suivant;
fin;
fin;
fin;
procédure TForm1.ListBox1Click(Expéditeur : TObject);
var
mem:TStream;
bmp:TBitmap;
commencer
avec Table1 faire
commencer
D'abord;
bien que ce ne soit pas Eof
commencer
si FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] alors
casser;
Suivant;
fin;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Gratuit;
mem.Gratuit ;
fin;
fin;
fin.
Enregistrez le fichier, puis appuyez sur la touche F9 pour exécuter le programme. L'écran initial du programme est illustré à la figure 3.
Après avoir sélectionné un élément dans le composant TListBox, le fichier image correspondant sera affiché, comme le montre la figure 4.
Figure 3 Écran initial du programme en cours d'exécution