Berita:

Update RPN OJ forum! Petualangan keenam kelompok Trihörrèan di Kerajaan Líghtran berlanjut. Sanggupkah mereka mengakhiri masalah di Líghtran? Baca rangkuman kisah maraton sesi terakhir di sini dan lanjutkan petualangan mereka.

Main Menu

Basis data

Dimulai oleh Èxsharaèn, 01 Juni 2007, 04:12:20

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Èxsharaèn

Separuh dari artikel ini tidak berbicara pemrograman (akhirnya!).

Tahu Microsoft Access? Pernah pakai? Tahu fungsinya?

Bagaimana kalau Microsoft Excel? Pasti pada tahu semua yah. Kita sering menggunakan Excel untuk membuat tabel untuk menyimpan data kita. Nggak ada yang salah dengan ini, tapi tahu nggak, ada cara yang lebih efisien dari membuat tabel di Excel? Bagaimana nanti kalau datanya sudah banyak dan sewaktu-waktu kita perlu mengubah atau menghapus data tertentu?

Nah, artikel ini akan mengenalkan konsep penyimpanan data dalam komputer: basis data (database). Apa sih basis data itu? Kenapa kita lebih baik menggunakan basis data daripada berkas teks biasa, atau bahkan Excel? Apa saja yang bisa kita lakukan dengan basis data? Perlahan-lahan pertanyaan-pertanyaan ini akan kita jawab bersama. Di akhir artikel, diharapkan kita mampu menggunakan basis data dengan efektif dan efisien, bahkan menggabungkannya dengan program! Kalian akan bisa membuat Web dinamis, bahkan forum ciptaan sendiri! Asyik kan?

Untuk mempelajari artikel ini, sementara tidak diperlukan keahlian pemrograman. Tenang saja! Pada awalnya, kita akan lebih banyak berbicara teori di balik basis data. Tentu saja, ini diikuti dengan pengenalan langsung pada program pengolah basis data, yang dikenal dengan sistem manajemen basis data (database management system, DBMS). Contohnya adalah Microsoft Access, Oracle, MySQL, Microsoft SQL Server, PostgreSQL, dan masih banyak lagi. Supaya mudah, kita akan pakai DBMS yang dimiliki kebanyakan orang asalkan diinstal: Microsoft Access (versinya 2003 ke bawah, bukan 2007).

Siap?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Earthboy

Aku pake' PHPMyAdmin ... boleh gak? ...

Èxsharaèn

phpMyAdmin ya... Bisa saja sih. Nanti aku cabang dua: DBMS untuk desktop (Access 2003/SQL Server 2005 Express Edition) dan DBMS untuk Web (MySQL via phpMyAdmin, walaupun sebenarnya MySQL bisa dipakai untuk desktop).

Mudah-mudahan sempat nulis...
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Atas permintaan stash, artikel ini sementara menggunakan Access 2007. Kebetulan dia ada keperluan membuat program yang menggunakan basis data, jadi sekalian saja kujadikan contoh kasus di sini. Programnya sendiri akan dia tulis menggunakan bahasa VB.NET 2008, jadi yang belum pernah mengenal VB.NET 2008 bisa baca artikelnya dulu sebelum masuk ke pembuatan program.

Kasusnya begini. Dia ingin membuat semacam inventorisasi tokonya, atau boleh lah kita sebut "kasir". Dia perlu memasukkan data barang, mengubah dan menghapus datanya tentu saja, termasuk menambah dan mengurangi stok. Sementara itu, dia juga ingin membuat faktur penjualan (di sinilah "kasir"-nya nanti). Tahu ya kira-kira bentuk faktur penjualan seperti apa? Terakhir, tentu saja dia ingin laporan-laporan, misalkan laporan keuntungan kotor bulan ini, barang apa saja yang paling laris, barang apa saja yang stoknya kosong, dan sebagainya (nanti akan ditambahkan orangnya sendiri kalau ternyata kurang).

