Menyimpan gambar ke database menggunakan Delphi

Tutorial berikut menjelaskan bagaimana cara menyimpan gambar atau foto ke database menggunakan delphi dan databasenya MS. Access, sebelumnya saya sudah membuat tulisan cara menyimpan gambar atau foto ke database tetapi menggunakan Visual Basic.

Mengapa menyimpan gambar ke database menggunakan Delphi

Sebenarnya tutorial tentang bagaimana cara menyimpan gambar atau foto ke database menggunakan delphi sudah banyak di internet, tetapi saya tidak menemukan satupun dari mereka yang cocok dalam artian programnya oke dari satu sisi tetapi error di sisi yang lain, oleh karena itu saya mempunyai ide untuk menulis artikel ini.

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).
Menyimpan gambar ke database dengan Delphi

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 :
Menambahkan field pada AdoQuery fields editor
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. Dbgrid Column Editor
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 :

Pada bagian type tambahkan barisan kode berikut :

Tambahkan juga procedure berikut di bawah implementation :

Sekarang klik ganda button yang ada pada form dan gantikan kodenya dengan yang di bawah ini :

Ketika DbGrid di klik, gantikan kode eventnya sebagai berikut :

Edit: Dengan database MySQL

Saya mencoba untuk komponen MyDAC dari Devart perlu dimodifikasi sedikit untuk even DbGrid sebagai berikut:

Sedangkan MySQL DAC dari microOLAP tidak terjadi masalah dengan kode yang sebelumnya.

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 😀 dan bermanfaat buat sahabat CB, jika sahabat ingin menyimpan gambar tanpa meyimpan gambarnya ke database, hanya di simpan kedalam folder maka silahkan lihat tutorial alternatif menyimpan gambar dengan Delphi 7. Jangan lupa berikan juga +1 Google sahabat di tulisan ini

Kami (Catatan Belajar) juga hadir di Facebook, like kami ya klik tombol berikut:

 
Signature :

No copy paste content please…. If you want do that, please include the original source. Original Post by catatanbelajar.com, written by , .

