Alternatif menyimpan gambar dengan Delphi 7

Setelah menulis tutorial menyimpan gambar ke database menggunakan Delphi, saya pikir ada baiknya membuat alternatif lain yaitu kita tidak perlu menyimpan gambar ke dalam database, lalu bagaimana? kita cukup menyimpan nama filenya saja sedangkan file aslinya akan kita konversi ke format Bitmap kemudian kita simpan ke lokasi tertentu, di sini saya simpan di lokasi aplikasi (location path).

Database yang saya gunakan di sini adalah database access dengan format 2003, langsung saja kita buat databasenya dengan kriteria sebagai berikut :

Nama Database db.mdb
Nama Tabel tb_foto
– – – – – – – – – – – – – – – – – – – – – –
Nama field Data Tipe
ID AutoNumber
nama Text
namafilefoto Text

Sehingga jadinya akan tampak seperti gambar ini :

Sekarang buat folder dengan nama “file-fotonya-di-sini-ya” tanpa tanda petik tentunya dilokasi penyimpanan projek delphi anda seperti punya saya nih :

Folder tersebut bertujuan untuk menyimpan gambar yang akan diinputkan nantinya.

Sama seperti tutorial sebelumnya, sekarang yang harus kita lakukan adalah menambahkan komponen ke form seperti pada gambar pertama di tutorial sebelumnya yaitu menyimpan gambar ke database menggunakan Delphi, 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
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

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 :

Tambahkan even OnCellClick dengan kode sebagai berikut :

Nah berikut kode lengkapnya :

Okey sekian tutorial saya kali ini, semoga bermanfaat buat sahabat CB, jika ada yang kurang jelas silahkan memberi tanggapan di bagian komentar, 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 , .

