Codegratis.wordpress.com. Mari belajar coding dengan mudah dan sederhana. Dalam post blog saya kali ini kita akan belajar membuat aplikasi database sederhana dengan delphi. Aplikasi yang akan kita buat digunakan sebagai contoh untuk menginput data barang. Namun sebelum kita belajar untuk membuat aplikasi ini sebelumnya saya akan menjelaskan spesifikasi software yang saya gunakan.
Software |
Version |
Windows |
7 Home Premium 64 bit |
Delphi |
Embarcadero Delphi XE2 |
XAMPP |
Win32 5.6.3 |
ZEOS |
7.1.2 stable |
TMS Component Pack |
6.4.4.1 |
QuickReport |
5.05 Pro |
Baiklah karena spesifikasi software yang saya gunakan telah jelas marilah kita langsung mulai belajar membuat aplikasi database sederhana dengan delphi yang kali ini kita ambil tema tentang data barang.
1. DATABASE
Database Management System (DBMS) yang kita gunakan pada aplikasi ini MySQL, karena MySQL paling banyak penggunanya dan lebih mudah digunakan. MySQL yang kita gunakan kali ini sudah include dalam virtual server XAMPP. Baiklah untuk membangun database dengan MySQL langsung saja buka browser dan ketikkan localhost/phpmyadmin pada address bar. Buat database dengan nama barang, lalu buat tabel dengan nama tabel t_barang, untuk rincian field pada t_barang sebagai berikut :
Nama Field |
Tipe |
Lebar |
Penyortiran |
Keterangan |
kd_barang* |
Varchar |
4 |
ascii_bin |
User name (Primary Key) |
nm_barang |
Varchar |
20 |
|
Nama barang |
satuan |
Varchar |
5 |
|
|
qty |
Int |
3 |
|
Jumlah |
tgl_beli |
Date |
|
|
Tanggal pembelian |
harga |
Int |
6 |
|
|
foto |
Varchar |
8 |
|
|
2. MEMULAI MEMBUAT PROJECT DENGAN DELPHI
Setelah kita buat database pada MySQL selanjutnya kita langsung saja buat project baru pada delphi. Pertama buka delphi lalu pilih menu File – New – VCL Form Applications. Setelah itu akan muncul sebuah form baru, lalu klik tombol Save All untuk menyimpan form pertama yang akan kita buat beri nama u_main, form ini akan kita gunakan sebagai menu utama aplikasi. Setelah itu klik tombol Save All lagi untuk menyimpan project delphi, beri nama prj_barang. Ok setelah form menu utama dan project barang kita simpan langkah selanjutnya adalah merancang form menu utama, berikut ini adalah rancangan form menu utama

Object dan properties yang digunakan pada form menu utama adalah sebagai berikut :
Nama Object |
Nama Property |
Setting |
Nilai |
Form Main (Menu Utama) |
Align |
Custom |
|
Border icons |
biMaximize |
false |
Border style |
bsSingle |
|
Caption |
Toko Alat Tulis Abadi |
|
Font |
Name |
Segoe UI Light |
Font |
size |
10 |
Name |
f_main |
|
Position |
poScreenCenter |
|
WindowState |
wsMaximized |
|
MainMenu1 |
Klik 2x |
|
|
D1 |
Caption |
Data |
B1 |
Caption |
Barang |
L1 |
Caption |
Laporan |
B2 |
Caption |
Barang |
K1 |
Caption |
Keluar |
Panel1 |
Align |
alTop |
|
Caption |
TOKO ALAT TULIS ABADI |
|
Font |
Name |
Segoe UI Light |
Font |
Size |
18 |
Font |
Style |
Bold |
Untuk membuat menu pada form menu utama gunakan komponen TMainMenu, selanjutnya letakkan pada form menu utama lalu klik dua kali dan ketik menu apa saja yang akan kita tampilkan.
3. KONEKSI DATABASE MYSQL DENGAN DELPHI
Untuk dapat mengkoneksikan database yang telah kita buat dengan delphi maka kita memerlukan konektor, salah satu konektor yang dapat kita gunakan adalah ZEOS. ZEOS merupakan konektor database pada delphi yang disediakan oleh pihak ketiga. Baiklah langsung saja kita buat koneksi database MySQL dengan ZEOS. Pertama buat form baru yang akan kita gunakan sebagai Data Module pada delphi, Data Module adalah form yang berfungsi khusus untuk koneksi database pada delphi. Cara membuat form Data Module klik menu File – New – Data Module, lalu simpan dengan nama u_dm. Setelah itu masukkan component pada Data Module antara lain ZConnection untuk koneksi ke MySQL, ZQuery untuk memasukkan perintah SQL, dan DataSource untuk menampilakan data pada form.

