Setelah
cukup familiar dengan pembuatan form yang mengakses tabel MS Access secara
sederhana, maka kali ini kita akan membuat sebuah form Peminjaman Buku yang
akan mengakses beberapa tabel.
Sebelum
lebih jauh dengan pemrograman, maka akan dijelaskan disini gambaran apa yang
terjadi ketika dilakukan peminjaman buku. Data peminjaman akan disimpan dalam
tabel Pinjam dengan atributnya yaitu tgl_pinjam dan siapa yang meminjam buku (ID_Anggota).
Akan
tetapi buku yang dipinjam tidak akan disimpan dalam tabel pinjam, karena buku
yang dipinjam bisa lebih dari satu item dalam satu transaksi peminjaman.
Dalam
Delphi, hal ini bisa diselesaikan dengan metoda Master Detail, yaitu untuk menangani database yang mempunyai hubungan satu ke banyak.
Dalam
hal ini yang akan kita hubungkan adalah tabel pinjam dengan tabel det_pinjam. Data buku dalam satu peminjaman semua akan disimpan dalam tabel det_pinjam yang dihubungkan oleh field ID_Pinjam.
Dalam
frmpinjam, terdapat 4 object ADOTable, yaitu:
- ADOtable1 Ã table pinjam (menyimpan peminjaman)
- ADOTable2 Ã tabel Det_pinjam (menyimpan data buku)
- ADOTable3 Ã table Anggota (bantuan nama Anggota)
- ADOTable4 Ã table Buku (Bantuan Judul Buku).
Setting Master Detail
Seperti
diketahui, baik dalam tabel pinjam maupun tabel Det_Pinjam terdapat field ID_Pinjam. Field inilah
masing-masing yang akan kita gunakan sebagai penghubung kedua tabel tersebut.
Adapun
cara untuk menghubungkan dua tabel adalah sbb:
Setelah
diset masing2 connection dan tablenamenya, untuk ADOTable2
MaterSource
: DataSource1.
Klik
MasterFiled-nya maka akan muncul:
Pilih
ID_Pinjam di kanan dan kiri dan klik Add,
maka kedua table sudah dihubungkan.
Pada
frmPinjam diatas, Data peminjaman ditampilkan di bagian atas
dan data buku-bukunya di DBGrid1 bagian bawah.
Field Lookup.
Seperti
diketahui, pada tabel Det_Pinjam tidak terdapat field Jdl_Buku.
Hanya ID_Buku. Untuk menampilkan field judul buku pada DBGrid1,
harus dibuat field baru yang mengacu ke tabel buku. DblKlik ADOTable2, maka akan muncul
Klik
kanan dan klik New Field, dan isikan sesuai gambar
Kita
pilih Datasetnya ADOTable4 yang mengakses ke tabel Buku. Klik OK maka akan
kita peroleh Field baru dengan nama Judul
Buku (Bukan Jdl_Buku pd tabel Buku)
Pada
DBGrid1, Field ini akan mengikuti field di depannya yaitu ID_Buku
yang akan kita masukkan sebagai input data peminjaman buku.
Alat memilih Buku
Untuk
data buku yang besar, tidak mungkin kita menghapal kode ID_Buku
satu persatu. Maka dari itu akan kita buat suatu cara yaitu dengan memilih saja
dari tabel buku. Untuk itu, pertama kolom ID_Buku pada DBGrid harus kita ubah ButtonStylenya menjadi cbllipsis sehingga bisa diklik.
Caranya
Dblklik DBGrid1, akan muncul form kosong. Klik kanan dan klik Add All Field.
DblKlik
field ID_Buku dan setlah seperti pada gambar:
Setelah
diset, maka jika dirun, khusus kolom ID_Buku akan keluar tombol (…) sebagai alat memilih buku.
Form Pilih Buku
Yang
kita lakukan ketika user mengklik tombol (…) adalah memanggil form pilih buku,
memilih dari tabel buku dan mengisikan ID_Buku hasil pilihan tadi ke dalam Kolom ID_Buku
pada DBGrid1.
Kode
untuk memanggil frmpilihbukupinjam adalah:
procedure
TfrmPinjam.DBGrid1EditButtonClick(Sender: TObject);
begin
frmpilihbukupinjam.Show;
end;
Buatlah
frmpilihbukupinjam seperti gambar:
Kode
untuk frmpilihbukupinjam setelah klik Pilih:
procedure
Tfrmpilihbukupinjam.Button1Click(Sender: TObject);
begin
frmpinjam.ADOTable2.Edit;
frmPinjam.ADOTable2ID_Buku.Value:=ADOTable1ID_Buku.Value;
Close;
end;
catatan:
baik frmpinjam maupun frmpilihbukupinjam
harus
saling mengikut sertakan dengan perintah
uses.
Akhirnya inilah kode lengkap dari pinjamU.pas:
unit PinjamU;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, ComCtrls, ToolWin,
DB, StdCtrls, ADODB, Grids,
DBGrids, ExtCtrls, DBCtrls, Mask;
type
TfrmPinjam = class(TForm)
Panel2: TPanel;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
Button1: TButton;
Button2: TButton;
DataSource1: TDataSource;
MainMenu1: TMainMenu;
ransaksi1: TMenuItem;
PinjamBaru1: TMenuItem;
Hapuspinjam1: TMenuItem;
RekamPinjam1: TMenuItem;
N1: TMenuItem;
ambahBuku1: TMenuItem;
HapusBuku1: TMenuItem;
Panel1: TPanel;
ADOTable2: TADOTable;
DataSource2: TDataSource;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DateTimePicker1: TDateTimePicker;
DBLookupComboBox1: TDBLookupComboBox;
DBNavigator1: TDBNavigator;
Button3: TButton;
DBNavigator2: TDBNavigator;
ADOTable3: TADOTable;
DataSource3: TDataSource;
ADOTable2ID_DetPinjam: TAutoIncField;
ADOTable2ID_Pinjam: TWideStringField;
ADOTable2ID_Buku: TWideStringField;
ADOTable4: TADOTable;
Button4: TButton;
ADOTable2JudulBuku: TStringField;
procedure PinjamBaru1Click(Sender:
TObject);
procedure Hapuspinjam1Click(Sender:
TObject);
procedure RekamPinjam1Click(Sender:
TObject);
procedure ambahBuku1Click(Sender: TObject);
procedure HapusBuku1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure DateTimePicker1Change(Sender:
TObject);
procedure DBGrid1EditButtonClick(Sender:
TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPinjam: TfrmPinjam;
implementation
uses pilihpinjamU;
{$R *.dfm}
procedure
TfrmPinjam.PinjamBaru1Click(Sender: TObject);
begin
if ADOTable1.State
in [dsbrowse] then
ADOTable1.Edit;
ADOTable1.Append;
end;
procedure
TfrmPinjam.Hapuspinjam1Click(Sender: TObject);
begin
ADOTable1.Delete;
end;
procedure
TfrmPinjam.RekamPinjam1Click(Sender: TObject);
begin
ADOTable1.Edit;
ADOTable1.Post;
end;
procedure
TfrmPinjam.ambahBuku1Click(Sender: TObject);
begin
if ADOTable2.State
in [dsbrowse] then
ADOTable2.Edit;
ADOTable2.Append;
end;
procedure
TfrmPinjam.HapusBuku1Click(Sender: TObject);
begin
ADOTable2.Delete;
end;
procedure
TfrmPinjam.Button1Click(Sender: TObject);
begin
if ADOTable2.State
in [dsbrowse] then
ADOTable2.Edit;
ADOTable2.Append;
end;
procedure
TfrmPinjam.Button2Click(Sender: TObject);
begin
ADOTable2.Delete;
end;
procedure
TfrmPinjam.Button3Click(Sender: TObject);
begin
close;
end;
procedure
TfrmPinjam.DateTimePicker1Change(Sender: TObject);
begin
ADOTable1.Edit;
DBEdit2.Text:=DateToStr(DateTimePicker1.Date);
end;
procedure
TfrmPinjam.DBGrid1EditButtonClick(Sender: TObject);
begin
frmpilihbukupinjam.Show;
end;
procedure
TfrmPinjam.Button4Click(Sender: TObject);
begin
if ADOTable2.State in [dsbrowse] then
ADOTable2.Edit;
ADOTable2.Post;
end;
end.