38 thoughts on “Alternatif menyimpan gambar dengan Delphi 7”

  1. operand type clash:image is incompatible with text

    salah dimana mas?

    pke ms sql,type datanya juga sudah text

    procedure Tf_mkaryawan.CmdsimpanClick(Sender: TObject);
    var
    //deklarasi stream
    foto:tmemorystream;
    var gambar : TMemorystream;
    List: TStrings;
    n : byte;
    namafotobaru : string;
    begin
    if OpenPictureDialog1.Execute then begin

    List := TStringList.Create;
    convertobmp(OpenPictureDialog1.FileName);
    gambar := TMemorystream.Create;
    Image1.Picture.Graphic.SaveToStream(gambar);
    qmkaryawan.SQL.Clear;
    qmkaryawan.SQL.Add(‘exec tsimpankar :kode,:nama,:tgl,:status,:foto’);
    qmkaryawan.Prepared;
    qmkaryawan.Parameters.ParamByName(‘kode’).Value:=txtkodekar.Text;
    qmkaryawan.Parameters.ParamByName(‘nama’).Value:=txtnamakar.Text;
    qmkaryawan.Parameters.ParamByName(‘tgl’).Value:=txttgl.Text;
    if txtstatus.Checked=true then qmkaryawan.Parameters.ParamByName(‘status’).Value:=’1′
    else
    qmkaryawan.Parameters.ParamByName(‘status’).Value:=’0′;

    qmkaryawan.Parameters.ParamByName(‘foto’).LoadFromStream(gambar,ftBlob);

    if Assigned(Image1.Picture.Graphic) then begin
    n := ExtractStrings([‘.’],[],PChar(ExtractFileName(OpenPictureDialog1.FileName)),List);

    namafotobaru := StringReplace(ExtractFileName(OpenPictureDialog1.FileName), ‘ ‘, ‘_’, [rfIgnoreCase, rfReplaceAll]);
    namafotobaru := StringReplace(namafotobaru, ‘.’, ‘_’, [rfIgnoreCase, rfReplaceAll]);
    namafotobaru := StringReplace(namafotobaru, ‘_’ + List[n-1], ‘.bmp’, [rfIgnoreCase, rfReplaceAll]);

    Image1.Picture.SaveToFile(ExtractFilePath(ParamStr(0)) + ‘filefoto’ + namafotobaru);
    qmkaryawan.Parameters[1].Value := namafotobaru;
    List.Free;

    end;

    end;

    qmkaryawan.ExecSQL;

    tampilawal;
    tampildata;
    end;

          1. ini kodingnya gan,…

    1. Yang errornya dibagian mana?
      Oke saya tebak saja ya?
      Pertama
      Pada procedure TFormPenduduk.tampildata; terdapat kode begini

      GridPenduduk.Columns[2] diganti menjadi GridPenduduk.Columns[0] saja.

      Kedua
      Pada procedure TFormPenduduk.BLoadClick(Sender: TObject); terdapat kode begini

      Coba ganti menjadi:

      Pada bagian:

      diganti menjadi:

      Ketiga
      Ada yang aneh pada kode om Abima, ditulis begini:

      Itu proses pembuatannya gimana? seharusnya Grid penduduk itu di clik trus pada event properties cari yang namanya event CellClick trus klik ganda disitu sehingga nanti kita akan dibawa ke jendela penulisan kode, baru kita tulis kode programnya.
      Jika caranya benar maka seharusnya nama prosedurnya menjadi:

      bukan

      Coba dibuat lagi dan perbaiki sehingga menjadi kode seperti ini:

      Kalau sudah beres, jangan lupa memberitahu kami trus dukung web kami dengan like facebook kami, tambahkan kami ke lingkaran Google+. Jangan lupa untuk membagikan/ share tutorial yang ada di CB(Catatan Belajar) ke teman-teman yang lainnya.

      Untuk informasi lebih lanjut tentang error ,silahkan baca diskusi kami dengan bung Arya di komentar Menyimpan gambar ke database menggunakan Delphi

      Sukses ya!.
      Salam.

  2. maaf mas saya pendatang baru di delphi dan masih belajar belum ada pertanyaan saya.. komentar ni hanya di coba apakah bisa masuk tidak

  3. mas sya mencoba menerapakan cara yang sama ini tapi untuk di input ke database SQL, terjadi error dengan pesan “Lost connection with MYSQL”, ap ada kesalahan dengan syntax ya mas? sya tdk mengubah syntax nya masih tetap sama dengan 2 parameter

    procedure TForm1.Button2Click(Sender: TObject);
    var gambar : TMemorystream;
    begin
    gambar := TMemorystream.Create;
    Image1.Picture.Graphic.SaveToStream(gambar);
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := ‘insert into pict (nama,gambar) values (:p0, :p1)’;
    ADOQuery1.Parameters[0].Value := Edit1.text;
    ADOQuery1.Parameters[1].LoadFromStream(gambar,ftBlob);
    ADOQuery1.ExecSQL;
    tampildata();
    end;
    end.

    1. Editnya seperti biasa aja, tapi gambar yang lama dihapus dulu dari foldernya itu pake kode program DeleteFile(ExtractFilePath(ParamStr(0)) + 'file-fotonya-di-sini-ya' + namafoto) baru gambar yang barunya disimpan.

  4. Klo langsung Upload Jpg bisa tidak Gan? maslahnya ini berkaitan dengan kualitas Gambar..

    Kasusnya Seperti ini..

    Saya saat ini berniat men develop program delphi menggunakan database Mysql Server dan akan bersipat terpusat (Server).

    Pada Satu Klien, ada satu inputan storage mengharuskan input image .jpg hasil dr proses pengecekan.
    bagaimana caranya agar photo/gambar hasil pengecekan tersebut dapat tersimpan dalam database.
    (jika Gambar disimpan dalam Mysql langsung sebagai file BLOB kemungkinan menyebabkan kapasitas database akan besar, cara lain yaitu dengan menyimpan file gambar tersebut dalam sebuah folder tapi tersimpan di HD Server). Mohon petunjuk caranya..
    Kemudian, bagaimana cara kita hendak menampilkan file tersebut menggunakan aplikasi Windows Picture..

    Semoga Agan dapat membantu kekurang tahuan saya! Jazakumulloh.. Thx

    1. Kalau tutorial saya inikan cuma bersifat lokal mas tidak menggunakan server, tentu saja bisa saja dibuat seperti yang mas inginkan itu, namanya pemrograman itu tidak ada yang tidak bisa, setidaknya ada alternatif.

      Saya tidak bisa bantu kodenya, kecuali ada kesepakatan tertentu alias jualan, hehe… Tapi saya bisa tunjukan alurnya, dan harus mas pelajari.
      Pertama, buatkan validasi di sisi klien untuk mengecek gambarnya.

      Kedua, jika sudah divalidasi mas harus buat kode upload ke server dari sisi klien, sedangkan dari sisi server harus ada program induk untuk menerima unggahan gambar beserta data lainnya dan menyimpan gambar + data di server.

      ketiga, di program klien apabila user klik DBGrid, maka harus ada program yang mengunduh gambar, hasil unduhan harus mas simpan direktori khusus sehingga apabila user klik DBGrid program tidak usah mengunduh lagi jika sudah ada gambarnya. Cara menampilkan gambar seperti biasanya tinggal ambil gambar dari direktori penyimpanan di lokal user tadi.

      Kira2 begitu mas alurnya. Selamat belajar, sukses selalu.
      Salam admin,

      Catatan Belajar

  5. klo jpeg dan dari banyak file image kita ubah ke jpeg gmn mas..
    format y jpeg mas.. trus convert ke pdf tapi multiple gmn ya
    trus kita dapat nama file yg image otomatis ke apus

  6. maaf sebelumnya mas, mohon bimbingan dan solusiya soalnya ini terjadi error. saya juga inbox mas di fb “catatan belajar”. terima kasih sebelumnya

    procedure TFdata.convertobmp(filename: TFileName);
    Var
         OleGraphic              : TOleGraphic; //bagian ini yang error mas, mohon solusinya
         fs                       : TFileStream;
         Source                   : TImage;
         BMP                      : TBitmap;
    Begin

Tinggalkan Balasan