Dieses Beispiel zeigt, wie auf Bilddateien in der Datenbank zugegriffen wird.
Fügen Sie dem Formular eine TListBox-Komponente, eine TImage-Komponente und eine TTable-Komponente hinzu. Die entworfene Hauptschnittstelle ist in Abbildung 1 dargestellt.
Abbildung 1 Hauptschnittstelle
In diesem System muss eine neue Datenbank Image.db basierend auf Paradox 7 entworfen werden. Abbildung 2 zeigt die fertige Image.db-Datenbank.
Abbildung 2: Die entworfene Datenbank
Um das Testen des Programms zu erleichtern, wird die Image.db-Datenbank in dem Pfad gespeichert, in dem sich das Beispielprogramm befindet.
Setzen Sie die TableName-Eigenschaft der TTable-Komponente auf Image.db und die Active-Eigenschaft auf True.
Zu Beginn der Programmausführung wird zunächst ermittelt, ob ein Datensatz in der Image.db-Datenbank vorhanden ist. Wenn kein Datensatz vorhanden ist, führen Sie den folgenden Code aus, um die Datei „bird.bmp“ zur Image.db-Datenbank hinzuzufügen:
procedure TForm1.FormCreate(Sender: TObject);
var
mem:TMemoryStream;
beginnen
wenn Table1.Eof und Table1.Bof dann
beginnen
mit Tabelle1 tun
beginnen
Einfügen;
FieldByName('Name').AsString:='Vogel';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Ende;
Ende;
Ende;
Fügen Sie dann auf die gleiche Weise nacheinander die Bilddateien „sample.wav“, „leaf.wav“ und „lotus“ zur Image.db-Datenbank hinzu.
Fügen Sie abschließend den in der Image.db-Datenbank gespeicherten Dateinamen mit dem folgenden Code zur TListBox-Komponente des Formulars hinzu:
mit Tabelle1 tun
beginnen
Erste;
während nicht Eof tun
beginnen
ListBox1.Items.Add(FieldByName('Name').AsString);
Nächste;
Ende;
Ende;
Wenn der Benutzer während der Ausführung des Programms eine Bilddatei in der TListBox-Komponente des Formulars auswählt, verwendet das Programm die First-Methode der TTable-Komponente, um den ersten Datensatz in der Datentabelle als aktuellen Datensatz festzulegen und ihn dann zu durchlaufen die Datenbank durch eine Schleife Record. Wenn der Inhalt des Felds „Name“ in einem bestimmten Datensatz mit der Auswahl des Benutzers übereinstimmt, werden die Bildinformationen im Feld „Daten“ im Datensatz ausgelesen und das Bild in der TImage-Komponente des Formulars angezeigt. Der Code lautet wie folgt:
procedure TForm1.ListBox1Click(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
beginnen
mit Tabelle1 tun
beginnen
Erste;
während nicht Eof tun
beginnen
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] dann
brechen;
Nächste;
Ende;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Free;
Ende;
Ende;
Der Programmcode lautet wie folgt:
Einheit Einheit1;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Varianten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, StdCtrls, DB, DBTables, mmsystem, ExtCtrls;
Typ
TForm1 = Klasse(TForm)
ListBox1: TListBox;
Tabelle 1: TTable;
Bild1: TImage;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
Privat
{Private Erklärungen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
Form1: TForm1;
Durchführung
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
mem:TMemoryStream;
beginnen
wenn Table1.Eof und Table1.Bof dann
beginnen
mit Tabelle1 tun
beginnen
Einfügen;
FieldByName('Name').AsString:='Vogel';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Einfügen;
FieldByName('Name').AsString:='Sample';
mem:=TMemoryStream.Create();
mem.LoadFromFile('sample.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Einfügen;
FieldByName('Name').AsString:='leaf';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Einfügen;
FieldByName('Name').AsString:='Lotus';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
mem.Free;
Ende;
Ende;
mit Tabelle1 tun
beginnen
Erste;
während nicht Eof tun
beginnen
ListBox1.Items.Add(FieldByName('Name').AsString);
Nächste;
Ende;
Ende;
Ende;
procedure TForm1.ListBox1Click(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
beginnen
mit Tabelle1 tun
beginnen
Erste;
während nicht Eof tun
beginnen
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] dann
brechen;
Nächste;
Ende;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Free;
Ende;
Ende;
Ende.
Speichern Sie die Datei und drücken Sie dann die Taste F9, um das Programm auszuführen. Der Startbildschirm des Programms ist in Abbildung 3 dargestellt.
Nach Auswahl eines Elements in der TListBox-Komponente wird die entsprechende Bilddatei angezeigt, wie in Abbildung 4 dargestellt.
Abbildung 3 Startbildschirm des laufenden Programms