Home, Forum diskusi, Chatting, Download


Database dan Data Kontrol

Mulai modul ini kita akan bekerja dengan database, sebagai dasar dari proses belajar, anda harus memahami dasar dari database dan model database relational.

Suatu database merupakan koleksi dari informasi yang berhubungan dengan subjek atau fungsi tertentu, seperti menangani nilai-nilai ujian mahasiswa atau menangani suatu daftar koleksi musik. Jika database anda tidak tersimpan dalam komputer, maka anda harus menangani informasi tersebut dari berbagai sumber dan mengkoordinir serta mengorganisasinya sendiri.

Dengan mengunakan suatu Sistem Manajemen Database (DBMS) anda dapat menempatkan database anda dalam suatu file, dan mengorganisasikannya menjadi tabel-tabel, dan mengkoordinir data tersebut menjadi laporan dengan berbagai fasilitas seperti Form, Query, Report.

Konsep Database Relational

Model relational merupakan standar untuk rancangan database, dimana database disimpan dan ditampilkan sebagai suatu koleksi dari tabel-tabel.

Suatu struktur didefinisikan dengan membuat relasi antar tabel, kaitan data antar tabel ini di dalam database merupakan model dari relationship.

Adapun model database relational menawarkan keuntungan sebagai berikut :

Suatu relational database manajemen sistem (RDBMS) adalah software yang memungkinkan anda untuk menampilkan data anda pada suatu model relational. Database-database Relational mendukung suatu bahasa standar yang dikenal sebagai Structured Query Language (SQL). SQL telah berkembang menjadi suatu bahasa yang comprehensive untuk pengendalian dan interaksi dengan suatu sistem manajemen database (DBMS). SQL adalah suatu standar yang disetujui oleh American National Standards Institute (ANSI). Database Northwind (Nwind.mdb) adalah suatu contoh database relational yang ada pada  Microsoft Access dan Visual Basic.

Tabel

Model database relational menampilkan data sebagai suatu koleksi dari tabel-tabel. Suatu tabel adalah pengelompokan secara logika dari informasi yang berhubungan. Sebagai contoh, pada database Northwind memiliki suatu daftar dari tabel-tabel karyawan, pelanggan, order. Tabel-tabel dibentuk oleh baris-baris dan kolom-kolom. Baris-baris sering disebut sebagai record-record dan kolom-kolom disebut sebagai field-field.

Record

Suatu record mengandung informasi dari suatu isian tunggal dalam suatu tabel. Sebagai contoh, sebuah record dalam suatu tabel Karyawan akan mengandung informasi dari karyawan-karyawan.

Field

Suatu record dibentuk oleh banyak field. Setiap field dalam suatu record mengandung suatu potongan tunggal dari informasi tentang record. Sebagai contoh, suatu record Karyawan memiliki No Induk Karyawan, Nama, Marga dan yang lainnya.

Key

Untuk secara unik mengenali suatu baris (record), setiap tabel harus memiliki suatu primary key. Primary key adalah suatu field, atau konbinasi dari field-field, yang mana nilainya bersifat unik untuk tiap baris atau record dalam tabel. Sebagai contoh, field Nomor Induk Karyawan adalah primary key untuk tabel Karyawan. Tidak ada dua karyawan yang memiliki Nomor Induk yang sama.

Suatu tabel dapat mengandung field yang merupakan  foreign key. Suatu foreign key "menunjuk pada" suatu field primary key pada tabel yang berhubungan. Sebagai contoh, pada database Northwind, Tabel Pesanan mengandung suatu field Nomor Pelanggan. Setiap Nomor Pelanggan pada tabel Order menunjukkan Pelanggan yang melakukan Pesanan tersebut.

Hubungan antara tabel Pesanan dan Pelangan adalah one-to-many relationship—yang mana adalah, setiap pelanggan dapat melakukan lebih dari satu pesanan.

Index

Untuk mempercepat akses, banyak database menggunakan index. Data tabel yang terindex berurut akan lebih cepat pencariaannya dibandingkan dengan tabel. Setiap isi index menunjuk ke posisi ditabelnya.

Membuat Database dengan Visual Data Manager