Object dan properties yang digunakan pada form Data Module adalah sebagai berikut :
Nama Object |
Nama Property |
Setting |
Nilai |
Form Datamodule |
Name |
dm |
|
ZConnection1 |
Database |
barang |
|
HostName |
localhost |
|
Port |
3306 |
|
Protocol |
mysql-5 |
|
User |
root |
|
Connected |
true |
|
ZQuery1 |
Connection |
ZConnection1 |
|
DataSource1 |
Dataset |
ZQuery1 |
|
Jika setting properties pada ZConnection tidak tepat maka property Connected tidak akan dapat diseting menjadi true, itu berarti koneksi ke database MySQL masih gagal, jika Connected sudah dapat diseting menjadi true, maka berarti koneksi ke database MySQL sudah sukses, horeee Selamat. Jangan lupa di Save All.
4. MEMBUAT FORM BARANG
Form barang adalah form yang kita gunakan untuk menginput, mengedit, menghapus, dan mencari data barang. Form ini adalah form utama pada aplikasi ini dimana fungsi-fungsi database pada delphi diaplikasikan. Baiklah langsug saja kita buat form baru caranya klik File – New – VCL Form, simpan dengan nama u_barang. Berikut adalah rancangan form barang, jika ada yang memiliki rancangan model lainnya monggo silahkan, tapi rancangan dan komponen dasarnya seperti ini :