Nah, kenapa sih stash perlu basis data? Kok nggak disimpan di Excel saja misalnya? Ya sudah bisa dilihat sendiri, kebutuhannya cukup kompleks, walaupun sebenarnya ini masih simpel. Akan terlalu merepotkan mengorganisasikan datanya jika menggunakan Excel, apalagi jika datanya besar. Karena itulah kita menggunakan bantuan basis data.

Untuk membuat program yang memanfaatkan basis data, kita biasanya harus merancang basis datanya lebih dulu. Kenapa begitu? Nanti kita akan lihat bedanya antara basis data yang terancang dan yang tidak :)
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Oke! Kita coba cara paling sederhana dulu: mengira-ngira tabel apa saja yang kita perlukan. Jelas kita perlu tabel Barang untuk menyimpan data barang. Data apa saja yang perlu disimpan? Untuk sementara, karena aku belum konfirmasi ke stash, anggap saja kita akan menyimpan data barang sebagai berikut:

- Kode barang, anggap saja untuk sekarang ini sebuah angka urut 3 digit, dari 001 hingga 999.
- Nama barang, tentu saja :D
- Harga barang. Yang disimpan di sini adalah harga barang terakhir (nanti kita akan lihat kasus lain saat harga barang selalu berubah, yang lebih sering terjadi di dunia nyata, dan kebetulan terjadi di kasus stash :D).
- Stok. Ini jelas vital; kalau tidak ada stok, kacau ntar :D

Sementara itu dulu saja. Nah, yang aku cetak tebal dalam dunia basis data biasa disebut field. Gampangannya, kalau membuat tabel, kita pasti bikin header kan? Field adalah header tabel kita.

Oke, sekarang faktur penjualan. Ini jelas harus disimpan karena kita akan buat laporan keuangannya nanti. Apa saja yang muncul di faktur penjualan? Berhubung kita belum tahu bentuk faktur penjualan stash seperti apa, asumsikan saja seperti ini:

- No faktur penjualan. Anggap saja nomor urut 6 digit.
- Tanggal faktur.
- Barang yang dibeli, meliputi kode, nama, jumlah yang dibeli, harga sekarang, dan subtotal harga.
- Total kuantitas barang yang dibeli.
- Grand total yang harus dibayar.

Terlihat OK? Mungkin, tapi...
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Kalau kita lihat di rancangan kita sebelumnya, terlihat bahwa di tabel faktur penjualan ada data yang berulang. Jelas terlihat bahwa nama barang sebenarnya ada di tabel barang. Perulangan data yang tidak perlu ini disebut juga dengan redundancy. Ini adalah salah satu hal yang harus dihindari dalam pembuatan basis data, agar manipulasinya mudah dan tentu saja menghemat ruang penyimpanan.

Oke lah, kalau begitu field nama barang di tabel faktur dihapus. Apa sudah beres? Ternyata belum! Redundancy masih terjadi di tabel itu. Lho bukannya sudah tidak ada lagi field yang ada di tabel lain?

Ilustrasinya begini. Anggap saja aku membeli barang di stash hari ini dengan faktur penjualan no. 000001. Barang yang aku beli antara lain:
- 12 buah pensil @ 500.
- 12 buah penghapus @ 1000.
Asumsikan pensil berkode 001 dan penghapus berkode 002.

Itu saja deh :D dengan tabel faktur kita sekarang, bagaimana menyimpannya?





No fakturTanggalKode barangQtyHarga satuanSubtotalTotal qtyGrand total
00000107/07/2009001125006.0002418.000
00000107/07/2009002121.00012.0002418.000

Terlihat kan ada banyak data yang berulang? Padahal yang berubah hanya kode barang, jumlah dibeli, harga, dan subtotalnya. Bayangkan jika ada pemborong yang membeli banyak jenis barang, berapa banyak data yang berulang dan berapa besar ukuran basis data kita nanti, padahal sejatinya data itu tidak diperlukan.

