Friday, December 16, 2016

Bab 5. VB.NET Untuk Programer



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.

Gambar 5.1 Jendela Server Explorer, yang terhubung ke database Karate


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.

Gambar 5.2 Menciptakan sebuah database baru pada Server Explorer


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.

Gambar 5.3 Menambahkan sebuah tabel pada database LayananPerbaikan1

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.

Gambar 5.4 Perancangan tabel Konsumen


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.

Gambar 5.5 Menamai tabel Konsumen


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.

Gambar 5.6 Baris-baris pada tabel Konsumen


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.

Gambar 5.7 Menampilkan tabel Konsumen pada sebuah kontrol DataGridView

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.

Gambar 5.8 Perancangan tabel Jadwal


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.


Gambar 5.9 Spesifikasi identitas untuk kolom IdJadwal

Gambar 5.10a Isi dari tabel Jadwal


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:

Gambar 5.10b Jendela editor dari file LayananPerbaikanDataSet.xsd


Gambar 5.10c Isi dari tabel Jadwal


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.

Tabel 5.1 Perancangan tabel JenisPerbaikan

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.


Gambar 5.11 Isi dari tabel JenisPerbaikan


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.

Gambar 5.12 Relasi one-to-many antara tabel Konsumen dan tabel Jadwal


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.

Gambar 5.13 Pelanggaran kekangan kunci primer


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.

Gambar 5.14 Tabel Konsumen dan tabel Jadwal

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.


Gambar 5.15 Menciptakan relasi antara tabel Konsumen dan tabel Jadwal


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.

Gambar 5.16 Diagram database

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.

Gambar 5.17 Jendela designer DataSet


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


Gambar 5.18 Properti-properti DataTable


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)


Gambar 5.19 Jendela Query Builder untuk JadwalTableAdapter


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.

Gambar 5.20 Tabel Jadwal, dengan baris baru ditambahkan


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.


Gambar 5.22 Form Jadwal Baru

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.

Gambar 5.23 Entri baru pada form Jadwal




No comments:

Post a Comment