Wednesday, July 18, 2012

Modul 8. Membuat Form Transaksi Peminjaman Buku dan Hubungan Master Detail Database



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:
  1. ADOtable1 à table pinjam (menyimpan peminjaman)
  2. ADOTable2 à tabel Det_pinjam (menyimpan data buku)
  3. ADOTable3 à table Anggota (bantuan nama Anggota)
  4. 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.

No comments:

Post a Comment