Pada Visual Basic, anda dapat membuat database dengan menggunakan Visual Data Manager yang dapat diaktifkan dari menu Add Ins, Visual Data Manager.

Membuat Database anda yang pertama

  1. Dari menu File, pilih New, Microsoft Access, Version 7.0
  2. Tentukan lokasi penyimpanan dan nama database anda, misalnya Indoprog.mdb

Selanjutnya akan ditampilkan dua jendela yaitu :

  1. Database Window, menunjukan koleksi dari database anda
  2. SQL Statement, tempat anda mengetikkan bahasa SQL

Membuat Tabel anda yang pertama

  1. Klik kanan pada "Properties" yang berada pada Database Window
  2. Pilih New Table, sehingga akan muncul kotak dialog Table Structure

  1. Pada Table Name ketikkan nama tabel yang ingin anda buat, misalnya Forum
  2. Klik pada Add Field untuk mengetikkan field-field tabel anda, dan akan muncul kotak dialog Add Field, Name ketikkan nama field anda, pilihlah Type data yang bersesuaian dan ukuran dari field tersebut

Anda dapat menentukan apakah field tersebut adalah AutoIncrField (untuk type Long), AllowZeroLength (untuk type Text), Required.

Klik pada Ok, dan lakukan hal yang sama untuk field berikutnya, jika telah selesai klik pada Close.

  1. Langkah selanjutnya adalah membuat Primary Key untuk tabel anda dengan melakukan klik pada tombol Add Index. Pada Name ketikkan nama Index, dan double klik pada field yang ingin di Index pada kotak Available Fields.

Anda dapat menentukan option Primary, Unique dan IgnoreNulls, klik OK jika telah selesai, dan akhirnya Close.

  1. Akhirnya klik pada Build The Table.

Mengetik data pada Visual Data Manager

  1. Pilih jenis Table type recordset
  2. Pada Database Windows klik kanan pada tabel yang ingin anda ketik datanya. Dalam hal ini adalah tabel Forum, dan pilih Open, klik Add dan mulai mengetikkan data anda, dan akhirnya Update.

Membuat Relasi antar database

Sesuai dengan konsep database relational, tentu saja tabel-tabel didalam suatu database memiliki link berdasarkan field tertentu yang bertindak sebagai foreign key dan primary key.

Pada database yang telah kita buat pada Latihan 1, adapun relasi antar tabel tersebut adalah sebagai berikut :

Tabel Aktifitas berisi data aktifitas peserta dimana seorang Peserta dapat mengikuti lebih dari satu forum Diskusi, dan sebuah forum diskusi dapat diikuti oleh lebih dari satu peserta, dan status Peserta pada masing-masing forum diskusi dapat berbeda-beda.

Tabel Aktifitas

Nama Field (Foreign key) Foreign Tabel Foreign Field
Email Peserta Email
ForumID Forum ForumID
Status Status Status

Untuk membuat Relasi antar tabel pada Visual Data Manager anda dapat menggunakan Bahasa SQL yang diketikan pada jendela SQL Language dan kemudian di Execute.

Adapun DDL (Data Definition Language)  SQL untuk membuat Relasi antar tabel adalah sebagai berikut :

ALTER TABLE table ADD CONSTRAINT name
    FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]

dimana :

table Nama tabel
name Nama Constraint yang akan dibuat
ref Nama field yang akan dibuat relasi
foreigntable Nama foreign table
foreignfield Nama foreign field

Contoh :

ALTER TABLE Aktifitas ADD CONSTRAINT AktifitasEmail FOREIGN KEY (Email) REFERENCES Peserta (Email);
ALTER TABLE Aktifitas ADD CONSTRAINT AktifitasForumID FOREIGN KEY (ForumId) REFERENCES Forum (ForumId);
ALTER TABLE Aktifitas ADD CONSTRAINT AktifitasStatus FOREIGN KEY (Status) REFERENCES Satus (Status);

Jika dibuka dengan Relationship pada Microsoft Access maka hasil perintah SQL diatas akan membuat relasi antar tabel sebagai berikut :

Mengenal Data kontrol

Data kontrol merupakan kontrol standar yang disediakan pada Visual Basic untuk digunakan untuk membuat aplikasi database sederhana. Data kontrol merupakan suatu lapisan yang menghubungkan data dengan user interface.

Properti pada Data kontrol

Properti Keterangan
Align Menentukan pemerataan kontrol pada Form (0-None, 1- Top, 2 - Bottom, 3 - Left, 4 - Right)
BOFAction Menentukan metoda yang akan otomatis diaktifkan ketika posisi pointer mencapai BOF (1 - MoveFirst, 0 - BOF)
Caption Menentukan tulisan pada data kontrol
Access Menentukan jenis software file database (Access, dBaseIII, dBaseIV, dll) sebagai sumber data
DatabaseName Menentukan path dan nama database file yang akan digunakan sebagai sumber data
DefaultCursorType Menentukan jenis kursor yang digunakan (0 - DefaultCursor, 1 - ODBCCursor, 2 - ServerSideCursor)
DefaultType Menentukan jenis data yang digunakan (2 - UseJext, 1 - UseODBC)
EOFAction Menentukan metoda yang akan otomatis diaktifkan ketika posisi pointer mencapai BOF (1 - MoveLast, 0 - EOF,2-AddNew)
Exclusive Menentukan modus pengaktifan database secara Share atau Exclusive (False, True)
ReadOnly Menentukan apakah recordset adalah readonly atau tidak (False, True)
RecordsetType Menentukan jenis recordset yang akan digunakan (1-Dynaset, 0-Table, 2-Snapshot)
RecordSource Menentukan sumber data untuk recordset, dapat berupa nama tabel maupun bahasa SQL (khusus untuk Dynaset dan Snapshot)

Memahami Jenis RecordSet

Visual Basic menerima dan menampilkan record  dari database dengan menggunakan objek Recordset. Recordset menampilkan record dari suatu Tabel atau record yang merupakan hasil Query (SQL). Ada tiga jenis recordset yang dapat ditentukan pada properti RecordSetType pada data control, adapun ketiga jenis recordset tersebut adalah sebagai berikut :

Jenis Recordset Keterangan
Table Suatu himpunan dari record yang diambil dari suatu tabel tunggal database. Anda dapat menambah, mengubah, atau menghapus record pada jenis recordset ini.
Dynaset Suatu himpunan dari record secara dinamis yang di ambil dari suatu tabel tunggal maupun hasil Query (SQL) dari satu atau lebih tabel. Anda dapat menambah, mengurangi, atau menghapus record pada jenis recordset ini, dan perubahan akan mempengaruhi tabel yang bersangkutan.
Snapshot Suatu himpunan dari record yang merupakan duplikasi secara statis. Anda dapat menggunakan recordset jenis ini untuk mencari data, dan membuat laporan. Recorset  Snapshot dapat mengandung field dari satu atau lebih tabel yang tidak dapat di update.

Anda dapat memilih jenis objek Recordset yang ingin anda gunakan pada Property (RecordsetType), dan nilai defaultnya adalah vbDynasetType.

Catatan :

Pada Dynaset dan Snapshot, recordset disimpan pada memori lokal, jika aplikasi anda tidak menggambil data lebih dari satu tabel, ataupun sumber data non-ODBC, maka Recordset jenis Table merupakan pilihan yang baik dari segi kecepatan dan efisiensi pemakaian memori.

Metoda-metoda pada Data Kontrol

Sebagaimana objek-objek standar lainnya, objek Data kontrol menyediakan berbagai metoda yang dapat anda gunakan.

Bergerak dalam RecordSet

Metoda Fungsi
MoveFirst Memindahkan keaktifan pointer ke awal recordset
MoveLast Memindahkan keaktifan pointer ke akhir recordset
MovePrevious Memindahkan keaktifan pointer ke record sebelumnya
MoveNext Memindahkan keaktifan pointer ke record berikutnya

Contoh :

Data1.Recordset.MoveFirst

Mencari suatu record tertentu

Untuk RecordSet jenis Dynaset dan SnapShot

Metoda Fungsi
FindFirst kriteria Mencari record pertama yang memenuhi kriteria
FindLast kriteria Mencari record terakhir yang memenuhi kriteria
FindNext kriteria Mencari record berikutnya yang memenuhi kriteria
FindPrevious Kriteria Mencari record sebelumnya yang memenuhi kriteria

Contoh :

Data1.Recordset.FindFirst "Email = 'hendra@indoprog.com'"

Untuk RecordSet jenis Table

Pada recordset jenis table anda dapat menggunakan metoda Seek, tetapi sebelumnya anda perlu menentukan index yang digunakan dengan properti index

Data1.RecordSet.Index = NamaIndex

Data1.RecordSet.Seek perbandingan, key1, key2, ...

Perbandingan Keterangan
"=" Sama dengan
">=" Lebih besar atau sama
">" Lebih besar
"<=" Lebih kecil atau sama
"<" Lebih kecil

Contoh :

Data1.Recordset.Index = "P_Key"
Data1.Recordset.Seek "=","hendra@indoprog.com"

Memeriksa hasil pencarian record

Anda dapat menggunakan properti NoMatch untuk memeriksa hasil pencarian dengan metoda Find maupun metoda Seek.

Contoh

Data1.Recordset.FindFirst "Email = 'hendra@indoprog.com'"
If Data1.Recordset.NoMatch Then
   MsgBox "Peserta belum terdaftar !"
Else
   MsgBox "Peserta telah terdaftar !"
End If

atau 

Data1.Recordset.Index = "P_Key"
Data1.Recordset.Seek "=","hendra@indoprog.com"
If Data1.Recordset.NoMatch Then
   MsgBox "Peserta belum terdaftar !"
Else
   MsgBox "Peserta telah terdaftar !"
End If

Menandai posisi record

Untuk menyimpan posisi record anda dapat menggunakan properti bookmark.

Contoh :

Dim MyBookMark As Variant
MyBookMark = Data1.RecordSet.Bookmark
Data1.RecordSet.MoveFirst
Data1.RecordSet.Bookmark = MyBookMark

Mengambil nilai field dari record aktif

Jika suatu kontrol di bound pada data kontrol, maka kontrol tersebut akan menampilkan nilai field dari record yang sedang aktif.

Untuk mengambil nilai field dari record yang sedang aktif secara koding, anda dapat menggunakan salah satu cara berikut :

Data1.Recordset.Fields(0).Value ' Mengacu pada nilai pada field pertama
n = 0 ' Mengacu tidak langsung dengan suatu field number.
Data1.Recordset.Fields(n) ' Mengacu pada nilai pada field pertama.
Data1.Recordset.Fields("FName") ' Mengacu pada FName field.
string$ = "FName" ' Mengacu tidak langsung dengan nama field.
Data1.Recordset.Fields(string$) ' Mengacu pada FName field
Data1.Recordset("FName") ' Mengacu kepada field sebagai collection default.
Data1.Recordset(n) ' Mengacu kepada field sebagai collection default.

Contoh :

Debug.Print Data1.Recordset("Email")

Mengubah nilai field dari record aktif

Jika suatu kontrol di bound pada data kontrol, maka perubahan nilai pada kontrol tersebut akan mempengaruhi isi field yang bersangkutan ketika posisi record pointer berpindah, maupun ketika dilakukan proses update dengan metoda UpdateRecord.

Contoh :

Private Sub cmdUpdate_Click()
Data1.UpdateRecord
End Sub

Untuk mengubah nilai field dari record yang sedang aktif secara koding, anda dapat melakukan langkah sebagai berikut :

  1. Posisikan current record ke record yang akan diedit.

  2. Tentukan nilai baru kefield yang mau diubah

  3. Gunakan method Update atau method Move, Find, atau Seek.

Contoh :

Data1.Recordset.Edit
Data1.Recordset("Email") = "hendra@indoprog.com"
...
Data1.RecordSet.Update

Menambah record baru ke recordset

Anda dapat menggunakan prilaku properti EOFAction untuk secara otomatis menambahkan record baru ketika posisi record pointer berada di EOF, anda dapat segera mengetikkan data pada kontrol-kontrol yang dibound pada kontrol data tersebut, dan memindahkan keaktifan record pointer untuk proses update, ataupun menggunakan metoda UpdateRecord.

Secara koding anda dapat melakukan langkah berikut untuk menambahkan record baru ke recordset :

  1. Membuat suatu record baru dengan method AddNew. Current record pointer disimpan dan berpindah ke record baru.

  2. Tentukan nilai baru untuk record baru.

  3. Simpan record baru dengan method Update.

Contoh :

Data1.Recordset.AddNew
Data1.Recordset("Email") = "hendra@indoprog.com"
...
Data1.RecordSet.Update

Catatan :

Setelah update, posisi record pointer akan dikembalikan keposisi sebelum record baru tersebut ditambah. Untuk membuat posisi record berada di record baru tersebut anda dapat menggunakan bookmark yang diset ke lastmodified.

Contoh :

Data1.Recordset.AddNew
Data1.Recordset("Email") = "hendra@indoprog.com"
...
Data1.RecordSet.Update
Data1.RecordSet.Bookmark = Data1.Recordset.LastModified

Menghapus record yang sedang aktif

Untuk menghapus seluruh record, posisikan ke record yang akan dihapus, dan gunakan method Delete. Sesaat setelah record tersebut dihapus, maka record tersebut menjadi invalid, sehingga anda harus menggunakan MoveNext untuk memindahkan posisi setelah setiap penghapusan.

Contoh :

Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.Eof Then
   Data1.Recordset.MoveLast
End If

Melakukan refresh data pada Recordset

Anda dapat menggunakan metoda Refresh untuk menutup dan membentuk ulang isi Recordset.

Contoh :

Data1.Refresh

Menutup suatu Recordset

Method Close menutup recordset dan membebaskan resource yang dialokasikan padanya. Usaha untuk melakukan suatu metode atau akses pada element dari recordset yang telah terhapus akan menghasilkan kesalahan.

Contoh :

Data1.Recordset.Close

Database dan recordset akan secara otomatis tertutup ketika :

  1. Anda menggunakan method Close terhadap recordset tertentu.

  2. Form yang mengandung data control di unload

  3. Program menjalankan statement End.

Event Pada Data Kontrol

Event Error

Event Error akan dibangkitkan ketika terjadi kesalahan pada data kontrol yang bukan disebabkan oleh koding yang menggunakan perintah Visual Basic.

Private Sub Data1_Error(DataErr As Integer, Response As Integer)

End Sub

Anda dapat mendapatkan nomor kesalahan dengan mengevaluasi nilai DataErr, dan menentukan Response terhadap kesalahan tersebut (vbDataErrContinue, vbDataErrDisplay) apakah diabaikan atau ditampilkan.

Contoh :

Private Sub Data1_Error(DataErr As Integer, Response As Integer)
Select case DataErr
    Case 3163
         MsgBox "Panjang data melebihi ukuran field"
         Response = vbDataErrContinue
    Case Else
         Response = vbDataErrDisplay
End Select
End Sub

Event Reposition

Event ini terjadi ketika suatu record menjadi Current position.

Private Sub Data1_Reposition()

End Sub

Contoh berikut akan mengunci semua textbox dari perubahan ketika terjadi event reposition.

Private Sub Data1_Reposition()
txtForumID.Locked = True
txtKeterangan.Locked = True
txtAlamat.Locked = True
End Sub

Event Validate

Event ini terjadi sebelum perubahan dilakukan terhadap yang sedang aktif seperti metoda update, delete ataupun close. 

Private Sub Data1_Validate(Action As Integer, Save As Integer)

End Sub

Anda dapat melakukan evaluasi terhadap Action untuk mendapatkan aksi yang membangkitkan event Validate tersebut, misalnya vbDataActionAddNew, vbDataActionBookmark, vbDataActionCancel, dll.

Latihan 1, Membuat Database dengan Visual Data Manager

Latihan 2, Membuat Relasi antar tabel dalam Database dengan SQL

Latihan 3, Menggunakan Data Kontrol untuk pengolahan data

Latihan 4, Tantangan Pemrograman


Dibuat  oleh hendra@indoprog.com
Medan - Sumatera Utara
Indonesia