Nah, untuk mengatasi masalah ini, kita bisa ambil jalan keluar berikut. Detail faktur penjualan kita keluarkan dari tabel itu, kita bikinkan tabel sendiri. Yang disimpan adalah seluruh detail penjualan tersebut (kode barang, jumlah dibeli, harga, dan subtotal; walaupun subtotal mungkin tidak diperlukan), plus nomor faktur penjualan tentu saja. Bingung? Nii hasilnya setelah dipecah:

Tabel faktur penjualan



No fakturTanggalTotal qtyGrand total
00000107/07/20092418.000

Tabel detail faktur penjualan




No fakturKode barangQtyHarga satuanSubtotal
000001001125006.000
000001002121.00012.000

Well, mungkin terlihat nomor faktur masih berulang di situ, tapi ini tetap diperlukan, supaya kita tahu detail ini milik faktur penjualan yang mana.

Terlihat susah? Sebenarnya tidak, yang penting kita teliti menganalisis kebutuhan kita. Ada satu cara mendesain basis data yang cukup dikenal mereka yang berkecimpung di dunia basis data dan masih populer hingga kini. Apa itu?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Di kampusku, ini mungkin jadi momok untuk peserta mata kuliah Basis Data karena materi ini dipelajari selama tujuh minggu ;D untuk keperluan sederhana mungkin cara ini justru terlihat berbelit, tapi untuk sistem yang kompleks dan besar, diagram-ER bisa sangat membantu. Khusus kasus stash, aku lompati teori mendetailnya tentang diagram-ER, namun yang tertarik bisa membacanya di artikel terpisah yang akan aku tulis nanti.

Tapi, apa sih diagram-ER itu? Diagram-ER (ER-nya sendiri adalah Entitas-Relasi) adalah diagram yang menggambarkan hubungan antarentitas. Entitas itu sendiri adalah objek yang muncul pada sistem kita. Bahasa awamnya boleh lah entitas ini disebut tabel, karena memang nantinya entitas ini akan jadi tabel pada basis data kita. Nah, tiap entitas ini tentunya tidak mungkin berdiri sendiri, tapi memiliki relasi satu dengan yang lain. Relasinya lah yang digambarkan pada diagram-ER.

Setelah diagram-ER jadi, waktunya memetakan (mapping) diagram tersebut menjadi susunan tabel dan field. Berikutnya, walaupun tidak wajib, disarankan melakukan normalisasi agar desain yang terbentuk jadi semakin bagus. Semua langkah ini aku pisahkan ke artikel sendiri dengan menggunakan contoh kasus stash nanti (terlalu panjang kalau dibeberkan di sini, dan untuk kasus stash malah terlihat rumit, jadi supaya mentalnya nggak turun duluan, aku tidak berikan di sini :)), walaupun sebenarnya pada cara awur-awuran kita sebelumnya tadi, tanpa sadar kita sudah melakukan normalisasi :D

Soo, langkah selanjutnya, setelah desain basis data kita jadi, tentu saja membuatnya :D kita akan pakai Access 2007, walaupun sebenarnya Visual Studio biasanya sudah sepaket dengan manajer basis data lainnya: SQL Server. Desain yang kita pakai adalah desain terakhir seperti berikut:

Tabel Barang
- Kode Barang
- Nama Barang
- Harga Barang
- Stok

Tabel Faktur Penjualan
- No Faktur
- Tanggal
- Total qty
- Grand total

Tabel Detail Faktur Penjualan
- No Faktur
- Kode Barang
- Qty
- Harga satuan
- Subtotal

Desain dari hasil pemetaan diagram-ER belum jadi, sabar ya...
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

#7
Punya Access 2007? Tampilannya mungkin berbeda jauh dengan Access 2003 dan sebelumnya. Lalu, gimana caranya buat basis data baru?

1. Dari tampilan awal, klik Blank Database.

2. Di sebelah kanan, tuliskan nama berkas basis data kita (perhatikan bahwa Access 2007 memiliki ekstensi .accdb, berbeda dengan versi sebelumnya .mdb.

3. Klik Create.
Access akan langsung membuka lembar data (datasheet) baru. Sekilas mirip Excel ya? Kita bisa langsung memasukkan data di sini, tapi kolom ID itu mengganggu sekali...

4. Pada Ribbon, cari bagian View dan klik hingga ketemu Design View. Pilih mode ini.
Access akan langsung meminta kita untuk menyimpan tabel ini. Beri saja nama Barang. Jendela Design akan terbuka.

Bisa dilihat bahwa kolom ID memiliki tipe AutoNumber. Ini maksudnya dia akan otomatis bertambah sendiri tiap kali kita menambahkan data baru.

5. Untuk field ID, ubah namanya menjadi KodeBarang dan ubah Data Type ke Text. Di bagian bawah, ubah Field Size dari 255 menjadi 3 saja.

6. Tambahkan field baru dengan pengaturan seperti berikut:
a. Field Name: NamaBarang
Data Type: Text
Field Size: 50
b. Field Name: HargaBarang
Data Type: Number
Field Size: Long Integer
c. Field Name: Stok
Data Type: Number
Field Size: Integer

Selesai! Silakan pindah ke Datasheet View, klik Yes jika diminta untuk menyimpan.

Jika ada yang jeli, pada kolom KodeBarang ada tanda kunci. Ini adalah kunci utama (primary key). Apa itu kunci utama? Kunci utama adalah kolom khusus yang mampu mengidentifikasi suatu data (row), sehingga data itu berbeda dengan data lainnya. Jadi, tiap data bisa dipastikan unik dengan adanya kunci utama. Sebuah tabel tidak diharuskan memiliki kunci utama, namun sangat dianjurkan (atau paksakan diri) untuk menggunakan paling tidak satu kunci utama. Kalau sebuah tabel belum ada kunci utamanya, pilih kolom yang diinginkan (bisa lebih dari satu) dan klik Primary Key.

Dengan cara yang sama, silakan buat dua tabel sisanya. Bingung New Table di mana? Pada Ribbon, klik tab Create, lalu klik tombol Table. Lembar data yang baru akan terbuka :)

Khusus tabel DetailFakturPenjualan, gunakan dua kunci utama, yaitu kolom NoFaktur dan KodeBarang.

Oke! Basis data kita sudah siap digunakan, tapi sebelumnya tengok dulu ke tab Database Tools dan cari Relationships. Apa itu?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Di tab yang terbuka ini, kita bisa mendefinisikan relasi antartabel (opsional sebenarnya, jadi tidak perlu dilakukan). Apa fungsinya? Untuk menjaga integritas basis data kita. Bisa saja kan terjadi ada faktur penjualan yang memiliki data barang yang ternyata tidak ada di tabel Barang? Nah, untuk mencegah itu, definisikan relasi antartabel. Caranya:

1. Klik Relationships. Di jendela Show Tables yang terbuka, pilih semua tabel dan klik Add.

2. Klik Close. Kita akan melihat tiga tabel kita ada di sana.

3. Hubungkan tiap tabel. Bagaimana caranya? Tarik saja kunci utamanya dari tabel asal ke tabel lain yang bersesuaian. Contoh!
a. Dari tabel Barang, tarik kunci utamanya (KodeBarang) ke tabel DetailFakturPenjualan.
Jendela Edit Relationships akan terbuka. Tabel Barang akan menjadi tabel ayah sementara tabel DetailFakturPenjualan menjadi tabel anak.
b. Untuk memaksa integritas data antara kedua tabel ini, tandai Enforce Referential Integrity. Dua pilihan di bawahnya akan terbuka:
Cascade Update Related Fields. Maksudnya, jika di tabel ayah ada data kunci utama yang berubah dan pilihan ini aktif, tabel anak akan otomatis memperbarui diri menggunakan data yang baru. Jika tidak aktif dan kita mengubah kunci utama sembarangan, Access akan ngomel-ngomel :D
Cascade Delete Related Records. Maksudnya, jika kita menghapus suatu data di tabel ayah dan pilihan ini aktif, semua data yang berhubungan di tabel anak akan ikut terhapus. Tujuannya agar tidak ada data yang menjadi "yatim" akibat tidak ada datanya di tabel ayah. Jika tidak aktif dan kita menghapus satu data di tabel ayah, Access akan melarangnya kalau ternyata dia punya satu saja "anak" ;D.

4. Lakukan hal yang sama untuk tabel-tabel lainnya. Jika sudah selesai, klik Save.

Untuk membuktikan pengaruh relasi ini, silakan isikan data sembarangan ke tiap tabel dan utak-atik pilihan Enforce Referential Integrity. Relasinya sendiri disebut relasi one-to-many. Maksudnya, satu data di tabel ayah dapat tersedia di banyak data di tabel anak. Lebih jelasnya tentang relasi ini silakan lihat artikel Diagram-ER (menyusul).

Oke, kita sudah selesai dengan Access! Selanjutnya, waktunya membuat program kita!

Catatan: Kedua pilihan Enforce Referential Integrity yang dipakai pada contoh berikutnya diaktifkan.
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

#9
Sekarang, buka VB 2008 dan buat projek baru (terserah dah namanya). Kita akan coba satu saja form sederhana, yaitu satu form untuk menambahkan barang ke tabel Barang. Sisanya biar stash sendiri yang kembangkan ;D

1. Buat form baru yang berisi empat kotak teks. Misalkan saja masing-masing kuberi nama txtKodeBarang, txtNamaBarang, txtHarga, txtStok.

2. Tambahkan satu tombol, misalkan kuberi nama btnTambah.

3. Klik ganda pada btnTambah dan ketikkan kode berikut:

Dim objConn As New OleDb.OleDbConnection
' Ganti Data Source ke lokasi basis data toko.accdb di komputer kalian
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
objConn.Open()
Dim objComm As New OleDb.OleDbCommand
objComm.Connection = objConn
Dim strSQL As String
strSQL = "INSERT INTO Barang(KodeBarang, NamaBarang, HargaBarang, Stok) VALUES('" & txtKodeBarang.Text & "', '" & txtNamaBarang.Text & "', " & txtHarga.Text & ", " & nudStok.Value & ")"
objComm.CommandText = strSQL
objComm.ExecuteNonQuery()
MessageBox.Show("Data sudah disimpan!")
objConn.Close()


Ini adalah kode minimum yang diperlukan untuk menambahkan data baru ke basis data kita. Aku sengaja tidak berikan pengecekan data.

4. Jalankan. Coba saja isi data sembarang. Pastikan kalian tidak sedang mendesain tabel Barang sebelum mengeklik tombol Tambah.

5. Tengok isi tabel Barang. Masuk kan datanya :D

Kita analisis langkah-langkah yang diperlukan untuk mengutak-atik basis data kita lewat program bikinan sendiri.

1. Koneksikan dulu program kita ke basis data yang akan digunakan.
Objek yang digunakan, berhubung kita menggunakan basis data Access, adalah OleDbConnection.
Dim objConn As New OleDb.OleDbConnection
Kemudian, kita set properti ConnectionString agar dia tahu harus menggunakan koneksi macam apa dan ke mana:
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
CATATAN
Jika aplikasi ini direncanakan akan dijalankan di komputer lain (alias komputer tempat pengembangan berbeda dengan komputer pengguna), sebaiknya letakkan berkas .ACCDB pada map yang sama dengan map tempat aplikasi kita (.EXE) berada, kemudian hilangkan path absolut pada parameter Data Source seperti berikut:
Data Source=toko.accdb
Jika ingin lebih aman, gunakan bantuan variabel My.Application.Info.DirectoryPath.
Terakhir, buka koneksi.
objConn.Open()

2. Beri perintah ke program kita untuk memanipulasi basis data kita.
Objek yang berkepentingan adalah OleDbCommand, yang tugasnya memang perintah-perintah :D
Pertama-tama, jangan lupa set koneksi komandan kita, supaya dia tahu harus melaksanakan perintah ke mana:
objComm.Connection = objConn
Berikutnya, beri perintah si komandan lewat properti CommandText. Karena ini biasanya melibatkan SQL yang cukup panjang, disarankan menampungnya lebih dulu:
Dim strSQL As String
strSQL = "INSERT INTO Barang(KodeBarang, NamaBarang, HargaBarang, Stok) VALUES('" & txtKodeBarang.Text & "', '" & txtNamaBarang.Text & "', " & txtHarga.Text & ", " & nudStok.Value & ")"
objComm.CommandText = strSQL

Keterangan mengenai SQL INSERT bisa dilihat di sini.
Terakhir, minta si komandan menjalankan perintahnya!
objComm.ExecuteNonQuery()

3. Kalau sudah selesai, jangan lupa tutup koneksi kita, supaya basis data kita tidak terkunci dan bisa dipakai lagi. Selama koneksi masih terbuka, kalian bisa amati di map yang sama dengan toko.accdb, akan muncul satu berkas lagi yang namanya serupa namun punya ekstensi berbeda: toko.laccdb. Ini pertanda basis data kita sedang dikunci. Hilangkan kunci ini dengan menutup koneksinya:
objConn.Close()
dan berkas kunci tersebut akan hilang.

Mudah ya ternyata :D dengan cara yang sama, cukup mengganti perintah saja, kita bisa juga melakukan pembaruan (UPDATE) maupun penghapusan data (DELETE). Simak materi SQL untuk informasi lebih lengkap tentang perintah UPDATE dan DELETE.
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Nah, dari tadi kita baru bisa utak-atik basis data kita. Gimana caranya sekarang untuk mengambil data dari basis data kita dan menampilkannya ke program?

Ada banyak cara untuk menampilkan data, nanti bisa dipilih mana yang paling sesuai dengan kebutuhan. Cara pertama adalah menggunakan DataGridView. Ini paling gampang digunakan, walaupun tampilannya mungkin agak kaku (yang belum pernah lihat silakan lihat di sini). Kalau di topik VB 2008 lebih lanjut kita tidak utak-atik opsinya, sekarang kita pakai :)

Setelah menambahkan sebuah DataGridView:

1. Lihat pilihan Choose Data Source. Ini meminta kita memberikan sumber data yang akan digunakan oleh si DataGridView. Buka saja menu tarik-jatuhnya, lalu klik Add Project data source....

2. Di jendela baru yang terbuka, pilih Database dan klik Next.

3. Pilih koneksi yang akan digunakan. Karena projek kita masih baru, biasanya belum ada koneksi yang pernah dibuat. Silakan buat baru dengan mengeklik tombol New Connection... .

4. Di jendela baru yang terbuka, pastikan Data source: berisi Microsoft Access Database File (OLE DB). Ini yang kita perlukan untuk menghubungkan basis data Access kita ke program kita. Kemudian, cari berkas basis data kita. Masukkan username dan password jika perlu, lalu cek apakah koneksi akan berhasil dengan mengeklik tombol Test connection. Jika OK, klik OK.
Jika berkas Access kita tidak berada pada map projek kita, VB akan menanyai apakah kita ingin menyalin berkas tersebut ke map projek kita. Ini sangat disarankan jika kita hendak menggunakan program ini di komputer lain, yang susunan mapnya bisa jadi berbeda.

5. Klik Next, lalu biarkan isian yang tampil apa adanya. Connection string adalah string yang akan digunakan oleh program kita untuk melakukan koneksi ke basis data. Jika pilihan itu diberi tanda, nanti akan muncul satu berkas baru app.config tempat kita bisa mengubah connection string jika diperlukan. Klik Next lagi.

6. Silakan pilih tabel atau view mana yang ingin ditampilkan, lalu klik Finish.

Voila! DataGridView kita langsung terisi kolom-kolom yang kita ingin tampilkan. Untuk melihat datanya, jalankan saja programnya. Oh ya, form kita akan ketambahan beberapa komponen setelah menjalankan langkah-langkah ini; biarkan saja komponen-komponen itu apa adanya.

Mudah kan :) tapi andaikan saja aku perlu menampilkan data hasil olahan ke DataGridView. Dengan langkah-langkah ini apa bisa?