Sedangkan untuk object dan properties yang digunakan pada form barang adalah sebagai berikut :
Nama Object |
Nama Property |
Setting |
Nilai |
Form barang |
Align |
Custom |
|
Border style |
bsDialog |
|
Caption |
|
|
Font |
Name |
Segoe UI Light |
Font |
size |
10 |
Name |
f_barang |
|
Position |
poScreenCenter |
|
Label1 |
Caption |
Barang |
|
Font |
Size |
12 |
Label2 |
Caption |
Kode Barang |
|
Edit1 |
CharCase |
ecUpperCase |
|
Name |
ekd |
|
Enabled |
False |
|
Label3 |
Caption |
Nama Barang |
|
Edit2 |
CharCase |
ecUpperCase |
|
MaxLength |
20 |
|
Name |
enama |
|
Enabled |
False |
|
Label4 |
Caption |
Jumlah |
|
Edit3 |
Alignment |
taRightJustify |
|
MaxLength |
3 |
|
Name |
ejml |
|
Enabled |
False |
|
NumbersOnly |
True |
|
Label5 |
Caption |
Satuan |
|
Combo box 1 |
CharCase |
ecUpperCase |
|
Enabled |
False |
|
Items |
PCSPACK
RIM
BOX
KOTAK
LUSIN |
|
Name |
csatuan |
|
Label6 |
Caption |
Tanggal Pembelian |
|
DateTimePicker 1 |
Enabled |
False |
|
Format |
dd/mm/yyyy |
|
name |
dttgl |
|
Label7 |
Caption |
Harga |
|
Edit4 |
Alignment |
taRightJustify |
|
MaxLength |
7 |
|
Name |
eharga |
|
Enabled |
False |
|
NumbersOnly |
True |
|
Label8 |
Caption |
Foto |
|
Shape1 |
Height |
95 |
|
Width |
91 |
|
TAdvGDIPPicture1 |
Align |
Custom |
|
Height |
91 |
|
Name |
foto |
|
Stretch |
True |
|
Width |
87 |
|
OpenPictureDialog1 |
Filter |
File Gambar JPG (*.jpg)|*.jpg|File Gambar JPEG (*.jpeg)|*.jpeg |
|
Title |
Cari Foto Barang |
|
Button1 |
Caption |
&Cari Foto |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button2 |
Caption |
&Tambah |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button3 |
Caption |
&Ubah |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button4 |
Caption |
&Tambah |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button5 |
Caption |
&Hapus |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button6 |
Caption |
&Keluar |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Panel1 |
Caption |
|
|
Label9 |
Caption |
Cari |
|
RadioGroup1 |
Columns |
2 |
|
Items |
Kode BarangNama Barang |
|
Name |
rgcari |
|
Edit5 |
CharCase |
ecUpperCase |
|
MaxLength |
20 |
|
Name |
ecari |
|
Button7 |
Caption |
&Cari |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
DBGrid1 |
Font |
Size |
8 |
Name |
gbarang |
|
Options |
dgEditing |
false |
dgRowSelect |
true |
ReadOnly |
true |
|
TitleFont |
Size |
8 |
Style |
fsBold |
Column[0] |
FieldName |
kd_barang |
Title – Alignment |
taCenter |
Title – Caption |
Kode Brg. |
Column[1] |
FieldName |
nm_barang |
Title – Alignment |
taCenter |
Title – Caption |
Nama Brg. |
Column[2] |
FieldName |
qty |
Title – Alignment |
taCenter |
Title – Caption |
Jumlah |
Column[3] |
FieldName |
satuan |
Title – Alignment |
taCenter |
Title – Caption |
Satuan |
Column[4] |
FieldName |
tgl_beli |
Title – Alignment |
taCenter |
Title – Caption |
Tgl. Pembelian |
Column[5] |
FieldName |
harga |
Title – Alignment |
taCenter |
Title – Caption |
harga |
Ok setelah Anda benar dalam merancang form dan menyamakan properties komponen pada form barang, maka selanjutnya kita akan bahas mengenai coding dari form barang. Sebelum memulai coding kita harus menghubungkan terlebih dahulu antara form menu utama dengan form barang, agar form barang dapat ditampilan langsung pada menu utama. Caranya buka fom menu utama yang tadi telah kita buat, setelah itu pilih menu File – Use Unit – pilih u_barang lalu OK. Selajutnya pada MainMenu1 klik 2x pada menu Data submenu Barang klik 2x, lalu ketikkan f_barang.showmodal; ok form barang telah dapat ditampilakan dari menu utama, jangan lupa Save All.
Kembali lagi ke form barang, sekarang kita tinggal mengkoneksikan antara form barang dengan form Data Module supaya form barang dapat mengakses database MySQL. Caranya tinggal use unit form Data Module pada form barang, caranya sama seperti Use Unit sebelumnya. Ok sekarang form barang sudah terhubung dengan form Data Module, baiklah sekarang langsung lanjut coding form barang, tapi jangan lupa Save All.
- Variabel yang digunakan pada form barang
Untuk menulisakan variabel pada delphi, langsung saja tulis dibawah tulisan f_barang: Tf_barang; dibawah tulisan var sebelum tulisan implementation.
var
f_barang: Tf_barang;
asalgambar,gambar,foto,fotolama,sket,kb,nb:string;
datalama,blek:boolean;
- Prosedure buatan sendiri atau tambahan pada form barang
Untuk menulisakan prosedure buatan sendiri pada delphi sangat mudah caranya, sama seperti membuat variabel, lansung diketik saja. Ketik nama prosedure terlebih dahulu sebelum tulisan private, setelah itu baru ketik isi prosedure dibawah tulisan {$R *.dfm} dibawah implementation.
procedure mati;
procedure aktif;
procedure matik;
procedure bersih;
procedure tampil;
- Prosedure mati, digunakan untuk menonaktifkan inputan
procedure tf_barang.mati;
begin
enama.Enabled:=false;
ejml.Enabled:=false;
csatuan.Enabled:=false;
dttgl.Enabled:=false;
eharga.Enabled:=false;
bfoto.Enabled:=false;
btambah.Caption:='&Tambah';
bubah.Caption:='&Ubah';
bhapus.Enabled:=true;
bexit.Enabled:=true;
ecari.Enabled:=true;
rgcari.Enabled:=true;
bcari.Enabled:=true;
gbarang.Enabled:=true;
end;
- Prosedure aktif, digunakan untuk mengaktifkan inputan
procedure tf_barang.aktif;
begin
enama.Enabled:=true;
ejml.Enabled:=true;
csatuan.Enabled:=true;
dttgl.Enabled:=true;
eharga.Enabled:=true;
bfoto.Enabled:=true;
btambah.Caption:='&Batal';
bubah.Caption:='&Simpan';
bhapus.Enabled:=false;
bexit.Enabled:=false;
ecari.Enabled:=false;
rgcari.Enabled:=false;
bcari.Enabled:=false;
gbarang.Enabled:=false;
enama.SetFocus;
end;
- Prosedure matik, digunakan untuk menghasilkan kode otomatis atau nomor otomatis sebagai primary key pada tabel barang tepatnya pada field kd_barang
procedure tf_barang.matik;
var i:integer;
begin
with DM.ZQuery1 do
begin
i:=1;
sql.Clear;
sql.Add('select * from t_barang');
open;
if IsEmpty then
kb:='B'+format('%.3d',[i])
else
begin
last;
i:=StrToInt(copy((FieldByName('kd_barang').AsString),2,3))+1;
kb:='B'+format('%.3d',[i]);
end;
ekd.Text:=kb;
end;
end;
- Prosedure bersih, digunakan untuk membersihkan inputan
procedure tf_barang.bersih;
begin
ekd.Clear;
enama.Clear;
ejml.Clear;
csatuan.Text:='';
dttgl.Date:=date();
eharga.Clear;
foto.Picture:=nil;
end;
- Prosedure tampil, digunakan untuk menampilkan data dari DBGrid ke inputan, pada saat datanya diklik atau dipilih. Terdapat satu variabel pada procedure ini
procedure tf_barang.tampil;
var s:string;
begin
with dm.ZQuery1 do
begin
if RecordCount=0 then
begin
MessageDlg('Data Mobil Belum Ada',mtInformation,[mbOK],0);
btambah.SetFocus;
exit;
end
else
begin
kb:=FieldByName('kd_barang').AsString;
nb:=FieldByName('nm_barang').AsString;
ekd.Text:=FieldByName('kd_barang').AsString;
enama.Text:=FieldByName('nm_barang').AsString;
ejml.Text:=inttostr(FieldByName('qty').AsInteger);
csatuan.Text:=FieldByName('satuan').AsString;
dttgl.Date:=FieldByName('tgl_beli').AsDateTime;
eharga.Text:=inttostr(FieldByName('harga').AsInteger);
s:=ExtractFilePath(Application.ExeName)+'\img\'+FieldByName('foto').AsString;
if FileExists(s) then
begin
blek:=false;
foto.Picture.LoadFromFile(s);
end
else
begin
blek:=true;
foto.Picture.LoadFromFile(pchar(ExtractFilePath(Application.ExeName)+'book.jpg'))
end;
sket:=FieldByName('foto').AsString;
end;
end;
end;
- Prosedure ribuan, digunakan untuk menghasilkan tanda pemisah pada angka ribuan, jika format US menggunakan koma ( , ) sebagai pemisah ribuannya, jika format Indonesia menggunakan titik ( . ) sebagai pemisah ribuannya. Prosedure ini digunakan untuk hal-hal yang berhubungan dengan uang, contohnya harga,pembayaran, setoran, total bayar, dll. Terdapat dua variabel pada procedure ini
procedure ribuan(edit : Tedit);
var
sRupiah: string;
iRupiah: Currency;
begin
//ribuan --> currency ( menyesuaikan setting windows )
sRupiah := edit.Text;
sRupiah := StringReplace(sRupiah,',','',[rfReplaceAll,rfIgnoreCase]); // hilangkan char koma , pemisah //ribuan selain IDR
sRupiah := StringReplace(sRupiah,'.','',[rfReplaceAll,rfIgnoreCase]); //remove char titik . pemisah //ribuan IDR
iRupiah := StrToCurrDef(sRupiah,0); // convert srupiah ke currency
//currency --> format ribuan
edit.Text := FormatCurr('##,###,###',iRupiah);
edit.SelStart := length(edit.text);
end;
- Function buatan sendiri atau tambahan pada form barang
Kalo tadi kita sudah belajar membuat procedure tambahan, sekarang kita belajar membuat function pada delphi. Prosedure pada delphi digunakan untuk melakukan proses dengan multy output, sedangakan function pada delphi digunakan untuk melakukan proses dengan single output. Membuat function pada delphi malah lebih mudah dari pada membuat procedure, caranya langsung saja ketik nama function dan isi function dibawah tulisan {$R *.dfm} dibawah implementation.
- Function hapusribuan, digunakan untuk mengembalikan inputan angka yang telah ditambahkan pemisah ribuan baik itu format koma atau titik ke angka biasa tanpa pemisah ribuan. Function ini digunakan pada saat menyimpan angka integer ke MySQL karena MySQL tidak dapat menerima angka integer dengan pemisah ribuan. Terdapat satu variabel pada function ini.
function hapusribuan(edit : Tedit): string;
var hasil : string;
begin
hasil := edit.text;
hasil := StringReplace(hasil,',','',[rfReplaceAll,rfIgnoreCase]);
hasil := StringReplace(hasil,'.','',[rfReplaceAll,rfIgnoreCase]);
hapusribuan := hasil;
end;
Variabel, procedure, dan function tambahan sudah dibuat eiiiits jangan lupa Save All, sekarang tinggal membuat prosedure sesuai event pada setiap komponen pada form barang. Untuk menuliskan prosedure pada komponen yang digunakan pada form cukup klik komponen lalu pilih events yang akan kita isi prosedurenya atau akan kita tuliskan codingnya, events ada disebah properties komponen, klik 2x events untuk menuliskan coding didalamnya. Berikut ini adalah prosedure pada events setiap komponen pada form barang :
- Procedure Tf_barang.FormShow, prosedure ini digunakan pada saat form pertama kali tampil, untuk menentukan tabel yang kita gunakan dan data yang ditampilkan pada form. Pada prosedure ini kita mulai menggunakan perintah SQL, dimana perintah tersebut akan digunakan terus dalam coding form ini yang berhubungan database. Kenapa mengunakan perintah SQL, karena kita menggunakan database MySQL, perintah SQL adalah standar atau aturan baku dalam DBMS secara global, perintah SQL dapat diterima di semua software DBMS, dan perintah SQL bersifat bug free and easy to use menurut saya, sehingga tidak usah mengcoding dua kali untuk mengakses database dari delphi.
- Procedure Tf_barang.ehargaChange, prosedure ini digunakan untuk menambahkan pemisah ribuan pada saat mengiput harga. Prosedure ini hanya memanggil prosedure ribun yang telah kita buat sebelumnya
procedure Tf_barang.ehargaChange(Sender: TObject);
begin
ribuan(eharga);
end;
- Procedure Tf_barang.bfotoClick, digunakan untuk memilih foto yang akan tampilkan pada form sebelum disimpan pada database
procedure Tf_barang.bfotoClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
if OpenPictureDialog1.FileName <> '' then
begin
foto.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
end;
end;
- Procedure Tf_barang.rgcariClick, digunakan untuk setfocus ke EditText Cari, jadi jika salah satu kategori pencarian atau radio group diklik inputan akan langsung mengarah ke EditText Cari.
procedure Tf_barang.rgcariClick(Sender: TObject);
begin
ecari.SetFocus;
end;
- Procedure Tf_barang.bcariClick, digunakan saat tombol cari diklik. Pencarian data menggunakan perintah SQL Select * from t_barang where…….
procedure Tf_barang.bcariClick(Sender: TObject);
begin
with dm.ZQuery1 do
begin
if rgcari.ItemIndex=-1 then
begin
MessageDlg('Kategori Pencarian Belum Dipilih',mtInformation,[mbOK],0);
exit;
end
else
if rgcari.ItemIndex=0 then
begin
sql.Clear;
sql.Add('select * from t_barang where kd_barang like "%'+ecari.Text+'%"');
open;
if (RecordCount=0) then
begin
MessageDlg('Kode Barang '+ecari.text+' Tidak Ditemukan',mtInformation,[mbOK],1);
formshow(sender);
ecari.Clear;
rgcari.ItemIndex:=-1;
exit;
end
else
gbarang.SetFocus;
end
else
begin
sql.Clear;
sql.Add('select * from t_barang where nm_barang like "%'+ecari.Text+'%"');
open;
if (RecordCount=0) then
begin
MessageDlg('Nama Barang '+ecari.text+' Tidak Ditemukan',mtInformation,[mbOK],1);
formshow(sender);
ecari.Clear;
rgcari.ItemIndex:=-1;
exit;
end
else
gbarang.SetFocus;
end;
end;
end;
- Procedure Tf_barang.gbarangClick, digunakan pada saat grid yang berisi data barang diklik maka data akan langsung ditampilkan pada inputan termasuk foto barang
procedure Tf_barang.gbarangCellClick(Column: TColumn);
begin
tampil;
end;
- Procedure Tf_barang.bexitClick, digunakan pada saat tombol keluar diklik
procedure Tf_barang.bexitClick(Sender: TObject);
begin
bersih;
close;
end;
- Procedure Tf_barang.bhapusClick, digunakan pada saat tombol hapus diklik, untuk menghapus data barang. Namun sebelum data barang dihapus akan tampil dialog apakah data barang akan benar-benar dihapus oleh pengguna. Pada saat menghapus data barang menggunakan perintah SQL Delete from t_barang where ………
procedure Tf_barang.bhapusClick(Sender: TObject);
begin
with dm.ZQuery1 do
begin
if enama.Text='' then
begin
Messagedlg('Data Barang Belum Dipilih',mterror,[MBOK],1);
exit;
end;
if MessageDlg('Apakah Data Barang '+enama.Text+' Akan Dihapus?',mtConfirmation,[mbYes,mbNo],0)=mryes then
begin
DeleteFile(pchar(ExtractFilePath(Application.ExeName)+'\img\'+kb+'.jpg'));
sql.Clear;
sql.Add('delete from t_barang where kd_barang='+QuotedStr(kb));
ExecSQL;
MessageDlg('Data Barang '+enama.Text+' Telah Dihapus',mtInformation,[mbOK],0);
bersih;
FormShow(sender);
exit;
end
else
begin
bersih;
FormShow(sender);
exit;
end;
end;
end;
- Procedure Tf_barang.btambahClick, digunakan pada saat menambah data barang baru. Tombol tambah memiliki fungsi ganda yaitu sebagai tombol batal. Coding pada tombol ini hanya memanggil prosedure sebelunya yang telah kita buat
procedure Tf_barang.btambahClick(Sender: TObject);
begin
if btambah.Caption='&Tambah' then
begin
datalama:=false;
FormShow(sender);
bersih;
aktif;
matik;
end
else
begin
bersih;
FormShow(sender);
mati;
end;
end;
- Procedure Tf_barang.bubahClick, digunakan pada saat kita akan merubah data barang, namun sebelum dapat merubah data barang kita harus memilih data barang yang ingin kita ubah dari DBGrid. Tombol ini juga memiliki fungsi ganda yakni sebagai tombol simpan. Pada saat menyimpan data barang menggunakan perintah SQL Insert into t_barang values……. Sedangkan perintah SQL untuk mengedit data barang adalah Update t_barang set……. Sebelum data dapat kita disimpan terdapat validasi untuk memastikan semua inputan sudah terisi dengan benar
procedure Tf_barang.bubahClick(Sender: TObject);
var plak:string;
begin
with dm.ZQuery1 do
begin
if bubah.Caption='&Ubah' then
begin
if enama.Text = '' then
begin
MessageDlg('Data Barang Belum Dipilih',mtInformation,[mbOK],0);
exit;
end;
datalama:=true;
aktif;
fotolama:=OpenPictureDialog1.FileName;
end
else
begin
if enama.Text = '' then
begin
Messagedlg('Nama Barang Belum Diisi',mterror,[MBOK],1);
enama.SetFocus;
exit;
end;
if ejml.Text = '' then
begin
Messagedlg('Jumlah Barang Belum Diisi',mterror,[MBOK],1);
ejml.SetFocus;
exit;
end;
if csatuan.Text = '' then
begin
Messagedlg('Satuan Barang Belum Dipilih',mterror,[MBOK],1);
csatuan.SetFocus;
exit;
end;
if eharga.Text = '' then
begin
Messagedlg('Harga Barang Belum Diisi',mterror,[MBOK],1);
eharga.SetFocus;
exit;
end;
if foto.Picture.Empty then
begin
Messagedlg('Foto Barang Belum Ada',mterror,[MBOK],1);
enama.SetFocus;
exit;
end;
if datalama=false then
begin
sql.Clear;
sql.Add('select * from t_barang where nm_barang='+QuotedStr(enama.Text));
open;
if not isempty then
begin
Messagedlg('Nama Barang Sudah Ada',mterror,[MBOK],1);
enama.Clear;
enama.SetFocus;
exit;
end;
asalgambar:=OpenPictureDialog1.FileName;
gambar:=ExtractFilePath(Application.ExeName)+'img\';
CopyFile(pchar(asalgambar),pchar(gambar+ekd.Text+ExtractFileExt(OpenPictureDialog1.FileName)),false);
sql.Clear;
sql.Add('insert into t_barang values('+QuotedStr(ekd.Text)+','
+QuotedStr(enama.Text)+','
+QuotedStr(csatuan.Text)+','
+QuotedStr(ejml.Text)+','
+QuotedStr(FormatDateTime('yyyy-mm-dd',dttgl.Date))+','
+QuotedStr(hapusribuan(eharga))+','
+QuotedStr(ekd.Text+ExtractFileExt(OpenPictureDialog1.FileName))+')');
ExecSQL;
MessageDlg('Data Barang Telah Disimpan',mtInformation,[mbOK],1);
bersih;
mati;
formshow(sender);
exit;
end
else
begin
if (enama.Text)<>(nb) then
begin
sql.Clear;
sql.Add('select * from t_barang where nm_barang='+QuotedStr(enama.Text));
open;
if not isempty then
begin
Messagedlg('Nama Barang Sudah Ada',mterror,[MBOK],1);
enama.Clear;
enama.SetFocus;
exit;
end;
end;
if OpenPictureDialog1.FileName <> fotolama then
begin
DeleteFile(pchar(ExtractFilePath(Application.ExeName)+'\img\'+ekd.Text+'.jpg'));
asalgambar:=OpenPictureDialog1.FileName;
gambar:=ExtractFilePath(Application.ExeName)+'img\';
CopyFile(pchar(asalgambar),pchar(gambar+ekd.Text+ExtractFileExt(OpenPictureDialog1.FileName)),false);
end
else
begin
plak:=(ExtractFilePath(Application.ExeName)+'book.jpg');
gambar:=ExtractFilePath(Application.ExeName)+'img\';
if blek=true then
CopyFile(pchar(plak),pchar(gambar+ekd.Text+'.jpg'),false)
else
begin
if RenameFile(gambar+sket,gambar+ekd.Text+'.jpg') then
showmessage('Nama File Foto Barang '+enama.Text+' Telah Diubah')
else
showmessage('Nama File Foto Barang '+enama.Text+' Gagal Diubah');
end;
end;
sql.Clear;
sql.Add('update t_barang set');
sql.Add('nm_barang='+QuotedStr(enama.Text)+',');
sql.add('satuan='+QuotedStr(csatuan.Text)+',');
sql.Add('qty='+QuotedStr(ejml.Text)+',');
sql.Add('tgl_beli='+QuotedStr(FormatDateTime('yyyy-mm-dd',dttgl.Date))+',');
sql.Add('harga='+QuotedStr(hapusribuan(eharga))+' ');
sql.Add('where kd_barang='+QuotedStr(ekd.Text));
ExecSQL;
MessageDlg('Data Barang '+enama.text+' Telah Diubah',mtInformation,[mbOK],1);
bersih;
mati;
formshow(sender);
exit;
end;
end;
end;
end;
Baiklah jika semua prosedure sudah diisi dengan benar jangan lupa Save All dan coba jalankan form yang kita buat dengan menekan tombol F9, jika tidak ada yg error maka akan tampil form barang seperti berikut ini :

Jangan lupa ya diuji coba setiap inputan dan tombol apakah sudah sesuai dengan yang diharapkan.
5. MEMBUAT LAPORAN BARANG
Setelah membuat form barang selanjutnya adalah membuat form untuk menampilkan laporan barang. Buat form baru dan simpan dengan nama u_lap, setelah itu buka kembali form menu utama untuk Use Unit form laporan agar dapat ditampilkan langsung dari menu utama. Kembali lagi ke form laporan barang selanjutnya Use Unit form Data Module, agar dapat menampilkan laporan barang dari database barang. Untuk dapat menampilkan report pada form laporan barang menggunakan komponen QuickReport, caranya klik komponen TQuickRep lalu letakkan pada bagian form yang kosong. Pada TQuickRep ini kita menggunakan empat band, Title digunakan sebagai kop atau header report, ColumnHeader untuk menampilkan keterangan atau header kolom tabel laporan data barang, Detail untuk menampilkan data barang yang ada pada database pada report, sedangkan Page Footer digunakan untuk menampilkan footer report yang biasanya berisi halaman laporan. Untuk dapat menampilkan data barang pada Detail perlu menggunakan TQRDBText sedangankan untuk menampilkan nomor urut pada report gunakan TQRExpr. Pada bagian PageFooter untuk menampilkan halaman report gunakan TQRSysData, lalu ubah properties data ke qrsPageNumber. Baiklah langsung saja kita desain form laporan barang seperti dibawah ini :

Object dan properties yang digunakan pada form laporan barang adalah sebagai berikut :
Nama Object |
Nama Property |
Setting |
Nilai |
Form Laporan Barang |
Align |
Custom |
|
Border style |
bsDialog |
|
Caption |
|
|
Font |
Name |
Segoe UI Light |
Font |
size |
10 |
Name |
f_lap |
|
Label1 |
Caption |
Laporan Barang |
|
Font |
Size |
12 |
Button1 |
Caption |
&Cetak |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
Button2 |
Caption |
&Keluar |
|
Cursor |
crHandPoint |
|
Font |
size |
8 |
QuickReport1 |
Bands |
HasColumnHeader |
True |
HasDetail |
True |
HasPageFooter |
True |
HasTitle |
True |
Dataset |
dm.ZQuery1 |
|
Name |
qr1 |
|
PreviewInitialState |
wsMaximize |
|
ReportTitle |
Laporan Barang |
|
QRLabel1 |
Aligment |
taCenter |
QRLabel1 |
AlignToBand |
True |
QRLabel1 |
caption |
TOKO ALAT TULIS ABADI |
QRLabel1 |
font Size |
12 |
QRLabel2 |
Aligment |
taCenter |
QRLabel2 |
AlignToBand |
True |
QRLabel2 |
caption |
LAPORAN BARANG |
QRLabel3 |
Aligment |
taCenter |
QRLabel3 |
AlignToBand |
True |
QRShape1 |
Height |
30 |
QRShape1 |
Width |
46 |
QRShape2 |
Height |
30 |
QRShape2 |
Width |
110 |
QRShape3 |
Height |
30 |
QRShape3 |
Width |
173 |
QRShape4 |
Height |
30 |
QRShape4 |
Width |
71 |
QRShape5 |
Height |
30 |
QRShape5 |
Width |
71 |
QRShape6 |
Height |
30 |
QRShape6 |
Width |
125 |
QRShape7 |
Height |
30 |
QRShape7 |
Width |
87 |
QRlabel4 |
caption |
NO. |
QRlabel4 |
font Style |
fsBold |
QRlabel5 |
caption |
KODE BARANG |
QRlabel5 |
font Style |
fsBold |
QRlabel6 |
caption |
NAMA BARANG |
QRlabel6 |
font Style |
fsBold |
QRlabel7 |
caption |
JUMLAH |
QRlabel7 |
font Style |
fsBold |
QRlabel8 |
caption |
SATUAN |
QRlabel8 |
font Style |
fsBold |
QRlabel9 |
caption |
TGL. PEMBELIAN |
QRlabel9 |
font Style |
fsBold |
QRlabel10 |
caption |
HARGA |
QRlabel10 |
font Style |
fsBold |
QRShape8 |
Height |
30 |
QRShape8 |
Width |
46 |
QRShape9 |
Height |
30 |
QRShape9 |
Width |
110 |
QRShape10 |
Height |
30 |
QRShape10 |
Width |
173 |
QRShape11 |
Height |
30 |
QRShape11 |
Width |
71 |
QRShape12 |
Height |
30 |
QRShape12 |
Width |
71 |
QRShape13 |
Height |
30 |
QRShape13 |
Width |
125 |
QRShape14 |
Height |
30 |
QRShape14 |
Wight |
87 |
QRExpr1 |
alignment |
taRightJustify |
Expression |
count |
Master |
qr1 |
QRDBText1 |
Alignment |
taLeftJustify |
Datafield |
kd_barang |
Dataset |
Dm.ZQuery1 |
QRDBText2 |
Alignment |
taLeftJustify |
Autosize |
false |
Datafield |
nm_barang |
Dataset |
Dm.ZQuery1 |
QRDBText3 |
Alignment |
taRightJustify |
Datafield |
qty |
Dataset |
Dm.ZQuery1 |
QRDBText4 |
Alignment |
taLeftJustify |
Datafield |
satuan |
Dataset |
Dm.ZQuery1 |
QRDBText5 |
Alignment |
taLeftJustify |
Datafield |
tgl_beli |
Dataset |
Dm.ZQuery1 |
QRDBText6 |
Alignment |
taRightJustify |
Datafield |
harga |
Dataset |
Dm.ZQuery1 |
QRLabel11 |
Caption |
Halaman : |
QRSysData1 |
Alignment |
taRightJustify |
Data |
qrsPageNumber |
Desain laporan sudah beres jangan lupa Save All, setelah itu baru kita melangkah untuk mengisi codingnya. Coding form laporan barang sangat singkat hanya ada dua prosedure, yaitu presedure tombol cetak klik dan prosedure tombol keluar klik
- Tf_lap.bexitClick, prosedure ini untuk menutup atau keluar dari form cetak laporan barang, isinya sangat gampang cukup satu kata saja, yaitu close;
- Tf_lap.bcetakClick, prosedure ini untuk mencetak atau menampilkan report data barang menggunakan QuickReport. Terdapat perintah SQL pada prosedure ini, SQLnya sangat sederhana hanya menggunakan Select * from t_barang
procedure Tf_lap.bcetakClick(Sender: TObject);
begin
with dm.ZQuery1 do
begin
sql.Clear;
sql.Add('select * from t_barang');
open;
qrlabel3.Caption:='Per '+FormatDateTime('dd mmmm yyyy',now());
qr1.Preview;
end;
end;
Gampang bukan prosedure pada form laporan barang, jika sudah selesai jangan lupa Save All. Untuk lebih memperindah tampilan form laporan barang dapat diperkecil, jangan takut tidak akan mengganggu tampilan report kok, jika diperkecil tampilan form laporan barang hasilnya seperti ini.

Lalu test runing hasil dari laporan barang seperti dibawah ini

Jika sudah sesuai berarti Anda telah dapat membuat aplikasi database sederhana dengan delphi. Mantaaaaaaaaaap 😉
Untuk contoh aplikasi ini secara lengkap nanti akan saya share, karena aplikasi ini masih digunakan untuk praktek murid saya di SMK. Mohon kritik dan sarannya, jika ada yang kurang tepat dalam penyampaian tutorial ini langsung saja komen yaaaaa, nanti komennya langsung akan saya jawab. Terimakasih, belum pintar kalo belum sharing.