
<p><a href="http://pojokprogrammer.net/tags/tips-dan-trik"><strong>Tips dan Trik</strong></a> | Saat membangun sebuah aplikasi database, pasti kita akan bertemu dengan kasus pengolahan data yang besar atau proses pengambilan (<em>retrieval</em>) data yang luar biasa banyak. Untuk memudahkan proses pengambilan data, dan pengolahannya, maka kita harus tahu bagaimana cara mengambil data dengan kriteria tertentu dari database. Proses Filter data ini menjadi penting karena sesungguhnya pengguna tidak memerlukan seluruh data yang ada di database, namun hanya sebagian kecil saja. Misalkan data transaksi keuangan yang tersimpan bisa jutaan row berisikan data beberapa tahun terakhir, biasanya pengguna hanya memerlukan data transaksi di bulan tertentu saja. Artikel ini akan mencoba menjelaskan cara melakukan filter data dari database berdasarkan beberapa kriteria sekaligus, yaitu berdasarkan string, angka, dan tanggal.</p>
<!--break-->
<p>Misalkan kita memiliki 2 (dua buah table) yaitu <em><strong>Orders </strong></em>dan <em><strong>OrderTypes</strong></em>. Table <em>Orders </em>menyimpan data-data transaksi berikut dengan tanggal dan jenis transaksi. Table OrderTypes menyimpan definisi jenis-jenis transaksi yang ada, misalkan transaksi Purchase Order, Deliveri Order dan sebagainya. Penampakan isi <strong>table <em>Orders </em></strong>adalah seperti pada gambar di bawah ini,</p>
<p><img alt="Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net" src="http://pojokprogrammer.net/sites/default/files/tutorial/akses1/orders.p…" style="width: 720px; height: 329px;" /></p>
<p>Sedangkan isi <strong>table <em>OrderTypes </em></strong>seperti tampak pada gambar di bawah ini.</p>
<p><img alt="Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net" src="http://pojokprogrammer.net/sites/default/files/tutorial/akses1/ordertyp…" style="width: 720px; height: 329px;" /></p>
<p>Kemudian kita coba buat sebuah <strong>desain form </strong>seperti tampak pada gambar di bawah ini. Kita akan menggunakan control <strong>TextBox </strong>untuk filter berdasarkan Nomor Transaksi, kemudian menggunakan <strong>DateTimePicker </strong>untuk filter berdasarkan tanggal transaksi, dan <strong>ComboBox </strong>untuk filter berdasarkan Jenis Transaksi. Dengan cara ini kita mendapatkan beberapa model filter sekaligus (y).</p>
<p><img alt="Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net" src="http://pojokprogrammer.net/sites/default/files/tutorial/akses1/orderfor…" style="width: 720px; height: 383px;" /></p>
<p>Berikutnya yang kita perlukan adalah code untuk proses-proses berikut ini</p>
<ul>
<li>
Inisialisasi kriteria filter tanggal transaksi</li>
<li>
Inisialisasi kriteria filter jenis transaksi</li>
<li>
proses pengambilan data dari database</li>
</ul>
<p>Untuk proses pengambilan data dari database, aplikasi contoh kita menggunakan SQL Server 2012 LocalDB dengan <strong>connection string </strong>seperti di bawah ini</p>
<pre class="brush:vbnet">
Private Const _cnString As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\dbSample.mdf;Integrated Security=True"</pre>
<p>Untuk <strong>inisialisasi kriteria filter tanggal</strong>, maka kita cukup memberikan nilai tanggal ke control DateTimePicker berupa tanggal awal dan tanggal akhir tahun saja, dengan asumsi pengguna ingin melihat data pada tahun ini secara default. Maka code-nya akan tampak seperti ini.</p>
<pre class="brush:vbnet">
Private Sub InitializeDatePicker()
' set value date time picker ke awal dan akhir tahun
DateTimePicker1.Value = "2014-01-01"
DateTimePicker2.Value = "2014-12-31"
End Sub
</pre>
<p>Untuk <strong>jenis transaksi, </strong>kita mengambil jenis-jenis transaksi yang tersedia di dalam tabel OrderTypes kemudian memuatnya ke ComboBox, sehingga code-nya akan tampak seperti ini</p>
<pre class="brush:vbnet">
Private Sub InitializeComboBox()
' siapkan koneksi database
Dim cn As New SqlConnection(_cnString)
' siapkan data adapter untuk data retrieval
Dim da As New SqlDataAdapter("select * from OrderTypes", cn)
' siapkan datatable untuk menampung data dari database
Dim dt As New DataTable
' enclose di dalam try-catch block
' untuk menghindari crash jika terjadi kesalahan database
Try
' ambil data dari database
da.Fill(dt)
' bind data ke combobox
ComboBox1.DataSource = dt
ComboBox1.ValueMember = "ID"
ComboBox1.DisplayMember = "Description"
' DONE!!!
Catch ex As Exception
' tampilkan pesan error
MessageBox.Show(ex.Message)
End Try
End Sub
</pre>
<p>Untuk proses <strong>penampilan data ke grid, </strong>maka yang kita lakukan adalah membuat perintah SQL berdasarkan kriteria yang diberikan pengguna kemudian mengambilnya dari database dan memuat data yang didapat ke dalam GridView. Maka code-nya akan tampak seperti di bawah ini.</p>
<pre class="brush:vbnet">
Private Sub RefreshGrid()
' siapkan koneksi database
Dim cn As New SqlConnection(_cnString)
' siapkan data adapter untuk data retrieval
Dim da As New SqlDataAdapter("SELECT A.*, B.Description AS TypeName " & _
"FROM Orders A JOIN OrderTypes B ON A.TypeID=B.ID " & _
"WHERE OrderNum LIKE @p1 AND TypeID = @t1 " & _
"AND OrderDate BETWEEN @d1 AND @d2 ", cn)
da.SelectCommand.Parameters.AddWithValue("@p1", "%" & TextBox1.Text & "%")
da.SelectCommand.Parameters.AddWithValue("@t1", ComboBox1.SelectedValue)
da.SelectCommand.Parameters.AddWithValue("@d1", DateTimePicker1.Value.ToString("yyyy-MM-dd"))
da.SelectCommand.Parameters.AddWithValue("@d2", DateTimePicker2.Value.ToString("yyyy-MM-dd"))
' siapkan datatable untuk menampung data dari database
Dim dt As New DataTable
' enclose di dalam try-catch block
' untuk menghindari crash jika terjadi kesalahan database
Try
' ambil data dari database
da.Fill(dt)
' bind data ke combobox
DataGridView1.DataSource = dt
' DONE!!!
Catch ex As Exception
' tampilkan pesan error
MessageBox.Show(ex.Message)
End Try
End Sub
</pre>
<p>Secara <strong>keseluruhan</strong>, Code dalam Form kita menjadi seperti ini, termasuk di dalamnya procedure New dan Event Handler untuk menangani event click di tombol Filter.</p>
<pre class="brush:vbnet">
Imports System.Data.SqlClient
Public Class Form1
Private Const _cnString As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\dbSample.mdf;Integrated Security=True"
Public Sub New()
' required by form designer
InitializeComponent()
' inisialisasi datetimepicker
InitializeDatePicker()
' inisialisasi combobox jenis transaksi
InitializeComboBox()
' refresh grid data
RefreshGrid()
End Sub
Private Sub InitializeDatePicker()
' set value date time picker ke awal dan akhir tahun
DateTimePicker1.Value = "2014-01-01"
DateTimePicker2.Value = "2014-12-31"
End Sub
Private Sub InitializeComboBox()
' siapkan koneksi database
Dim cn As New SqlConnection(_cnString)
' siapkan data adapter untuk data retrieval
Dim da As New SqlDataAdapter("select * from OrderTypes", cn)
' siapkan datatable untuk menampung data dari database
Dim dt As New DataTable
' enclose di dalam try-catch block
' untuk menghindari crash jika terjadi kesalahan database
Try
' ambil data dari database
da.Fill(dt)
' bind data ke combobox
ComboBox1.DataSource = dt
ComboBox1.ValueMember = "ID"
ComboBox1.DisplayMember = "Description"
' DONE!!!
Catch ex As Exception
' tampilkan pesan error
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub RefreshGrid()
' siapkan koneksi database
Dim cn As New SqlConnection(_cnString)
' siapkan data adapter untuk data retrieval
Dim da As New SqlDataAdapter("SELECT A.*, B.Description AS TypeName " & _
"FROM Orders A JOIN OrderTypes B ON A.TypeID=B.ID " & _
"WHERE OrderNum LIKE @p1 AND TypeID = @t1 " & _
"AND OrderDate BETWEEN @d1 AND @d2 ", cn)
da.SelectCommand.Parameters.AddWithValue("@p1", "%" & TextBox1.Text & "%")
da.SelectCommand.Parameters.AddWithValue("@t1", ComboBox1.SelectedValue)
da.SelectCommand.Parameters.AddWithValue("@d1", DateTimePicker1.Value.ToString("yyyy-MM-dd"))
da.SelectCommand.Parameters.AddWithValue("@d2", DateTimePicker2.Value.ToString("yyyy-MM-dd"))
' siapkan datatable untuk menampung data dari database
Dim dt As New DataTable
' enclose di dalam try-catch block
' untuk menghindari crash jika terjadi kesalahan database
Try
' ambil data dari database
da.Fill(dt)
' bind data ke combobox
DataGridView1.DataSource = dt
' DONE!!!
Catch ex As Exception
' tampilkan pesan error
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' refresh grid data
RefreshGrid()
End Sub
End Class
</pre>
<p>Penampakan aplikasi berjalan adalah seperti ini</p>
<p><img alt="Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net" src="http://pojokprogrammer.net/sites/default/files/tutorial/akses1/penampak…" style="width: 720px; height: 283px;" /></p>
<p><strong>Selamat Belajar</strong>, Salam <strong><span style="color:#0000ff;">Pojok </span><span style="color:#ff0000;">Programmer</span></strong><span style="color:#ff0000;"> </span>!</p>
- Log in to post comments
- 43314 views