Database yang digunakan menyimpan gambar
Pada contoh ini saya menggunakan database MS Access, tentu saja boleh menggunakan yang lain seperti database MySQL dengan komponen seperti MySQL DAC dari microOLAP, MyDAC dari Devart atau dari yang lainnya.Program ini, selain menyimpan gambar juga menampilkan gambarnya, untuk format dan tabel databasenya silahkan lihat tulisan cara menyimpan gambar atau foto menggunakan Visual Basic.
Untuk menghemat waktu teman-teman berikut langsung saja saya bahas program dan source code-nya. Oh iya… Sebelum masuk ke pembahasan ada baiknya saya jelaskan dahulu, inti dari program ini adalah menyimpan gambar ke database dengan format gambar .bmp, kenapa harus format .bmp? Apakah format yang lain tidak didukung? Tentu saja didukung tetapi ada keperluan khusus yang mengharuskan formatnya harus berupa .bmp misalnya ketika teman-teman ingin menampilkan gambar ke report atau sebuah laporan yang menggunakan komponen Quick Report gambar yang didukung hanya yang memiliki format bitmap(.bmp).
Komponen pada form Delphi
Sekarang yang harus kita lakukan adalah menambahkan komponen ke form seperti pada gambar di atas, dengan komponen dan propertinya sebagai berikut :| Nama Komponen | Properti |
|---|---|
| ADOConnection1 | LoginPrompt = False Buat koneksinya dengan cara klik ganda pada komponen ADOConnection1 kemudian klik Build->Pilih : Microsoft Jet 4.0 OLE DB Provider->Carilah lokasi databasenya->Ok->Ok |
| ADOQuery1 | Connection = ADOConnection1 CursorType = ctStatic Active = True Sekarang klik kanan ADOQuery1 dan pilih Fields Editor->Klik kanan->Add all fields. Lihat gambar dibawah ini : |
| DataSource1 | DataSet = ADOQuery1 |
| DBGrid1 | ReadOnly = True DataSource = DataSource1 Kita akan menampilkan field “nama” saja, untuk itu klik kanan DBGrid1->Columns Editor. Lihat gambar di bawah, klik 1->Isi sesuai 2 dan 3. |
| OpenPictureDialog1 | Filter = All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp|JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp |
| Label1 | Caption = Nama |
| Edit1 | Text = ” (kosongkan) |
| Image1 | Stretch = True |
| Button1 | Caption = Cari gambar dan simpan |
Kode: Menyimpan gambar ke database
Selanjutnya kita akan menulis barisan kode programnya.Tambahkan sedikit baris kode berikut pada bagian uses :
1 | jpeg, axCtrls |
1 2 | procedure tampildata();procedure convertobmp(filename:TFileName); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | // Untuk menyegarkan data pada ADOQuery1procedure TForm1.tampildata();begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.text := 'select * from tb_foto'; ADOQuery1.Active:=true; DBGrid1CellClick(DBGrid1.Columns[0]);end;// Konversi setiap gambar ke format Bitmap// Kode ini saya dapatkan dari stackoverflow.comprocedure TForm1.convertobmp(filename:TFileName);Var OleGraphic : TOleGraphic; fs : TFileStream; Source : TImage; BMP : TBitmap;Begin Try OleGraphic := TOleGraphic.Create; //The magic class! fs := TFileStream.Create(filename, fmOpenRead Or fmSharedenyNone); OleGraphic.LoadFromStream(fs); Source := Timage.Create(Nil); Source.Picture.Assign(OleGraphic); BMP := TBitmap.Create; //Converting to Bitmap bmp.Width := Source.Picture.Width; bmp.Height := source.Picture.Height; bmp.Canvas.Draw(0, 0, source.Picture.Graphic); image1.Picture.Bitmap := bmp; //Show the bitmap on form image1.Refresh; fs.Free; OleGraphic.Free; Source.Free; bmp.Free; Finally End;end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | procedure TForm1.Button1Click(Sender: TObject);var gambar : TMemorystream;begin if(Edit1.Text = '') then begin ShowMessage('Silahkan isi nama dulu'); edit1.SetFocus; exit; end; if OpenPictureDialog1.Execute then begin try convertobmp(OpenPictureDialog1.FileName); gambar := TMemorystream.Create; Image1.Picture.Graphic.SaveToStream(gambar); ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text := 'insert into tb_foto (nama,gambar) values (:p0, :p1)'; ADOQuery1.Parameters[0].Value := Edit1.text; ADOQuery1.Parameters[1].LoadFromStream(gambar,ftBlob); ADOQuery1.ExecSQL; tampildata(); except on E:Exception do ShowMessage('Maaf terjadi kesalahan.' + #13 + 'Error : ' + E.Message); end; end;end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | procedure TForm1.DBGrid1CellClick(Column: TColumn);var Stream : TADOBlobStream; GambarBmp : TBitmap; Buffer : Word;begin if (not ADOQuery1.Eof) then begin Edit1.Text:= DBGrid1.Fields[0].Text; GambarBmp := TBitmap.Create; Stream := TADOBlobStream.Create(ADOQuery1gambar,bmRead); Stream.Read(Buffer,SizeOf(Buffer)); Stream.Position := 0; GambarBmp.LoadFromStream(Stream); Image1.Picture.Bitmap := GambarBmp; image1.Refresh; end;end; |
Edit: Dengan database MySQL
Saya mencoba untuk komponen MyDAC dari Devart perlu dimodifikasi sedikit untuk even DbGrid sebagai berikut:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | procedure TForm1.DBGrid1CellClick(Column: TColumn);var Stream : TMemoryStream; GambarBmp : TBitmap;begin if (not MyQuery1.Eof) then begin Edit1.Text:= DBGrid1.Fields[0].Text; GambarBmp := TBitmap.Create; Stream := TMemoryStream.Create; try MyQuery1gambar.SaveToStream(Stream); Stream.Position := 0; GambarBmp.LoadFromStream(Stream); Image1.Picture.Bitmap := GambarBmp; image1.Refresh; finally Stream.Free; end; end;end; |
Edit pada 21 Feb 2013: Dengan database Microsoft SQL Server
Untuk SQL Server <= 2005 biasanya tipe data blob untuk penyimpanan foto belum didukung, oleh karena itu bisa menggunakan alternatif lain yaitu gunakan tipe data varbinary(max). Nah jika MS. SQL Server > 2005, kayaknya sudah mendukung tipe data Blob.Okey sekian tutorial saya kali ini, semoga mudah dipahami
Kami (Catatan Belajar) juga hadir di Facebook, like kami ya klik tombol berikut:
Tidak ada komentar:
Posting Komentar