218 thoughts on “Menyimpan gambar ke database menggunakan Delphi


  1. mas saya mau tanya ni …kok waktu mau active kan true di property ADOQuery1 muncul error missing sql property ya … mohon bantuannya


  2. terimakasih sudah mau berbagi saya selalu mengikuti tulisan bang Ivo, jarang ada orang yang mau berbagi seperti abang, Bravo bang….


  3. mas sy mau nanya…tau gk cara menampilkan data field memo (database desktop) ke quick report….


  4. saya tertarik pada halaman ini… sangat membantu para Newbe Delphi…
    kbetulan saya jg punya masalah saat save data mas.
    saya pake SQLServer2005 dan delphi7…
    komponen yg dipakai menggunakan ADO…

    ni source code yg saya pakai:

    klo saya coba pake komponen BDE berhasil mas…
    jadi kesimpulan saya: error bukan karena format tanggal yg berbeda

    Mohon bantuannya mas….


    1. Terimakasih sudah berkomentar pada tulisan ini mas/mbak.
      Saya lihat apa yang mas/mbak tanyakan kok tidak berkait dengan tulisan ini yaitu tentang menyimpan gambar. Tetapi walaupun demikian saya akan tetap mencoba menjawab pertanyaan mas/mbak.

      Saya melihat ada beberapa keganjilan dari kode punya mas/mbak ini, misalnya kode S := ‘insert into tTest values(:p0)’; seharusnya ditulis fieldnya juga seperti S := ‘insert into tTest (field_tanggal) values(:p0)’;, kemudian klo sampean ikutin format penulisan kode saya tidak ada SQL.Add(S);nya sama sekali. Jadi sebaiknya begini saja kode sampean:

      Maaf ya kalau jawaban saya tidak mengena, soalnya sampaean juga tidak menyertakan pesan errornya :)
      Happy coding


      1. hahaha… maaf mas, klo tiba2 nyleweng ksini (ttg gambar).

        oya, (field_tanggal) yg sampean maksud itu cuma opsi mas, jd klo langsung ke VALUES itu urutan dan jumlah field-nya harus sama dengan struktur tabelnya. misalnya:
        struktur tabel:
        A char(10)
        B int
        C datetime
        klo cuma mo nyimpan A dan B saja maka codingnya ‘insert into Table1 (A,B) values(:p0,:p1)’
        tp, klo semua field-nya langsung aja: ‘insert into Table1 Values(:p0,:p1,:p2)’

        trus, baris yg sampean matikan itu:
        //ADOTable1.Close;
        //ADOTable1.Open;
        maksudnya cuma mo refresh komponen aja koq..

        ni mess errornya mas:
        … with message: ‘[Microsoft][ODBC SQL Server Driver]Optional feature not implemented…


        1. Error itu disebabkan tidak sesuai datatype field yang ada di tabel database dengan datatype parameter yang sampean taruhkan dikode.


        2. Solusinya ganti datatype menjadi datetime untuk field di tabel sehingga DateTimePicker1.DateTime bisa masuk. Atau ganti dengan tipe data date juga bisa, tapi yang diinsert DateTimePicker1.Date bukan DateTimePicker1.DateTime

          Semoga membantu.
          Oh ya silahkan dicoba dulu karena saya sendiri belum mencoba.
          Happy coding.


      2. ya memang sprtnya demikian mas, tp struktur table (yg saya coba) adalah

        Tanggal = Datetime

        makanya pas saya coba pake komponen BDE berhasil, soalnya coding sprt ini:

        procedure TForm1.Button1Click(Sender: TObject);
        var S : string;
        begin
        S := ‘insert into tTest values(:p0)’;
        with Query1 do
        begin
        Close; SQL.Clear; SQL.Add(S);
        ParamByName(‘p0’).AsDateTime :=DateTimePicker1.DateTime;
        ExecSQL;
        end;
        Table1.Close;
        Table1.Open;
        end;

        agak sulit saya beradaptasi pake ADO, cuma dia punya properties untuk mematikan login database, sedangkan BDE (yg saya tau) gak ada, makanya coba migrasi ke ADO


      3. OK mas, thanks banget infonya…
        kapan2 saya mo nanya lg, smoga mas Ivo gak bosan2…
        maaf klo merepotkan….


        1. Oke mas.
          Mungkin mas bisa coba kembali begini

          Catatan: saya belum tes kodenya.


      4. Hehehe… masih error mas:

        Application uses a value of the wrong type for the current operation


        1. Oh gitu ya. Silahkan diutak-atik saja. Soalnya saya sekarang pake Linux dan tidak coding delphi lagi.


      5. Akhirnya saya ambil jalan pintas aja:

        with ADOTable1 do
        begin
        Append;
        FieldValues[‘Tanggal’] := DateTimePicker1.Date;
        Post;
        end;


    1. Caranya sama dengan cara menyimpan, tinggal ubah query menjadi "update tb_foto set nama=:p0, gambar=:p1"


  5. mas, mo tanya nih.. gimana source code untuk membuat peringatan seperti ini “no member ini masih aktif dan tidak bisa disimpan”. ketika klik pencarian no_member. atau pada saat klik simpan.


    1. Ketika klik simpan aja, jadi kodenya harus melakukan pencarian ke database dulu kalau no member itu aktif atau tidak, jika masih aktif keluarkan peringatannya dan jangan disimpan.


  6. Assalamualaikum, terima kasih Mas share Ilmunya, mau tanya, bagaimana cara gambar yg disimpan lebih dari 1 record, saya da buat aplikasi Delphi, dgn koneksi database Access.. dalam form delphinya saya buat dgn TEdit1 untuk tampilkan path (alamat folder t4 simpan gambar) dan file gambarnya saya buat folder sendiri untuk simpannya?


  7. asslm..
    mas bagaimana untk mengatasi..
    [error] pm.pas(44): Statement expected but ‘PROCEDURE’ found
    [Fatal Error] PAby,dpr(10):Could not compile used unit ‘pm.pas’


    1. Kemungkinan penyebab untuk hal ini mencakup dideklarasikan atau salah menyatakan variabel.
      Coba cek kode programnya, misal begin harus diakhiri dengan end, atau terlalu banyak begin atau end.


  8. mau nanya mas..kalau coding diatas udah aku coba dan berhasill.

    kalau mau ubah jadi ekstensi PNG..gmna yah mas?


    1. Kode di atas tidak mengubah file gambar menjadi simpanan file gambar yang lain, sehingga tidak ada kaitannya sama sekali dengan ektensi tetapi kode di atas mengubah format gambar dari yang bukan bmp menjadi format bmp yang kemudian disimpan ke database.

      Jika yang mas maksud adalah ingin mengubah menjadi format png mungkin mas bisa coba kode berikut:

      Untuk menampilkannya, misal saat DbGrid di klik ubah kode yang ada di atas menjadi:

      CATATAN: Saya belum coba lho kodenya, sehingga masih mungkin ada kesalahan. Tetapi kira-kira kodenya seperti itu.


  9. klu file gambar yang udah si simpan ke database, qt mau ambil kembali dan di simpan ke direktory, seperti mendownload gmna mas..???

Tinggalkan Balasan

Alamat surel Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *