![]() |
![]() |
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.
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.
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.
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.
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.
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.
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
Selanjutnya akan ditampilkan dua jendela yaitu :
Membuat Tabel anda yang pertama
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.
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.
Mengetik data pada Visual Data Manager
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.
Nama Field (Foreign key) | Foreign Tabel | Foreign Field |
Peserta | ||
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 :
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 | 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) |
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.
Sebagaimana objek-objek standar lainnya, objek Data kontrol menyediakan berbagai metoda yang dapat anda gunakan.
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
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'"
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"
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
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
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 |
Contoh :
Debug.Print Data1.Recordset("Email")
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 :
Posisikan current record ke record yang akan diedit.
Tentukan nilai baru kefield yang mau diubah
Contoh :
Data1.Recordset.Edit
Data1.Recordset("Email") = "hendra@indoprog.com"
...
Data1.RecordSet.Update
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 :
Membuat suatu record baru dengan method AddNew. Current record pointer disimpan dan berpindah ke record baru.
Tentukan nilai baru untuk record baru.
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
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
Anda dapat menggunakan metoda Refresh untuk menutup dan membentuk ulang isi Recordset.
Contoh :
Data1.Refresh
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 :
Anda menggunakan method Close terhadap recordset tertentu.
Form yang mengandung data control di unload
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 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 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