Aplikasi Database
Bab ini akan fokus pada pemrograman database,
menggunakan pustaka ADO.NET, yang merupakan bagian dari .NET Framework. Anda
dapat menganggap pustakan ini sebagai ekstensi dari konsep-konsep database dan
pengikatan database dari Bab 4. Di sini, Anda akan mengintegrasikan pengetahuan
Anda tentang perancangan aplikasi multi-tingkat dengan objek dan database.
5.1 Menciptakan Database
Server
Explorer
Jendela Server
Explorer pada Visual Studio dapat
Anda pakai untuk melihat dan mengelola koneksi-koneksi ke database lokal maupun
database remote. Dari menu VIEW,
pilih Other Windows, kemudian pilih Server
Explorer, untuk membuka jendela ini.
Pada Gambar 5.1, jendela Server Explorer
memuat sebuah koneksi ke database Karate.mdf
yang telah digunakan pada Bab 4. Sebuah koneksi adalah suatu cara untuk
terhubung ke database sehingg Anda dapat memodifikasi perancangan dan data di
dalamnya. Setiap folder pada suatu koneksi memuat sejumlah tipe objek yang
berkaitan dengan database, sebagai berikut:
- Folder Tables yang memuat semua tabel di dalam database.
- Folder Views yang memuat sejumlah view, yang merupakan cara-cara alternatif dalam melihat isi tabel; view sering mengkombinasikan kolom-kolom dari sejumlah tabel yang berbeda ke dalam tabel-tabel baru.
- Tabel Stored Procedures memuat query-query SQL terkompilasi.
Untuk menambahkan sebuah file database pada
jendela Server Explorer, klik kanan pada Data
Connections, pilih Add Connection, dan cari lokasi file. (Server Explorer juga
dapat Anda pakai untuk terhubung ke versi lengkap dari SQL Server, baik pada
mesin lokal maupun pada lokasi jaringan). Anda dapat menambahkan sejumlah
koneksi database pada jendela Server
Explorer. Jendela ini tetap
mempertahankan semua koneksi yang telah Anda ciptakan ketika projek-projek lain
dibuka. Anda dapat menampilkan jendela ini ketika projek dibuka atau tidak.
Menciptakan Database Baru
Anda dapat menciptakan sebuah database baru
pada jendela Server Explorer. Berikut simpulan dasar dari
perintah-perintah dasar yang Anda akan gunakan:
- Buka jendela Server Explorer, klik kanan pada Data Connections, dan pilih Create New SQL Server Database.
- Untuk menambahkan sebuah tabel pada database yang telah ada, klik kanan pada folder Tables di bawah nama database dan pilih Add New Table.
- Untuk menyisipkan data ke dalam tabel yang telah ada, klik kanan pada nama tabel dan pilih Show Table Data.
- Untuk memodifikasi struktur tabel (disebut dengan skema), klik kanan pada nama tabel dan pilih Open Table Definition.
- Untuk mengganti nama tabel, klik kanan pada namanya dan pilih Rename dari menu yang tertampil.
Pada Tutorial 5.1, Anda akan menciptakan
sebuah database yang akan dipakai pada bab ini.
Tutorial 5.1: Menciptakan Sebuah Database SQL Server
Para pemilik rumah selalu punya kebutuhan
untuk memperbaiki apa saja di rumahnya, dan banyak perusahaan yang menawarkan
sejumlah layaran perbaikan rumah. Pengelolaan jadwal perbaikan merupakan
pekerjaan umum untuk perusahaan semacam itu, karena mereka secara kontinyu
memperbarui daftar pelanggannya dan penjadwalan layanan. Perusahaan juga
menawaran pelbagai jenis perbaikan. Oleh karena itu, versi terbatas dari
database perusahaan semacam itu mencakup tabel Pelanggan, tabel JenisPerbaikan,
dan tabel Jadwal. Tabel Konsumen akan menjejak informasi
konsumer seperti ID, nama, dan telepon. Tabel JenisPerbaikan akan memuat deskripsi dari tiap jenis layanan. Tabel
Jadwal akan memuat informasi tentang
jenis layanan yang sedang dikerjakan, deskripsi perbaikan, persyaratan lisensi,
ID konsumen, dan tanggal/waktu jadwal. Nanti pada bab ini, Anda akan
menciptakan sebuah aplikasi yang menampilkan informasi ini. Pada tutorial ini,
Anda akan menciptakan database, menambahkan sebuah tabel Konsumen, dan mendefinisikan DataSet
yeng memuat table adapter yang terkoneksi dengan database. Terakhir, Anda akan
menampilkan tabel Konsumen pada
sebuah kontrol DataGridView.
Langkah-Langkah Tutorial
Langkah 1: Ciptakanlah sebuah project Windows Forms Application dengan nama Layanan Perbaikan1.
Langkah 2: Buka jendela Server Explorer.
Kemudian klik kanan pada Data Connections dan pilih Create New SQL Server Database.
Langkah 3: Pada jendela dialog yang ditampilkan, pilih
NamaKomputer\SQLEXPRESS dari nama
Server. (Namakomputer adalah nama mesin dari komputer Anda). Kemudian, namai
database sebagai LayananPerbaikan.
Contohnya ditampilkan pada Gambar 5.2. Klik OK untuk menutup jendela ini.
Langkah 4: Expansi entri-entri di bawah LayananPerbaikan1.dbo, yaitu entri di
bawah Data Connections pada jendela Server
Explorer. Klik kanan pada folder Tables dan pilih Add New Table. Ini akan menampilkan sebuah
jendela editor tabel, seperti ditunjukkan pada Gambar 5.3.
Langkah 5: Klik di bawah kepala Column Name dan sisipkan
kolom-kolom database seperti ditunjukkan pada Gambar 5.4. Klik kanan pada kolom
IdKonsumen dan sisipkan Set Primary Key dari menu yang
tertampil.
Langkah 6: Tutup jendela designer dan simpan tabel.
Ketika diminta sebuah nama, seperti pada Gambar 5.5, namai dengan Konsumen dan klik tombol OK untuk
menyimpan nama tabel.
Langkah 7: Pad jendela Server Explorer, klik
kanan pada tabel Konsumen dan pilih Show
Table Data. Pada jendela yang ditampilkan, masukkan data seperti
ditunjukkan pada Gambar 5.6.
Menciptakan Sebuah DataSet
Selanjutnya, Anda akan menciptakan sebuah
dataset dengan nama LayananPerbaikanDataSet.
Langkah 8: Buka jendela Data Sources dan
tambahkan sebuah sumber data baru yang menghubungkan ke tabel Konsumen pada database Anda. Jika ada
koneksi database yang telah ada, gunakan itu daripada menciptakan yang baru.
Namai DataSet dengan LayananPerbaikanDataSet.
Langkah 9: Pada Solution
Explorer, buka file LayananPerbaikanDataSet.xsd. Pada
jendela designer, Anda akan melihat tabel Konsumen
dan KonsumenTableAdapter.
Selanjutnya, Anda akan menampilkan tabel Konsumen
pada sebuah kontrol DataGridView,
untuk memverifikasi bahwa sumber data telah diciptakan dengan benar.
Langkah 10: Ganti nama form startup dari projek dengan
nama FormKonsumen.vb.
Langkah 11: Buka jendela design untuk FormKonsumen dan tetapkan properti Text-nya menjadi Konsumen.
Langkah 12: Tambahkan sebuah kontrol DataGridView dengan nama dgvKonsumen pada form dan lekatkan
tabel Konsumen pada LayananPerbaikanDataSet. Tetapkan
properti Dock dari kontrol grid itu
menjadi Fill, dan tetapkan
properti-properti lain sesuai dengan keinginan Anda.
Langkah 13: Jalankan aplikasi. Tabel Konsumen akan ditampilkan seperti pada
Gambar 5.7.
Tutorial 5.2: Menambahkan Tabel Jadwal Pada Database
LayananPerbaikan1
Tentu database umumnya memiliki lebih dari
satu tabel untuk merepresentasikan datanya. Pada tutorial ini, Anda akan
menambahkan sebuah form Penjadwalan yang menampilkan jadwal-jadwal pada sebuah
grid. Anda juga akan menambahkan sebuah tabel dengan nama Jadwal pada database LayananPerbaikan1. Tabel ini akan
memuat informasi berikut tentang jadwal-jadwal perbaikan rumah:
- IdJadwal: sebuah nomor ID unik.
- IdJenis: mengidentifikasi jenis perbaikan yang dilakukan.
- Deskripsi: sebuah deskripsi dari perbaikan.
- Lisensi: bidang true/false yang mengindikasikan apakah tukang berlisensi yang diperlukan.
- IdKonsumen: nomor ID konsumen.
- Terjadwal: tanggal dan waktu kapan perbaikan dijadwalkan.
Langkah-Langkah
Tutorial
Langkah 1: Buka projek Layanan Perbaikan dari
Tutorial 5.1.
Langkah 2: Pada jendela Server Explorer, klik
kanan pada folder Tables di bawah
nama database dan pilih Add New Table. Tabel ini akan diberi nama Jadwal.
Langkah 3: Pada jendela editor, tambahkan kolom-kolom
seperti ditunjukkan pada Gambar 5.8. Kemudian pilih kolom IdJadwal dan tetapkan properti Is
Identity menjadi True pada panel
bawah, seperti ditunjukkan pada Gambar 5.9. Tetapkan Identity Seed menjadi
1000, dan Identity Increment menjadi 1. Klik kanan pada
kolom IdJadwal dan jadikan ia
sebagai primary key. Tutup jendela
dan simpan.
Langkah 4: Pada jendela Server Explorer, klik
kanan pada tabel Jadwal dan pilih Show Table Data. Kemudian
masukkan data seperti ditunjukkan pada Gambar 5.10a.
Langkah 5: Tambahkan tabel Jadwal pada LayananPerbaikanDataSet
dengan menggeretnya dari jendela Server
Explorer ke jendela designer untuk LayananPerbaikanDataSet.xsd, seperti
ditunjukkan pada Gambar 5.10b berikut:
Langkah 6: Tambahkan form baru pada projek dengan nama
FormJadwal.vb. Tetapkan properti Text-nya menjadi Jadwal. Tambahkan sebuah kontrol DataGridView dengan nama dgvJadwal
pada form dan lekatkan pada tabel Jadwal di dalam LayananPerbaikanDataSet. Tetapkan properti Dock menjadi Fill.
Langkah 7: Ubah startup form dari aplikasi menjadi FormJadwal.vb.
Langkah 8: Simpan projek dan jalankan aplikasi. Anda
akan melihat tabel Jadwal pada
sebuah kontrol DataGridView, seperti
terlihat pada Gambar 5.10c. Tutup jendela aplikasi.
Tutorial 5.3: Menambahkan Tabel JenisPerbaikan pada database
LayananPerbaikan1
Pada tutorial
ini, Anda akan menambahkan sebuah tabel baru dengan nama JenisPerbaikan pada database LayananPerbaikan1.
Tabel ini akan memuat sejumlah nomor ID yang menghubungkannya ke tabel Jadwal.
Langkah 1: Buka projek yang telah dibuat pada Tutorial 5.1 dan
Tutorial 5.2.
Langkah 2: Pada jendela Server
Explorer, klik kanan pada folder Tables di bawah nama database dan pilih
Add New Table.
Langkah 3: Pada jendela New
Table, namai tabel sebagai JenisPerbaikan dan tambahkan
kolom-kolom seperti ditunjukkan pada Tabel 5.1. Tutup jendela untuk menyimpan
perubahan.
Langkah 4: Pada jendela Server
Explorer, klik kanan pada tabel JenisPerbaikan dan pilih Show Table Data. Kemudian masukkan data
yang ditunjukkan pada Gambar 5.11.
Relasi One-to-Many
Relasi one-to-many dilakukan terhadap dua
tabel database ketika kunci primer dari salah satu tabel terhubung ke sebuah
kolom (atau yang dinamakan dengan kunci asing atau foreign key) pada tabel
lain. Sebagai contoh, tabel Konsumen
dan tabel Jadwal memiliki relasi
seperti ditunjukkan pada Gambar 5.12.
Tanda tak-hingga di dekat kolom IdKonsumen pada tabel Jadwal
mengimplikasikan bahwa ID konsumen dapat terjadi beberapa kali pada tabel ini.
Ini merupakan sisi many dari relasi. Simbol kunci di sisi lain yang menyentuh
tabel Konsumen mengindikasikan bahwa IdKonsumen
merupakan kunci primer pada tabel itu. Ini merupakan sisi one dari relasi.
Ketika sebuah relasi one-to-meny terjadi
antara dua tabel, tabel di sisi one disebut dengan tabel induk atau parent table. Tabel di sisi many disebut dengan tabel anak atau child table. Pada
contoh ini, Konsumen adalah tabel
induk dan Jadwal adalah tabel anak.
Relasi one-to-many berguna ketika aplikasi-aplikasi
perlu mencari baris-baris tabel anak yang cocok dengan baris-baris pada sebuah
tabel induk. Jika diberikan ID konsumen tertentu, misalnya, Anda dapat mencari
semua jadwal yang berkaitan dengan konsumen ini. SQL Server juga dapat
menggabungkan tabel-tabel, menggunakan kolom-kolom yang didefinisikan pada
relasi one-to-many.
Kekangan Database
Kekangan database adalah sebuah aturan yang
disisipkan ke dalam database oleh perancang database. Kekangan membantu menjaga
integritas data dengan mencegah terjadinya error akibat kesalahan penyisipan,
modifikasi, dan penghapusan data. Kekangan membantu para programer untuk
menjaga dan memverifikasi integritas data. Daripada menyisipkan
statemen-statemen validasi ke setiap aplikasi yang menggunakan database, adalah
lebih efisien untuk menanamkan kekangan-kekangan ke dalam database.
Kekangan
kunci primer mensyaratkan
bahwa semua nilai pada sebuah kunci primer harus unik. Jika user mencoba
menambahkan sebuah baris tabel yang memuat nilai kunci primer yang telah ada di
dalam tabel, maka database akan memberitahu bahwa kekangan kunci primer
dilanggar. Baris tidak akan ditambahkan ke dalam database. Sebagai contoh, jika
Anda ingin menambahkan sebuah baris baru yang memuat IdKonsumen = 103 pada tabel Konsumen, maka kekangan kunci primer
telah dilanggar dan pesan seperti ditunjukkan pada Gambar 5.13 akan
ditampilkan.
Kekangan pemeriksaan kolom adalah sebuah aturan yang mendefinisikan apakah data valid ketika menambahkan atau memperbarui sebuah entri di dalam suatu tabel. Kekangan ini diterapkan pada tiap baris tabel. Ia melibatkan satu atau lebih nilai kolom. Sebagai contoh, nilai-nilai yang ditugaskan pada sebuah kolom Gaji harus bernilai positif. Selain itu, tipe data dari data yang disisipkan harus sesuai dengan tipe data dari kolom-kolom tabel.
Kekangan
kunci asing, diterapkan
pada relasi antara dua tabel yang memiliki relasi one-to-many. Tabel induk
disyaratkan memuat sebuah nilai kunci primer yang cocok dengan setiap nilai
kunci asing pada tabel anak.
Pada Gambar 5.14, misalnya, Id konsumen 1020
ditampilkan dua kali pada tabel Jadwal
(kolom IdKonsumen). Dimisalkan bahwa
sebuah aplikasi memperbarui tabel Konsumen,
yang mengubah 1020 menjadi 1022. Jika tidak ada kekangan yang dilakukan, tabel Jadwal akan memuat dua (atau lebih)
baris yang tidak lagi terhubung ke tabel Konsumen.
Akibatnya, baris-baris itu menjadi baris-baris yatim. Pada database yang besar,
error semacam itu bisa jadi tidak terdeteksi dan menyebabkan permasalahan
integritas data. Sama halnya, jika konsumen 1020 dihapus dari tabel Konsumen, maka semua baris pada tabel
Jadwal yang memuat IdKonsumen 1020
akan menjadi baris yatim.
Cara lain dalam melanggar kekangan integritas
kunci asing adalah dengan menambah sebuah baris baru pada tabel Jadwal yang mencantumkan nilai IdKonsumen yang tidak ada di dalam
tabel Konsumen.
Tutorial 5.4: Menciptakan Relasi Antara Tabel JenisPerbaikan, Jadwal,
dan tabel Konsumen
Pada tutorial
ini, Anda akan menambahkan dua relasi pada database LayananPerbaikan1: satu yang menghubungkan tabel JenisPerbaikan dengan tabel Jadwal, dan kedua yang menghubungkan
tabel Konsumen dengan tabel Jadwal.
Langkah-Langkah Tutorial
Langkah 1: Pada jendela Server
Explorer, di bawah nama database LayananPerbaikan1,
klik-kanan pada folder Database Diagrams dan pilih Add New Diagram.
Langkah 2: Jendela Add Table akan ditampilkan. Pilih tabel Jadwal, JenisPerbaikan, dan Konsumen.
Klik tombol Add, kemudian klik
tombol Close.
Langkah 3: Geret mouse dari tombol seleksi tepat ke kiri dari
kolom IdKonsumen pada tabel Konsumen ke tombol seleksi di samping
kolom IdKonsumen dari tabel Jadwal. Ketika Anda melepaskan tombol
mouse, dialog Tables and Columns akan ditampilkan seperti pada Gambar 5.15. Perhatikan bahwa
Konsumen diseleksi sebagai Primary key table, dan Jadwal diseleksi sebagai Foreign key table. Kolom IdKonsumen diseleksi pada kedua tabel.
Jika berbeda dari apa yang dijelaskan, Anda bisa memperbaikinya sekarang.
Langkah 4: Klik tombol OK
untuk menyimpan relasi. Ini akan mengekspos jendela Foreign Key Relationship. Di sini, Anda dapat
memodifikasi opsi-opsi spesifik yang mengendalikan relasi tabel. Sebagai
contoh, opsi Enforce Foreign Key
Constraint sama dengan Yes. Ini
berarti database akan melemparkan eksepsi jika sebuah aplikasi mencoba
menghapus sebuah baris dari tabel induk sehingga beberapa baris pada tabel anak
tidak lagi bisa terhubung ke tabel induk.
Langkah 5: Ciptakan relasi lain antara tabel JenisPerbaikan dan tabel Jadwal,
menggunakan bidang IdJenis sebagai
link bersama.
Langkah 6: Simpan diagram database dan beri nama Relasi. Diagram database ditampilkan
pada Gambar 5.16.
Langkah 7: Gunakan mouse untuk menggeret tabel JenisPerbaikan dan tabel Jadwal ke dalam jendela designer DataSet. Ketika Anda melakukannya,
baris-baris yang mengindikasikan relasi akan menghubungkan tabel-tabel, seperti
ditunjukkan pada Gambar 5.17.
Tutorial 5.5: Mengubah Koneksi Database dari SQL Server
Express Ke File Database
Jika aplikasi
Anda terus menerus melanjutkan koneksi ke SQL
Server Expres untuk melihat dan memperbarui database LayananPerbaikan1,
semua perubahan yang Anda lakukan akan permanen. Ini akan menjadi masalah,
misalnya, jika Anda menghapus sejumlah jadwal. Untuk tujuan pengujian, adalah
lebih baik untuk bekerja dengan database lokal di dalam direktori projek Anda,
seperti yang telah dilakukan pada Bab 4 terhadap database Karate. Tutorial ini
akan membawa Anda melalui langkah-langkah dalam menetapkan koneksi database
Anda.
Langkah-Langkah Tutorial
Langkah 1: Tutup Visual Studio, sehingga semua koneksi ke server
akan dihentikan.
Langkah 2: Cari file LayananPerbaikan1.mdf di dalam direktori data
SQL Server. Anda bisa mencarinya di C:\Program
Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data. Salin file ini ke dalam
projek Layanan Perbaikan.
Langkah 3: Buka projek Layanan
Perbaikan pada Visual Studio.
Langkah 4: Pada jendela Solution
Explorer, klik kanan pada nama
projek, pilih Add, dan pilih Existing Item. Pilih file LayananPerbaikan1.mdf. Klik tombol Add untuk menutup jendela dialog.
Langkah 5: Klik ganda pada My
Project pada jendela Solution Explorer. Ini akan membawa Anda ke
jendela Project Properties.
Langkah 6: Pilih tab Settings
dan perhatikan bahwa satu-satunya entri di dalam jendela. Klik di dalam kolom Value dan ubah dengan baris berikut:
Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\LayananPerbaikan1.mdf;
Integrated Security=True;User Instance=True
Teks tersebut
dipertahankan menjadi satu baris.
Langkah 7: Simpan projek.
Langkah 8: Buka jendela Server
Explorer dan hapus koneksi lama ke
database. Ciptakan sebuah koneksi baru ke file database lokal. Mulai dari
sekarang, projek Anda akan menggunakan file database lokal.
5.2 DataTable
DataTable adalah sebuah objek yang merepresentasikan
isi tabel dari suatu sumber data. Kelas DataTable
.NET dipakai sebagai basis untuk menciptakan tipe-tipe DataTable terspesialisasi. Ketika Anda menambahkan suatu sumber
data ke dalam sebuah projek, Visual Studio akan menciptakan sebuah kelas DataTable terspesialisasi, seperti KonsumenDataTable atau AnggotaDataTable.
Kelas DataTable
mendeskripsikan koleksi yang memuat baris-baris dan kolom-kolom yang dipakai
untuk memuat data dari sebuah database, file XML, atau sumber data lain. Objek DataTable memuat koleksi kolom-kolom,
yang menjelaskan tipe data di dalam tabel. Ia juga memuat koleksi baris-baris
yang memuat data aktual.
Berikut adalah sejumlah properti di dalam
kelas DataTable:
- Columns: Sebuah koleksi yang memuat objek-objek DataColumn; masing-masing menjelaskan nama, tipe, dan karakteristik-karakteristik lain dari sebuah kolom.
- DefaultView: Sebuah objek DataView dapat Anda pakai untuk memfilter (menyeleksi) baris-baris tabel atau mengurutkan baris-baris pada sembarang kolom.
- PrimaryKey: Sebuah array yang memuat objek-objek DataColumn berperan sebagai kunci primer pada tabel; setiap baris dijamin memuat sebuah nilai unik pada kolom.
- Rows: Sebuah koleksi yang memuat objek-objek DataRow, yang masing-masing memuat data pada tiap baris dari tabel.
Untuk pandangan konseptual, Gambar 5.18
menjelaskan properti Columns dan Rows dari sebuah DataTable.
Mengikat Kontrol Pada Sebuah
DataTable
Jika Anda ingin menampilkan isi dari sebuah DataTable pada suatu form, Anda dapat
mengikatnya pada ListBox, ComboBox, atau DataGridView. Tugaskan referensi tabel pada properti DataSource dari kontrol tersebut.
Statemen berikut, misalnya, mengikat sebuah objek DataTable dengan nama tabelKonsumen
pada kontrol DataGridView dengan
nama dgvKonsumen:
dgvKonsumen.DataSource
= tabelKonsumen
Memfilter dan Mengurutkan Baris-Baris
dari DataTable
Kelas DataTable
memuat sebuah properti DefaultView.
Properti ini memiliki dua subproperti penting:
- Properti RowFilter: Memuat sebuah ekspresi perbandingan yang sama dengan klausa WHERE pada sebuah statemen SELECT.
- Properti Sort: Mengidentifikasi satu atau lebih kolom yang akan dipakai dalam pengurutan; juga menetapkan penataan ASC (ascending, menaik) atau DESC (descending, menurun).
Anda menugaskan nilai-nilai pada
properti-properti ini untuk memfilter atau mengurutkan baris-baris pada sebuah DataTable. Statemen berikut, misalnya,
mengurutkan baris-baris dari tabelKonsumen
dengan tatanan menaik berdasarkan Nama:
tabelKonsumen.DefaultView.Sort
= "Nama"
Statemen berikut mengurutkan tabelKonsumen dengan tatanan menurun
berdasarkan IdKonsumen:
tabelKonsumen.DefaultView.Sort
= "IdKonsumen DESC"
Statemen berikut membatasi baris-baris tabel
pada bidang Nama yang lebih besar
dari M:
tabelKonsumen.DefaultView.RowFilter
= “Nama > ‘M’”
Objek DataRow
Objek DataRow
menjelaskan sebuah baris di dalam sebuah DataTable. Anda dapat menambahkan
kolom-kolom pada sebuah DataRow,
mengisi baris dengan nilai-nilai, menambahkan baris pada sebuah tabel, dan
menghapus sebuah baris pada suatu tabel. Untuk mengkonstruksi sebuah DataRow kosong, Anda memanggil metode NewRow dari DataTable:
Dim
tabel As New DataTable
Dim
baris As DataRow = tabel.NewRow()
Properti Item
dari sebuah DataRow dapat Anda pakai
untuk membaca dan menetapkan nilai-nilai kolom. Diasumsikan bahwa tabel Anda
memuat sebuah kolom dengan nama Nama_Belakang,
statemen berikut menugaskan sebuah nilai pada baris sekarang:
baris.Item("Nama")
= "Kristof, John"
Item adalah properti default dari DataRow, jadi Anda dapat menyingkat
statemen tersebut:
baris("Nama")
= "Kristof, John"
Anda juga dapat mengakses kolom-kolom
berdasarkan posisi indeksnya, yang diawali dari 0. Statemen berikut menugaskan
nama seseorang pada kolom pertama pada objek baris:
baris.Item(0)
= "Kristof, John "
Properti ItemArray menghasilkan sebuah array
Object yang memuat semua nilai kolom:
Dim
kolom As Object() = baris.ItemArray
DataTable Bertipe Kuat
Ketika Anda menciptakan sebuah DataSet berdasarkan suatu tabel
database, Visual Studio akan menciptakan sejumlah kelas-kelas kustom.
Kelas-kelas ini sesuai dengan struktur tabel pada DataSet Anda. Kelas LayananPerbaikanDataSet,
misalnya, memuat sebuah kelas inner (sebuah kelas di dalam kelas lain) dengan
nama KonsumenDataTable. Ia juga
memiliki sejumlah metode dan properti, seperti:
- AddKonsumenRow: Sebuah metode yang menambahkan sebuah baris baru pada tabel.
- NewKonsumenRow: Sebuah metode yang menghasilkan sebuah baris baru kosong yang memiliki kolom-kolom sama seperti tabel.
- RemoveKonsumenRow: Sebuah metode yang menghapus suatu baris dari tabel.
- FindByIdKonsumen: Sebuah metode yang melakukan pencarian suatu baris menggunakan nomor ID konsumen.
- Count: Sebuah properti yang menghasilkan banyak baris dalam tabel.
Kelas inner lain dengan nama KonsumenRow memuat properti-properti
yang merepresentasikan kolom-kolom yang berbeda pada tabel Konsumen. Anda dapat
menggunakan properti-properti ini untuk menetapkan nilai-nilai kolom pada kode
program Anda:
·
IdKonsumen As Short
·
Nama As String
·
Telepon As String
Selain itu, kelas ini juga memiliki sebuah
metode dengan nama GetJadwalRows,
yang menghasilkan sebuah koleksi yang memuat baris-baris dari tabel Jadwal yang
cocok dengan nomor ID konsumen dari baris terkini. Anda akan mengetahuinya,
ketika menuliskan kode untuk melihat dan memperbarui database LayananPerbaikan, bahwa memiliki
kelas-kelas seperti KonsumenDataTable
dan KonsumenRows akan mempermudah
pekerjaan Anda.
5.3 Memperbarui Database Menggunakan SQL
Pada Bab 4, Anda telah belajar bagaimana
menambah, memperbarui, dan menghapus baris-baris dari tabel-tabel database,
menggunakan kontrol-kontrol data-bound. Database yang dimodifikasi oleh
query-query SQL bekerja di balik layar. Sekarang saatnya bagi Anda untuk
mempelajari bagaiman operasi-operasi dilakukan dalam bahasa SQL.
·
Statemen INSERT INTO menambahkan sebuah baris baru pada
suatu tabel.
·
Statemen UPDATE memodifikasi
satu atau lebih baris tabel.
·
Statemen DELETE FROM menghapus atau lebih baris dari
sebuah tabel.
Menyisipkan Baris Pada Tabel
Statemen INSERT
INTO SQL menyisipkan sebuah baris baru ke dalam suatu tabel, menggunakan
sintaksis berikut:
INSERT
INTO namatabel
(
bidang1, bidang2,...] )
VALUES(
nilai1, nilai2,...] )
Query berikut menyisipkan sebuah baris ke
dalam suatu tabel dengan nama Gaji:
INSERT
INTO Payroll (IdPekerja, TanggalGajian, JamKerja, GajiPerJam)
VALUES(‘1002’,
‘1/15/2015’, 47.5, 27.50)
Semua nama kolom harus dicantumkan dengan
urutan yang sama dengan nilai-nilai yang diberikan. String dan literal tanggal
harus diapit dengan kutip tunggal.
Parameter Query
Statemen INSERT
INTO umumnya tidak memuat nilai
kolom literal. Tetapi, parameter query dipakai sehingga nilai-nilai dilewatkan
kepada query pada saat aplikasi dijalankan. Nama parameter harus diawali dengan
simbol @. Jika dimungkinkan, setiap parameter perlu sesuai dengan nama dari
kolom tabel.
Statemen berikut menyisipkan sebuah baris
pada tabel Pembayaran (database Karate)
menggunakan tiga parameter query:
INSERT
INTO Pembayaran(Jumlah, Id_Anggota, Tanggal_Pembayaran)
VALUES
(@Jumlah, @Id_Anggota, @ Tanggal_Pembayaran)
Kunci primer dari tabel ini diasumsikan
merupaka bidang identitas, jadi tidak diperlukan untuk mencantumkan nilainya
pada statemen INSERT. Database akan
menghasilkan sebuah nilai kunci primer yang baru setiap kali sebuah baris baru
disisipkan ke dalam tabel.
Memperbarui Baris Tabel
Statemen UPDATE
memodifikasi isi dari satu atau lebih baris pada sebuah tabel database. Ia
memiliki sintaksis berikut:
UPDATE
namatabel
SET
namabidang = nilaibaru
[SET
namabidang = nilaibaru] ...
[WHERE
kriteria]
Statemen UPDATE
dapat dipakai memodifikasi setiap baris dalam sebuah tabel. Sebagai contoh,
query berikut menambah nilai-nilai pada kolom GajiPerJam dari semua baris dalam tabel Gaji sebesar 5 persen:
UPDATE
Gaji
SET
GajiPerJam = GajiPerJam * 1.05
Umumnya, Anda ingin memperbarui hanya
baris-baris tertentu, sehingga Anda dapat mencantumkan klausa WHERE dengan kriteria seleksi. Query
berikut, misalnya, menambah gaji per jam bagi pekerja yang digaji setelah
tanggal yang disimpan di dalam parameter @TanggalPembayaran:
UPDATE
Gaji
SET
GajiPerJam = GajiPerJam * 1.05
WHERE
TanggalPembayaran > @TanggalPembayaran
Jika Anda ingin memperbarui satu baris saja,
klausa WHERE harus secara unik
mengidentifikasi baris terseleksi. Biasanya, Anda akan menggunakan sebuah
ekspresi yang memuat kunci primer tabel. Sebagai contoh, query berikut menambah
gaji per jam untuk satu pekerja dengan nomor ID yang ditetapkan oleh parameter
@IdPekerja:
UPDATE
Gaji
SET
GajiPerJam = GajiPerJam * 1.05
WHERE
IdPekerja = @IdPekerja
Anda juga dapat menggunakan parameter query
untuk pengali gaji:
UPDATE
Gaji
SET
GajiPerJam = GajiPerJam * @PersenGaji
WHERE
IdPekerja = @IdPekerja
Contoh Database Karate
Query berikut memperbarui tabel Pembayaran (database Karate). Ia
menetapkan Jumlah pada nilai di
dalam parameter @Jumlah untuk baris
dimana di dalamnay Id_Pembayaran
sama dengan nilai pada @Id_Pembayaran:
UPDATE
Pembayaran
SET
Jumlah = @Jumlah
WHERE
Id_Pembayaran = @Id_Pembayaran
Menghapus Baris Tabel
Statemen DELETE
FROM menghapus baris-baris dari
sebuah tabel. Ini adalah sintaksisnya:
DELETE
FROM namatabel
[
WHERE kriteria ]
Setelah sebuah baris dihapus, ia tidak dapat
dipulihkan. Statemen berikut menghapus semua baris dari tabel Pembayaran:
DELETE
FROM Pembayaran
Klausa WHERE
menyeleksi baris-baris mana yang akan dihapus. Kode berikut menghapus semua
pembayaran sebelum tanggal yang ditetapkan pada parameter @Tanggal_Pembayaran:
DELETE
FROM Pembayaran
WHERE
Tanggal_Pembayaran < @Tanggal_Pembayaran
Statemen berikut menghapus satu pembayaran,
bila diasumsikan bahwa Id_Pembayaran
adalah kolom kunci primer:
DELETE
FROM Pembayaran
WHERE
Tanggal_Pembayaran < @Tanggal_Pembayaran
5.4 Fokus Pada Penyelesaian Permasalahan:
Aplikasi Layanan Perbaikan Rumah
Pada Tutorial 5.6, Anda akan menciptakan
sebuah kelas tingkat perantara (menengah) untuk aplikasi ini.
Tutorial 5.6: Menambahkan Kelas Jadwal
Pada tutorial
ini, Anda akan mulai dengan menciptakan aplikasi Layanan Perbaikan Rumah. Tugas pertama Anda adalah menciptakan
kelas perantara dengan nama Jadwal
yang memuat sebuah metode yang menyisipkan jadwal-jadwal baru ke dalam
database. Anda akan menguji metode ini dari sebuah form baru yang Anda
tambahkan pada projek.
Langkah-Langkah Tutorial
Langkah 1: Buka projek Layanan
Perbaikan yang telah Anda kerjakan pada Tutorial 5.3.
Langkah 2: Buka file LayananPerbaikanDataSet.xsd
dari jendela Solution Explorer.
Langkah 3: Buka jendela
designer untuk DataSet, klik kanan
pada JadwalTableAdapter dan pilih Configure.
Langkah 4: Klik pada jendela Query
Builder.
Langkah 5: Verifikasi query SQL berikut, seperti ditunjukkan pada
Gambar 5.19. Simpan query ini dengan nama SisipQuery.
INSERT INTO Jadwal
(IdJenis, Deskripsi, Lisensi, IdKonsumen, Terjadwal)
VALUES
(@IdJenis,@Deskripsi,@Lisensi,@IdKonsumen,@Terjadwal)
Langkah 6: Tambahkan sebuah kelas perantara dengan nama Jadwal.vb pada projek. Pada kelas ini,
deklarasikan variabel-variabel level kelas berikut:
Private adapter As New
LayananPerbaikanDataSetTableAdapters.JadwalTableAdapter
Public Shared Property ErrorTerakhir As
String
Variabel
dengan nama adapter adalah sebuah
objek dari TableAdapter yang akan
Anda gunakan untuk melakukan sejumlah aksi pada database. ErrorTerakhir akan memuat pesan-pesan error yang dihasilkan oleh
metode-metode TableAdapter.
Langkah 7: Ciptakan sebuah metode Sisip.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Public Function Sisip(jenisId As Short,
deskripsi As String,
lisensi As Boolean,
IdKonsumen As Short,
Terjadwal As DateTime) As Boolean
'menyisipkan sebuah
baris baru ke dalam tabel Jadwal
'menghasilkan True jika
berhasil. Jika eksepsi dilempar,
'ErrorTerakhir akan
menampung pesan error.
Try
ErrorTerakhir =
String.Empty
adapter.SisipQuery(jenisId, deskripsi, lisensi, IdKonsumen,
Terjadwal)
Return True
Catch ex As Exception
ErrorTerakhir =
ex.Message
Return False
End Try
End Function
|
Baris 8
menghapus semua pesan error yang tertinggal pada variabel ErrorTerakhir dari operasi sebelumnya. Baris 9 memanggil metode SisipQuery dari kelas JadwalTableAdapter. Jika tidak ada
eksepsi yang dilempar, baris 11 akan menghasilkan True, yang mengindikasikan keberhasilan. Di sisi lain, jika
pemanggilan terhadap SisipQuery pada
baris 9 melemparkan eksepsi, ErrorTerakhir
akan ditugasi sebuah string dan metode ini menghasilkan False.
Langkah 8: Tambahkan sebuah Shared
metode dengan nama TanggalWaktuTergabung
yang menerima sebuah tanggal dan sebuah waktu dan menghasilka nilai tanggal/waktu
tergabug.
Public Shared Function
TanggalWaktuTergabung(aTanggal As DateTime,
aWaktu
As DateTime) As DateTime
Dim
ts As New TimeSpan(aWaktu.Hour, aWaktu.Minute, 0)
Return
aTanggal.Add(ts)
End Function
Form Jadwal Baru
Selanjutnya,
Anda akan menciptakan form Jadwal Baru, yang akan menguji metode Jadwal.SisipQuery. Untuk sementara ini,
Anda tidak menciptakan antarmuka.
Langkah 9: Tambahkan sebuah form baru dengan nama FormJadwalBaru.vb pada projek. Tetapkan
properti Text-nya menjadi Jadwal Perbaikan Baru.
Tambahkan kode baris berikut pada kelas form:
Private mJadwal As New Jadwal
Baris ini
menciptakan sebuah objek dari kelas Jadwal di dalam form, sehingga Anda dapat
memanggil metode Sisip-nya.
Langkah 10: Tambahkan sebuah tombol pada form, dengan properti Text menjadi Simpan. Sisipkan kode berikut pada event handler Click dari tombol itu:
mJadwal.Sisip(2, "Penanganan Tong
Sampah", False, 1020, #10/5/2015 9:00:00 AM#)
FormJadwal.ShowDialog()
Statemen pertama
menyisipkan sebuah jadwal baru ke dalam database. Statemen kedua menampilkan
isi lengkap dari tabel Jadwal pada
form terpisah, sehingg Anda dapat memverifikasi bahwa jadwal baru telah
diciptakan.
Langkah 11: Tetapkan form startup dari projek menjadi FormJadwalBaru dan jalankan aplikasi.
Anda akan melihat keluaran seperti pada Gambar 5.20.
Jika Anda
mengulangi aplikasi dan mengklik tombol lagi, ia akan menambahkan baris lain
dengan informasi yang sama pada tabel Jadwal. Setiap jadwal akan memiliki nilai
berbeda pada kolom IdJadwal karena
nilai itu dihasilkan secara otomatis oleh database.
Langkah 12: Ketika selesai, bangun-ulang (rebuild) projek dari menu
BUILD. Ini akan membuat database ke kondisi semula.
Tutorial 5.7: Menciptakan Form Startup
Pada tutorial
ini, Anda akan menciptakan sebuah form startup untuk aplikasi Layanan Perbaikan. Anda akan menciptakan sebuah menu yang menampilkan semua
form yang ada.
Langkah-Langkah Tutorial
Langkah 1: Tambahkan sebuah form baru dengan nama FormUtama.vb pada projek, dan tetapkan
properti Text-nya menjadi Layanan Perbaikan Rumah.
Modifikasi properti projek agar menjadikannya sebagai form startup dari
aplikasi.
Langkah 2:
Tambahkan sebuah kontrol MenuStrip
dengan struktur menu berikut:
File
Keluar
Jadwal
Baru
Lihat
Daftar
Jadwal
Konsumen
Lihat
Langkah 3: Ciptakan sebuah event handler Click untuk item menu File |
Keluar, dan sisipkan statemen Me.Close().
Langkah 4: Ciptakan sebuah event handler Click untuk item menu Jadwal
| Baru, dan sisipkan statemen berikut:
FormJadwalBaru.ShowDialog()
Langkah 5: Ciptakan sebuah event handler Click untuk item menu Jadwal
| Lihat, dan sisipkan statemen berikut:
FormJadwal.ShowDialog()
Langkah 6: Ciptakan sebuah event handler Click untuk item menu Konsumen
| Lihat, dan sisipkan statemen berikut:
FormKonsumen.ShowDialog()
Langkah 7: Jalankan aplikasi.
Tutorial 5.8: Menambah Kelas Pada Tingkat Menengah
Pada tutorial
ini, Anda akan menciptakan kelas Konsumen
dan JenisPerbaikan pada tingkat
perantara atau tingkat menengah dari aplikasi Layanan Perbaikan Rumah. Kedua kelas ini menyediakan
link-link penting untuk KonsumenTableAdapter
dan JenisPerbaikanTableAdapter, yang
merupakan bagian dari tingkat akses data. Anda juga akan menambahkan
metode-metode yang membaca daftar jenis perbaikan dan daftar nama konsumen.
Langkah-Langkah Tutorial
Langkah 1: Tambahkan sebuah kelas tingkat menengah dengan nama JenisPerbaikan pada projek.
Langkah 2: Tambahkan variabel level-kelas pada kelas JenisPerbaikan:
Private adapter As New
LayananPerbaikanDataSetTableAdapters.JenisPerbaikanTableAdapter
Langkah 3: Ciptakan sebuah properti ReadOnly dengan nama Items
yang menghasilkan sebuah DataTable
yang memuat semua jenis perbaikan:
1
2
3
4
5
6
7
|
Public ReadOnly Property Items() As DataTable
Get
Dim tabel As DataTable = adapter.GetData()
tabel.DefaultView.Sort =
"Deskripsi"
Return tabel
End Get
End Property
|
Sebuah kelas
menengah memberikan Anda kesempatan untuk mendefinisikan data yang akan
dihasilkan oleh sebuah adapter tabel. Pada metode ini, baris 3 memanggil metode
GetData dari adapter, yang
menghasilkan sebuah DataTable yang
memuat semua jenis perbaikan yang dicantumkan pada tabel JenisPerbaikan. Baris 4 mengurutkan data berdasarkan deskripsi, dan
baris 5 menghasilkan tabel terurut.
Langkah 4: Tambahkan sebuah kelas tingkat menengah yang baru
dengan nama Konsumen pada projek.
Langkah 5: Tambahkan variabel level-kelas pada kelas Konsumen:
Private adapter As New
LayananPerbaikanDataSetTableAdapters.KonsumenTableAdapter
Langkah 6: Ciptakan sebuah properti ReadOnly dengan nama Items
yang menghasilkan sebuah DataTable
yang memuat semua konsumen:
1
2
3
4
5
6
7
|
Public ReadOnly Property Items() As DataTable
Get
Dim tabel As DataTable = adapter.GetData()
tabel.DefaultView.Sort = "Nama"
Return tabel
End Get
End Property
|
Tutorial 5.9: Menambah Kontrol-Kontrol Pada Form Jadwal
Baru
Pada tutorial
ini, Anda akan menambahkan kontrol-kontrol pada form Jadwal Baru. Form ini
akan dipakai user untuk memasukkan data jadwal dan menambahkan sebuah baris
baru pada tabel Jadwal. Kode akan
memanggil metode-metode dari tiga kelas perantara. Konsumen, Jadwal, dan JenisPerbaikan.
Langkah-Langkah Tutorial
Langkah 1: Buka jendela design untuk FormJadwalBaru.vb. Dengan menggunakan contoh pada Gambar 5.21 dan
daftar nama kontrol pada Tabel 5.3, tambahkan kontrol-kontrol yang diperlukan
pada form.
Tabel 5.3 Kontrol-kontrol pada form Jadwal Baru
Jenis
Kontrl
|
Nama
Kontrol
|
Pengaturan
Properti
|
Form
TextBox
TextBox
DateTimePicker
ComboBox
ComboBox
CheckBox
Label
Button
Button
ErrorProvider
|
FormJadwalBaru
teksWaktu
teksDeskripsi
dtpTanggal
cboKonsumen
cboJenisPerbaikan
chkLisensi
labelStatus
tombolSimpan
tombolBatal
errProvider
|
Text = Jadwal Perbaikan Baru
AcceptButton = tombolSimpan
CancelButton = tombolBatal
FormBorderStyle = FixedDialog
MaximizeBox = False
MinimizeBox = False
Font.Size =
10
MultiLine = True
Format =
Short
Text = Harus
berlisensi
AutoSize = False
Text = Simpan
Text = Batal
|
Dua kotak
combo penting karena ia menyediakan daftar konsumen dan daftar perbaikan.
Ketika user menyeleksi nilai dari daftar itu, nilai ID akan disimpan pada
jadwal perbaikan baru. Selanjutnya, Anda akan menambahkan kode pada form yang
memanggil metode-metode dari kelas Jadwal,
JenisPerbaikan, dan Konsumen.
Langkah 2: Buka jendela form dan tambahkan variabel-variabel
level-kelas baru sehingga sekarang Anda memiliki:
Private mJadwal As New Jadwal
Private mJenisPerbaikan As New JenisPerbaikan
Private mKonsumen As New Konsumen
Setiap objek
yang dideklarasikan di sini adalah objek dari kelas perantara. Ini adalah pola
yang terjadi pada hampir setiap form.
Langkah 3: Ciptakanlah event handler Form_Load berikut:
1
2
3
4
5
6
7
8
9
10
11
|
Private Sub FormJadwalBaru_Load(..) Handles MyBase.Load
'mengisi kotak combo jenis perbaikan
cboJenisPerbaikan.DataSource =
mJenisPerbaikan.Items
cboJenisPerbaikan.DisplayMember =
"Deskripsi"
cboJenisPerbaikan.ValueMember = "IdJenis"
'mengisi kotak kombo konsumen
cboKonsumen.DataSource = mKonsumen.Items
cboKonsumen.DisplayMember = "Nama"
cboKonsumen.ValueMember =
"IdKonsumen"
End Sub
|
Tujuan dari
kode ini adalah untuk mengisi dua kotak combo dengan daftar konsumen dan daftar
jenis perbaikan. Baris 3 memanggil properti Items dari kelas JenisPerbaikan,
yang menghasilkan sebuah DataTable
yang mencantumkan semua jenis perbaikan yang mungkin. Baris 8-10 mengikat kotak
combo lain dengan sebuah DataTable
yang memuat nama-nama konsumen dan IDnya.
Langkah 4: Ciptakanlah handler Click untuk tombol Simpan.
Anda telah memilikinya, jadi Anda perlu menggantinya dengan ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Private Sub
tombolSimpan_Click(…) Handles tombolSimpan.Click
Dim Terjadwal As
DateTime
Try
Terjadwal =
Jadwal.TanggalWaktuTergabung(
dtpTanggal.Value.Date, CDate(teksWaktu.Text))
Catch
errProvider.SetError(teksWaktu,
"Silahkan
masukkan jadwal yang valid")
Return
End Try
Dim iDjenis As Short =
CShort(cboJenisPerbaikan.SelectedValue)
Dim iDKonsumen As Short
= CShort(cboKonsumen.SelectedValue)
Dim lisensi As Boolean =
chkLisensi.Checked
If
mJadwal.Sisip(iDjenis, teksDeskripsi.Text,
lisensi, iDKonsumen,
Terjadwal) Then
Me.Close()
Else
labelStatus.Text =
"Tidak bisa menambah jadwal. " &
Jadwal.ErrorTerakhir
End If
End Sub
|
Baris 4-5
memanggil metode utilitas dari kelas Jadwal
yang menggabungkan tanggal dan waktu, dan menugaskan hasil kepada variabel Terjadwal. Jika konversi tanggal
melemparkan eksepsi, ia akan ditangkap pada baris 7, dimana kontrol ErrorProvider akan menampilkan pesan
error.
Baris 11-12
membaca ID jenis perbaikan dan ID konsumen dari dua kotak combo, dan baris 13
membaca nilai lisensi dari kotak periksa. Baris 14 memanggil metode Sisip dari kelas Jadwal, melewatkan semua nilai yang diperlukan. Jika metode Sisip menghasilkan False, pesan error akan ditampilkan pada baris 18. Terakhir, baris
16 menutup form segera setelah jadwal disimpan.
Langkah 5: Tambahkan handler Click
berikut untuk tombol Batal, dan
simpan projek.
Private Sub tombolBatal_Click(…) Handles
tombolBatal.Click
Me.Close()
End
Sub
Entri baru
ditampilkan pada form Jadwal.
No comments:
Post a Comment