Waktunya pindah ke Code View :D
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Kita coba contoh sederhana saja. Misalkan saja tabel Barang sudah terisi banyak data. Nah, kita hendak mencari barang dengan nama tertentu. Setelah mengisi kotak pencarian, kita menekan tombol Cari dan hasilnya akan ditampilkan di DataGridView.

Maka, persiapkan:
1. Sebuah TextBox (aku asumsikan bernama txtNama).
2. Sebuah Button (btnCari).
3. Sebuah DataGridView polos (dgvHasil; jangan berikan data source).

Kemudian, di event btnCari_Click, ketikkan kode berikut:

Dim objConn As New OleDb.OleDbConnection
' Ganti Data Source ke lokasi basis data toko.accdb di komputer kalian
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
objConn.Open()
Dim objComm As New OleDb.OleDbCommand
objComm.Connection = objConn
Dim strSQL As String
strSQL = "SELECT NamaBarang FROM Barang WHERE NamaBarang LIKE '%" & txtNama.Text & "%'"
objComm.CommandText = strSQL
Dim objDA As New OleDb.OleDbDataAdapter, objDS As New Data.DataSet
objDA.SelectCommand = objComm
objDA.Fill(objDS)
dgvHasil.DataSource = objDS
dgvHasil.DataMember = "Table"
objConn.Close()


Catatan
Ada keanehan untuk klausa LIKE, wildcard-nya tetap % walaupun kita pakai Access (seharusnya *). Sepertinya Microsoft sudah menyadari kenyelenehannya Access jadi sekarang disamakan dengan standar SQL ;D

Silakan jalankan, lalu ketikkan nama barang sembarang (atau kosongkan saja) dan klik tombol Cari. Muncul kan hasilnya :)

So, gimana cara kerjanya?

1. Semuanya masih sama seperti saat kita hendak memasukkan data baru ke basis data:
Dim objConn As New OleDb.OleDbConnection
' Ganti Data Source ke lokasi basis data toko.accdb di komputer kalian
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
objConn.Open()
Dim objComm As New OleDb.OleDbCommand
objComm.Connection = objConn
Dim strSQL As String
strSQL = "SELECT NamaBarang FROM Barang WHERE NamaBarang LIKE '%" & txtNama.Text & "%'"
objComm.CommandText = strSQL


2. Nah, di sini baru muncul bedanya. Komandan kita ternyata mengutus anak buahnya, si DataAdapter. Dia tidak bisa bekerja sendiri, jadi muncullah partnernya Dataset. DataAdapter sendiri akan menampung hasil perintah si komandan, lalu Dataset akan mengambil datanya. Langkahnya mudah sekali:

3. Tinggal katakan pada si DataAdapter bahwa kita memberikan perintah SELECT:
objDA.SelectCommand = objComm

4. Isi datanya ke Dataset:
objDA.Fill(objDS)
Si Dataset akan otomatis mendapatkan semua data hasil perintah SELECT. Tapi ini belum bisa dibaca, jadi langkah selanjutnya...

5. Beri tahu DataGridView kita bahwa datanya dibawa si Dataset:
dgvHasil.DataSource = objDS
dan bahwa hasilnya berupa tabel:
dgvHasil.DataMember = "Table"
Kedua baris ini bisa disingkat dengan cara:
dgvHasil.DataSource = objDS.Tables(0)

Jadi deh ;)

Lebih banyak lagi
DataAdapter sebenarnya punya rekan lain: DataTable. Bedanya dengan DataSet, DataTable ini hanya menerima hasil berupa tabel, lainnya akan dia tolak :D kalau menggunakan bantuan DataTable, kodenya berubah sedikit:

Dim objDA As New OleDb.OleDbDataAdapter, objDT As New Data.DataTable
objDA.SelectCommand = objComm
objDA.Fill(objDT)
dgvHasil.DataSource = objDT


Hmm, tapi dari tadi kita langsung membaca seluruh data hasil perintah SELECT. Gimana caranya kalau kita perlu baca datanya satu per satu?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen

Èxsharaèn

Misalkan saja ada sebuah combo box yang awalnya terisi nama semua barang. Kalau ada yang mengetikkan nama barang, isi combo box itu langsung berubah menjadi hanya barang yang namanya mengandung teks yang diketikkan. Jadi, misalkan aku mengetik "pensil", hanya "Pensil" dan "Pensil 2B" yang muncul. Gimana caranya?

Untuk ini, kita harus membaca datanya satu per satu. Aku asumsikan combo box-nya bernama cboNama. Coba letakkan kode berikut di event cboNama_DropDown (even ini akan dijalankan ketika ada yang membuka daftar tarik-jatuh (dropdown list):

Dim objConn As New OleDb.OleDbConnection
' Ganti Data Source ke lokasi basis data toko.accdb di komputer kalian
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
objConn.Open()
Dim objComm As New OleDb.OleDbCommand
objComm.Connection = objConn
Dim strSQL As String
strSQL = "SELECT NamaBarang FROM Barang WHERE NamaBarang LIKE '%" & cboNama.Text & "%'"
objComm.CommandText = strSQL
Dim objDR As OleDb.OleDbDataReader
objDR = objComm.ExecuteReader
cboNama.Items.Clear()
Do While objDR.Read
    cboNama.Items.Add(objDR.GetString(0))
Loop
cboNama.SelectionStart = cboNama.Text.Length
objConn.Close()


Sebelum mencoba, pastikan ada banyak nama barang yang mirip (misal Pensil dan Pensil 2B, Kertas dan Penjepit Kertas, dsb.). Coba jalankan.

Kok bisa???

1. Masih sama seperti dulu-dulu, komandan kita masih beraksi di sini :D
Dim objConn As New OleDb.OleDbConnection
' Ganti Data Source ke lokasi basis data toko.accdb di komputer kalian
objConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Documents\toko.accdb"
objConn.Open()
Dim objComm As New OleDb.OleDbCommand
objComm.Connection = objConn
Dim strSQL As String
strSQL = "SELECT NamaBarang FROM Barang WHERE NamaBarang LIKE '%" & cboNama.Text & "%'"
objComm.CommandText = strSQL


Nah, kali ini dia mengutus anak buahnya yang lain: DataReader. Dengan ini kita bisa membaca datanya satu per satu. Caranya:

2. Biarkan si komandan mengeksekusi perintahnya, nanti si DataReader akan menangkap hasilnya:
objDR = objComm.ExecuteReader
Setelah eksekusi, DataReader otomatis akan memposisikan diri tepat sebelum baris pertama. Lah? Terus bacanya gimana?

3. Untuk membaca setiap baris, gunakan perintah Read dengan bantuan perulangan:
Do While objDR.Read
Fungsi ini akan mengembalikan nilai TRUE selama masih ada yang bisa dibaca, jadi kalau datanya sudah habis dia akan memberikan nilai FALSE. Fungsi ini juga sekaligus mengarahkan penunjuk ke baris berikutnya. Karena posisi awal DataReader tepat di belakang baris pertama, kita harus memanggil fungsi ini untuk mulai membaca baris pertama.

4. Nah, satu kekurangan DataReader, dia agak rewel saat kita hendak meminta data yang dia miliki. Kita harus tahu persis apa tipe datanya dan kolom berapa yang mau kita ambil (dikasih nama kolom dia akan tolak). Nomor kolom pun dimulai dari 0 :D
cboNama.Items.Add(objDR.GetString(0))
Ini maksudnya kita minta DataReader mengembalikan data string dari kolom ke-0 (kita sudah tahu persis bahwa ini kolom NamaBarang). Kemudian, hasilnya ditambahkan ke combo box kita.

Well, kukira sampai di sini kita sudah bisa membuat program yang mampu berkomunikasi dengan basis data: menampilkan data, menambahkan data baru, mengubah data yang sudah ada, maupun menghapus data. Kemungkinan program yang dapat dibuat menjadi tidak terbatas setelah artikel ini, jadi selamat berkreasi ;)
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
About.me https://about.me/hoshiro.exsharaen