Mengisi ComboBox Dengan Data Dari Database

Mengisi ComboBox Dengan Data Dari Database VB.net C#

Belajar Programming | Salah satu hal yang amat sangat umum dalam membuat sebuah aplikasi VB.net atau C# adalah mengisi ComboBox dengan berdasarkan data yang ada di database. Sebenarnya hal ini sangat simple namun bagi para programmer bisa jadi merupakan hal yang sangat sulit 🙂 Cara yang paling mudah adalah dengan menggunakan metoda data-binding sehingga kita bisa menghilangkan dan menghapus code iterasi yang melelahkan saat mengisi data ke combobox bersangkutan. Langkah-langkah atau algoritma dasarnya adalah sebagai berikut:

  • Siapkan koneksi database
  • Siapkan perintah SQL
  • Siapkan variable penampung data (bisa DataTable atau DataSet)
  • Ambil data dari database, masukkan ke DataTable
  • Binding data di DataTable ke ComboBox

Algortima yang sederhana di atas ketika kita terjemahkan ke dalam VB.net akan seperti ini,

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        InitializeComboBox()
    End Sub

    Private Sub InitializeComboBox()
        ' siapkan koneksi database
        Dim cn As New SqlConnection(My.Settings.LocalDatabase)
        ' siapkan data adapter untuk data retrieval
        Dim da As New SqlDataAdapter("select account_id, description from acc_accounts", cn)
        ' siapkan datatable untuk menampung data dari database
        Dim dt As New DataTable
        ' enclose in 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 = "account_id"
            ComboBox1.DisplayMember = "description"
            ' DONE!!!
        Catch ex As Exception
            ' tampilkan pesan error
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class

Sedangkan jika kita terjemahkan ke dalam C# akan menjadi seperti ini,

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace ComboBoxSample2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeComboBox();
        }

        private void InitializeComboBox()
        {
            // siapkan koneksi database
            SqlConnection cn = new SqlConnection(ComboBoxSample2.Properties.Settings.Default.LocalDatabase);
            // siapkan data adapter untuk data retrieval
            SqlDataAdapter da = new SqlDataAdapter("select account_id, description from acc_accounts", cn);
            // siapkan datatable untuk menampung data dari database
            DataTable dt = new DataTable();
            // enclose in 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 = "account_id";
                ComboBox1.DisplayMember = "description";
                // DONE!!!
            }
            catch (Exception ex)
            {
                // tampilkan pesan error
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Jika data yang ada di database seperti ini,

Mengisi ComboBox Dengan Data Dari Database VB.net c#

Maka tampilan aplikasinya jadi seperti ini,

Mengisi ComboBox Dengan Data Dari Database VB.net c#

Semoga berguna…. Happy Coding 

 

^_^

Tutorial: Membuat Laporan Sederhana Menggunakan Crystal Report di Visual Studio 2010

Tutorial Membuat Laporan Sederhana Menggunakan Crystal Report di Visual Studio 2010

Membuat Laporan Crystal Report | Kemampuan aplikasi untuk membuat sebuah laporan yang bisa dicetak ke printer adalah hal umum yang harus bisa dilakukan sebuah aplikasi desktop. Untuk itu skill ini amat sangat diperlukan oleh seorang programmer pengembang aplikasi desktop. Tutorial ini mencoba memberikan arahan langkah demi langkah cara menggunakan vb.net untuk membuat sebuah laporan crystal report sederhana namun professional menggunakan Push Method, artinya proses pengambilan data dari database dilakukan di luar Crystal Report , namun menggunakan DataSet, dan setelah data siap, Data Set bersangkutan di-Push ke Crystal Report. Studi kasus berupa Laporan Purchase Order. Aplikasi ini dibuat menggunakan C# karena dengan menguasai C# kita lebih mudah untuk migrasi ke bahasa lain seperti Java. Namun jika kita ingin membuatnya dalam bahasa lain, seperti VB.net, itu adalah hal yang sangat mudah karena coding dalam aplikasi ini hanya beberapa baris saja.

Beberapa hal lain yang perlu diperhatikan antara lain, tutorial ini tidak membahas cara menjalankan Visual Studio, cara membuat Project baru, cara menambah Form atau DataSet baru, cara membuka Server Explorer dan sebangsanya. Ane berasumsi agan semua sudah mengetahui cara-caranya. Tutorial ini juga tidak membahas cara menyimpan data master detail ke dalam database, karena concern kita saat ini hanyalah manmpilkan data yang sudah ada dalam database menggunakan crystal report. Database yang digunakan adalah SQL Server Compact Database. Tutorial ini juga tidak membahas cara membuat database baru, cara koneksi database di .NET, cara design database yang baik dan lain sebagainya. Ane berasumsi agan semua sudah mengetahui cara-caranya.

 

Membuat Project dan DataSet

Buat project baru dan Siapkan database, untuk tutorial ini ane pakai Local Database (dbSample.sdf). Note: cara membuat project baru dan design database atau menggunakan database lain tidak dibahas di sini.

[collapsed title=Desain Database] [/collapse]

Tambahkan DataSet baru, beri nama dsSample.xsd, setelah itu buka Database menggunakan Server Explorer. Lakukanlah drag dan drop table yang ada di Database Explorer ke atas dataset designer dsSample.xsd menjadi seperti yang ada di gambar.

[collapsed title=Desain Datasat Setelah Proses Drag-Drop] [/collapse]

Buat custom query untuk mengambil data Companies berdasarkan CompanyID, beri nama method Fill dengan FillByCustomerID dan method Return DataTable dengan GetDataByCompanyID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Companies]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data Orders berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data OrderDetails berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table OrderDetails]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data Items berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil list Orders yang terdenormalisasi, beri nama method Fill dengan FillList dan method Return DataTable dengan GetDataList. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk List Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Compile aplikasi (Ctrl-F5). Langkah ini penting agar dapat maju ke langkah berikutnya. Jika tidak dilakukan kompilasi, maka Crystal Report tidak bisa menggunakan DataSet – yang kita siapkan pada langkah sebelumnya – sebagai definisi report.

Sekarang DataSet sudah siap kita gunakan

[collapsed title=Hasil Akhir DataSet] [/collapse]
 

Membuat Report Definition

Tambahkan Crystal Report ke project untuk laporan List Order, pilih “Using the Report Wizard” untuk membuat definisi report, kemudian pilih Create New Connection > ADO.NET (XML) sebagai data source dan arahkan File Path ke DataSet dsSample.xsd yang kita buat pada langkah sebelumnya.

[collapsed title=Koneksi report ke data source]

[collapsed title=Using the Report Wizard][/collapsed]
[collapsed title=Create New Connection][/collapsed]
[collapsed title=Arahkan File Path][/collapsed]
[collapsed title=Data source terkoneksi][/collapsed]

[/collapsed]

Tambahkan ke Selected Tables: Companies, Orders, OrderDetails, dan Items ke list “Selected Tables”, kemudian klik next untuk melihat relasi antar tabel

[collapsed title=Selected Tables]

[collapsed title=Selected Tables][/collapsed]
[collapsed title=Relationship antar Tabel][/collapsed]

[/collapsed]

Tambahkan field-field yang yang akan ditampilkan ke list “Fields to Display”, kemudian tambahkan juga report grouping, summary, dan filtering jika diperlukan, akhiri dengan memilih template yang diinginkan.

[collapsed title=Fields to Display]

[collapsed title=Fields to Display][/collapsed]
[collapsed title=Grouping Fields][/collapsed]
[collapsed title=Summary Fields][/collapsed]
[collapsed title=Filtering Fields][/collapsed]
[collapsed title=Pilih Templete][/collapsed]

[/collapsed]

Tampilan standar dari wizard, Silakan ubah layoutnya sesuai keinginan agan, misalkan menjadi seperti ini,

[collapsed title=Hasil report wizardwizard]

[collapsed title=Tampilan standar dari wizard][/collapsed]
[collapsed title=ubah layoutnya][/collapsed]

[/collapsed]

Tambahkan formula field untuk menghitung nilai order dengan cara klik kanan pada item “Formula Field” di window “Field Explorer”. Beri nama formula tersebut “ItemAmount” dan isikan rumusnya seperti pada gambar, kemudian klik tombol “Save and Close” di pojok kanan. Note: agar tidak perlu ketik ulang nama field di formula editor, bisa dengan cara klik ganda pada field yang ada di Field Tree.

[collapsed title=Formula Field]

[collapsed title=Tambah Formula Field][/collapsed]
[collapsed title=Tentukan Rumusnya][/collapsed]
[collapsed title=Masukkan formula field ke report][/collapsed]

[/collapsed]

Tambahkan Subtotal untuk field ItemAmount, dengan cara klik kanan mouse pada field Item Amount, kemudian pilih menu “Insert” -> “Summary”, kemudian ubah “Summary Location” menjadi “Group 1” Hasilnya akan muncul field summary persis di bawah field “ItemAmount”.

[collapsed title=Subtotal ]

[collapsed title=Buat field summary][/collapsed]
[collapsed title=Field summary tampil di report][/collapsed]

[/collapsed]

Rapikan layout report kita, misalnya menjadi seperti ini. Note: Jika “GroupFooterSection2” tidak ada pada report, silahkan klik kanan mouse pada “GroupFooterSection” kemudian pilih menu “Insert Section Below”

[collapsed title=Finishing][/collapsed]

 

Buat Form untuk Menampilkan Report

buat form baru kemudian beri nama frmReportViewer, setelah itu drag dan drop komponen CrystalReportViewer dari toolbox, hasilnya akan tampak seperti gambar di bawah ini.

[collapsed title=desain form report viewer][/collapsed]

Kemudian buka code editor dan tambahkan coding seperti di bawah ini. Metoda yang kita pakai adalah dengan memanfaatkan constructor form untuk menerima argumen berupa report yang akan di tampilkan.

[collapsed title=coding form report viewer]

        using CrystalDecisions.CrystalReports.Engine;

        public frmReportViewer(ReportClass rpt)
        {
            InitializeComponent();
            InitializeReport(rpt);
        }

        private void InitializeReport(ReportClass rpt)
        {
            this.crystalReportViewer1.ReportSource = rpt;
            this.crystalReportViewer1.Zoom(0);
        }

[/collapsed]

 

Buat Form untuk List Order

Buka desain Form1, ubah namanya menjadi “frmMain” kemudian tambahkan 1 buah button dan 1 buah DataGridView seperti yang tampak dalam gambar. Selanjutnya menggunakan property window, ubah nama button1 menjadi btnPrintForm, dan dataGridView1 menjadi grid1.

[collapsed title=Desain Awal][/collapsed]

Kemudian drag dan drop ke form dari toolbox grup “CrystalReports1 Components”, dsSample dan OrdersTableAdapter, sehingga desain form akan tampak sepert gambar di bawah ini. Selanjutnya ubah property berikut ini untuk grid1,

  • DataSource = dsSample1
  • DataMember = Orders
  • ReadOnly = True
  • AllowUserToAddRows = False
  • AllowUserToDeleteRows = False
  • AutoSizeColumnMode = Fill

Jika sudah maka tampilan form akan berubah menjadi seperti gambar di bawah ini

 

[collapsed title=Setelah Set Property untuk grid][/collapsed]

Sekarang saatnya menambahkan coding untuk mengambil data dari database dan ditampilkan ke grid. Silakan buka Code Editor dan tambahkan code seperti di bawah ini

[collapsed title=code untuk retrieve list order]

        public frmMain()
        {
            InitializeComponent();
            InitializeDatabase();
        }

        private void InitializeDatabase()
        {
            ordersTableAdapter1.FillList(dsSample1.Orders);
        }

[/collapsed]

Coding untuk Menampilkan Report adalah sebagai berikut, Buka desain frmMain kemudian klik ganda pada button btnPrintForm untuk membuka code editor, kemudian tambahkanlah code seperti di bawah ini

[collapsed title=Coding Tampilkan report]

        private void btnPrintForm_Click(object sender, EventArgs e)
        {
            // ganti cursor
            Cursor = Cursors.WaitCursor;

            // ambil OrderID
            int col = 0;                                  // nomor index field OrderID
            int row = grid1.SelectedCells[0].RowIndex;    // nomor index row yang dipilih
            int id = (int)grid1[col, row].Value;          // order id yang terpilih

            // siapkan pengambilan data yng ingin ditampilkan di report
            dsSample ds = new dsSample();
            OrdersTableAdapter orders = new OrdersTableAdapter();
            OrderDetailsTableAdapter details = new OrderDetailsTableAdapter();
            ItemsTableAdapter items = new ItemsTableAdapter();
            CompaniesTableAdapter comp = new CompaniesTableAdapter();

            // ambil data dari databse sesuai OrderID
            comp.FillByCompanyID(ds.Companies, id);
            items.FillByOrderID(ds.Items, id);
            orders.FillByOrderID(ds.Orders, id);
            details.FillByOrderID(ds.OrderDetails, id);

            // siapkan report
            ReportClass rpt = new rptOrderForm();
            rpt.SetDataSource(ds);

            // siapkan report viewer
            Form f1 = new frmReportViewer(rpt);
            f1.ShowDialog();

            // ganti cursor
            Cursor = Cursors.Default;
        }

[/collapsed]

 

 

Hasilnya gan….

Hasil akhir tampilan form aplikasi seperti ini

[collapsed title=List Order][/collapsed]

Hasil akhir tampilan report yang dihasilkan seperti ini

[collapsed title=Tampilan Report][/collapsed]

Download Source Code di sini gan!

[collapsed title=Source Code silakan download di sini gan] Download Source Code Sekarang
Download Crystal Report for VS2010 Sekarang [/collapsed]

 

Semoga berguna

 

 

.

Aplikasi Inventory Sederhana – Analisa dan Desain Database

Aplikasi Inventory Sederhana - Analisa dan Desain Database

Design Database adalah salah satu hal penting yang perlu diperhatikan dalam membuat aplikasi perkantoran. Dalam membuat design database, ikutilah kaidah-kaidah yang pernah kita dapatkan semasa kuliah, terutama Normalisasi, minimal sampai dengan bentuk 3NF. Kesalahan dalam membuat design database dapat berakibat fatal, misalnya sulit membuat coding dan men-generate report yang kita inginkan. Dan jika sampai harus mengubah design database maka akan banyak waktu terbuang karena kita harus menyesuaikan kembali coding yang sudah dibuat sebelumnya. Oleh karena itu sediakanlah waktu dan pikiran yang cukup dalam men-design database ini.

Artikel ini adalah bagian dari artikel berseri tentang Tutorial Membuat Aplikasi Inventory Sederhana Menggunakan VB.net dan Database MySQL

Dalam membuat design database Aplikasi Inventory atau Aplikasi Stok Barang ini, kami juga menyengajakan diri untuk membuat design database menggunakan bahasa inggris, tujuannya selain melatih skill bahasa inggris kita, juga untuk melatih diri kita, siapa tahu aplikasi ini akan di-publish menjadi open source, atau kita berkesempatan berkontribusi dalam project open source lain.

Berdasarkan analisa dan design aplikasi yang tertuang dalam artikel sebelumnya, maka kita memerlukan sejumlah table untuk menyimpan data-data Barang dan Transaksi Keluar Masuk Barang. Untuk itu, sejumlah table yang diperlukan antara lain:

Tabel Barang

Table untuk menampung data master barang ini akan kita beri nama items. Data dictionary lengkapnya adalah sebagai berikut:

No. Nama Field Tipe Data Keterangan
1. id integer Primary Key, Auto Increment
2. code varchar(20) Kode barang berupa text bebas maksimal 20 karakter, bisa digunakan sebagai barcode
3. name varchar(100) Nama barang maksimal 100 karakter
4. quantity_on_hand decimal(10,2) Quantity barang terakhir yang saat ini ada di gudang
5. remarks text Keterangan lebih lengkap tentang barang bersangkutan

Tabel Jenis Transaksi

Tabel ini akan berisi kode untuk menentukan jenis transaksi dan kita beri nama transaction_types. Untuk aplikasi ini akan ada 2 (dua) jenis transaksi yaitu Transaksi Barang Masuk (kita beri kode BM) dan Transaksi Barang Keluar (kita beri kode BK). Data dictionary lengkapnya adalah sebagai berikut:

No. Nama Field Tipe Data Keterangan
1. id integer Primary Key, Auto Increment
2. code varchar(20) Kode jenis transaksi berupa text bebas maksimal 20 karakter
3. name varchar(100) Nama panjang yang lebih deskriptif, maksimal 100 karakter

Tabel Transaksi

Tabel ini akan berisi seluruh transaksi inventory dari aplikasi yang akan kita buat. Untuk membedakan Transaksi Barang Masuk dengan Transaksi Barang Keluar kita sediakan field type_id yang merupakan Foreign Key yang me-refer ke . Data dictionary lengkapnya adalah sebagai berikut:

No. Nama Field Tipe Data Keterangan
1. id integer Primary Key, Auto Increment
2. type_id integer Foreign Key refer ke tabel transaction_types, untuk membedakan Transaksi Barang Masuk atau Keluar
3. trans_code varchar(100) Nama panjang yang lebih deskriptif, maksimal 100 karakter
4. trans_date date Tanggal transaksi
5. remarks text Teks bebas untuk keterangan, silakan mengarang di field ini juga boleh

Tabel Detil Transaksi

Tabel ini akan berisi seluruh transaksi inventory dari aplikasi yang akan kita buat. Untuk membedakan Transaksi Barang Masuk dengan Transaksi Barang Keluar kita sediakan field type_id yang merupakan Foreign Key yang me-refer ke . Data dictionary lengkapnya adalah sebagai berikut:

No. Nama Field Tipe Data Keterangan
1. id integer Primary Key, Auto Increment
2. trans_id integer Foreign Key refer ke tabel transactions, untuk record detil transaksi ini milik transaksi yang mana
3. item_id integer Foreign Key refer ke tabel items, untuk menentukan barang mana yang harus diubah status stock-nya
4. quantity decimal(10,2) Jumlah barang yang masuk atau keluar
5. remarks text Teks bebas untuk keterangan, silakan mengarang di field ini juga boleh

Diagram ER

Diagram ER menggunakan notasi IDEF1X dari desain database untuk aplikasi inventory sederhana ini adalah sebagai berikut.

Design Database Aplikasi Inventiry Sederhana Menggunakan VB.net

Script Database

Sedangkan script sql create table-nya adalah sebagai berikut.

create table items (
  id int auto_increment primary key,
  code varchar(20) not null,
  name varchar(100) not null,
  quantity_on_hand decimal(10,2) not null default 0,
  remarks text null
) ;

create table transaction_types (
  id int auto_increment primary key,
  code varchar(20) not null,
  name varchar(100) not null
) ;

create table transactions (
  id int auto_increment primary key,
  type_id int not null,
  trans_code varchar(20) not null,
  trans_date varchar(100) not null,
  remarks text null,
  foreign key(type_id) references transaction_types(id)
) ;

create table transaction_details (
  id int auto_increment primary key,
  trans_id int not null,
  item_id int not null,
  quantity decimal(10,2) not null default 0,
  remarks text null, 
  foreign key (trans_id) references transactions(id), 
  foreign key (item_id) references items(id) 
) ;

Simpulan

Dengan demikian selesailah sudah proses analisa dan desain kita. Dengan tersedianya Design Aplikasi dan Design Database, maka langkah selanjutnya kita bisa membuat Aplikasi-nya dengan lebih mudah dan terarah.

^_^

Aplikasi Inventory Sederhana – Analisa dan Desain Aplikasi

Aplikasi Inventory Sederhana - Analisa dan Desain Aplikasi

Analisa dan Desain biasanya merupakan salah satu langkah yang kadang disepelekan kebanyakan programmer, terutama programmer pemula dan single fighter, karena dianggap menghabiskan waktu saja, Kebanyakan programmer lebih memilih untuk langsung duduk di depan komputer dan melakukan coding, hasilnya biasanya adalah kebingungan yang sangat tentang apa yang harus mereka lakukan pertama kali. Padahal analisa dan desain sesungguhnya akan membantu kita mengarahkan dan mengetahui fitur apa saja yang harus dibuat dalam aplikasi yang sedang dikembangkan ini. Dalam membuat Aplikasi Inventory Sederhana atau Aplikasi Stok Barang ini, kita akan memanfaatkan software StarUML untuk membuat Use Case Diagram aplikasi ini. Use Case Diagram menggambarkan “apa” saja, atau fitur yang harus ada dalam aplikasi yang sedang kita buat ini. Dan untuk memudahkan, kita akan membatasi lingkup tutorial ini sesuai dengan apa yang tercantum dalam Use Case Diagram yang kita buat sekarang.

Artikel ini adalah lanjutan dari artikel berseri tentang Tutorial Membuat Aplikasi Inventory Sederhana Menggunakan VB.net dan Database MySQL

analisa dan desain use case aplikasi inventory vbnet vb.net mysql sederhana

Aplikasi ini akan kita bagi menjadi beberapa module meliputi

  • Modul Master Barang
  • Modul Transaksi Inventory
  • Modul Laporan

 

Pembagian modul ini nantinya juga harus tercermin dalam code vb.net yang kita buat. Jika kita perhatikan dalam gambar, terlihat bahwa Modul Transaksi dan Modul Laporan bergantung pada Modul Master, pada saat yang sama Modul Laporan juga bergantu pada Modul Transaksi. Hal ini sangatlah wajar karena Transaksi  tidak bisa dilakukan tanpa adanya data Master, dan Laporan tidak bisa dibuat tanpa tersedianya data dari Modul Master dan Modul Transaksi. Setelah kita tahu module apa saja yang perlu dibuat, maka kita harus mendetilkan masing-masing modul dengan diagram use case-nya.

Modul Master Barang

Modul Master Barang akan berisikan use-case berikut ini dengan fungsinya masing-masing antara lain,

  • Mengelola Data Master Barang. Use Case ini menggambarkan proses pengelolaan data Master Barang, skenario utama use case ini adalah melihat list barang yang tersimpan dalam database, pengguna kemudian dapat melakukan filtering untuk mencari data barang yang diinginkan. Extension, atau skenario alternatif, dari use case ini meliputi,
    • Menambah Barang Baru. Pengguna akan menekan tombol tertentu yang akan menampilkan form entri data barang agar pengguna bisa mengisikan data barang yang akan dibuatnya
    • Mengubah Data Barang. Pengguna akan memilih data barang yang akan diubah datanya kemudian menekan tombol tertentu, atau melakukan klik ganda pada data bersangkutan dan sistem akan menampilkan form berisikan data barang yang ingin diubah.
    • Menghapus Data Barang. Pengguna akan memilih data barang yang akan dihapus, kemudian menekan tombol tertentu. Sistem kemudian akan memberikan konfirmasi apakah pengguna benar-benar akan melakukan penghapusan data.

analisa dan desain use case modul master aplikasi inventory vbnet vb.net mysql sederhana

Modul Transaksi

Modul Transaksi akan berisikan use-case berikut ini dengan fungsinya masing-masing antara lain,

  • Mengelola Transaksi Barang Masuk. Use Case ini menggambarkan proses pengelolaan data Transaksi Barang Masuk, skenario utama use case ini adalah melihat list transaksi yang tersimpan dalam database, pengguna kemudian dapat melakukan filtering untuk mencari data transaksi yang diinginkan. Extension, atau skenario alternatif, dari use case ini meliputi,
    • Menambah Transaksi Barang Masuk Baru. Pengguna akan menekan tombol tertentu yang akan menampilkan form entri data transaksi agar pengguna bisa mengisikan transaksi yang akan dibuatnya
    • Mengubah Data Transaksi Barang Masuk. Pengguna akan memilih data transaksi yang akan diubah datanya kemudian menekan tombol tertentu, atau melakukan klik ganda pada data bersangkutan dan sistem akan menampilkan form berisikan data transaksi yang ingin diubah.
    • Menghapus Data Transaksi Barang Masuk. Pengguna akan memilih data transaksi yang akan dihapus, kemudian menekan tombol tertentu. Sistem kemudian akan memberikan konfirmasi apakah pengguna benar-benar akan melakukan penghapusan data.

analisa dan desain use case modul transaksi aplikasi inventory vbnet vb.net mysql sederhana

  • Mengelola Transaksi Barang Keluar. Use Case ini menggambarkan proses pengelolaan data Transaksi Barang Keluar, skenario utama use case ini adalah melihat list transaksi yang tersimpan dalam database, pengguna kemudian dapat melakukan filtering untuk mencari data transaksi yang diinginkan. Extension, atau skenario alternatif, dari use case ini meliputi,
    • Menambah Transaksi Barang Keluar Baru. Pengguna akan menekan tombol tertentu yang akan menampilkan form entri data transaksi agar pengguna bisa mengisikan transaksi yang akan dibuatnya
    • Mengubah Data Transaksi Barang Keluar. Pengguna akan memilih data transaksi yang akan diubah datanya kemudian menekan tombol tertentu, atau melakukan klik ganda pada data bersangkutan dan sistem akan menampilkan form berisikan data transaksi yang ingin diubah.
    • Menghapus Data Transaksi Barang Keluar. Pengguna akan memilih data transaksi yang akan dihapus, kemudian menekan tombol tertentu. Sistem kemudian akan memberikan konfirmasi apakah pengguna benar-benar akan melakukan penghapusan data.

analisa dan desain use case modul transaksi aplikasi inventory vbnet vb.net mysql sederhana

Modul Laporan

Modul Laporan akan berisikan use-case berikut ini dengan fungsinya masing-masing antara lain,

  • Melihat Laporan Kartu Stok. Sederhana saja, aplikasi akan menampilkan kronolagi keluar masuk barang sesuai dengan kriteria kode barang yang diberikan oleh pengguna.
  • Melihat Laporan Mutasi Stok. Berdasarkan periode tertentu sesuai input dari pengguna, Aplikasi akan menampilkan summary dari total keluar dan masuk dari masing-masing barang.

analisa dan desain use case modul laporan aplikasi inventory vbnet vb.net mysql sederhana

Simpulan

Selesailah kita mendefinisikan semua fitur dari Aplikasi yang akan kita bangun. Teman-teman mungkin bertanya-tanya, “Kenapa tidak ada modul Security? Apakah pengguna dapat menggunakan Aplikasi ini tanpa Login terlebih dahulu?” Jawabannya adalah, kita dengaja membatasi lingkup tutorial ini. Mengenai Modul security yang mengatur hak akses pengguna silakan dikembangkan sendiri, atau…. jika ada kesempatan, mungkin akan kita buatkan tutorialnya tersendiri.

Tetap Semangat!

Aplikasi Inventory Sederhana

Aplikasi Inventory Sederhana menggunakan VB VBnet MySQL

Membuat Aplikasi Inventory Sederhana atau Aplikasi Stok Barang adalah salah satu topik yang sangat umum, dan sering dijadikan sebagai salah satu topik skripsi, atau sekedar untuk mempelajari bahasa pemrograman tertentu. Aplikasi inventory juga menjadi topik yang cukup digemari karena kemungkinan pengguna yang sangat banyak, mulai dari warung-warung pinggir jalan sampai dengan hipermarket akan memerlukan aplikasi inventory untuk mengontrol status barang yang mereka jual. Bagi seorang programmer pemula, membuat aplikasi inventory juga bisa menjadi batu loncatan untuk membangun aplikasi perkantoran yang jauh lebih rumit.

Untuk itu saya akan mencoba membuat sebuah Tutorial Membuat Aplikasi Inventory Sederhana Menggunakan VB.net dan Database MySQL. VB.net dipilih karena merupakan salah satu bahasa yang sangat populer di Indonesia, dan sama halnya dengan database MySQL. Tutorial ini akan dibuat berseri menjadi artikel-artikel kecil untuk memudahkan teman-teman mempelajari konsep yang ada di dalamnya.

Struktur dari tutorial ini akn dibagi-bagi menjadi subtopik kecil adalah sebagai berikut:

  1. Analisa dan Desain Aplikasi. Menjabarkan hasil analisa dan desain untuk aplikasi yang akan dibuat. Untuk memudahkan, Diagram UML Use Case akan digunakan untuk menggambarkan fitur-fitur yang akan tersedia dalam Aplikasi Inventory Sederhana ini.
  2. Analisa dan Desain Database. Menjabarkan hasil analisa dan desain database yang akan digunakan untuk menyimpan data barang dan transaksinya. Notasi IDEF1X akan digunakan untuk diagram desain database-nya
  3. Penggunaan Trigger untuk Update Stok Barang. Menjabarkan desain database trigger untuk melakukan proses update saldo stok barang setiap kali ada transaksi barang masuk dan transaksi barang keluar. Artikel ini dilengkapi dengan test langkah-demi-langkah untuk mempermudah pemahaman materi.
  4. Desain User Interface. Menjabarkan desain umum user interface dan pemanfaatan visual inheritance untuk mendapatkan tampilan yang konsisten untuk semua form dalam aplikasi ini.
  5. Desain Data Access Layer. Menjabarkan desain lapisan data akses untuk mempermudah kita membuat aplikasi ini. Untuk Data Access Layer ini akan kita gunakan ADO.net 2.0 terlebih dahulu untuk mempermudah teman-teman dalam migrasi dari VB6 ke VB.net. Kalau ada kesempatan nanti kita bisa buat menggunakan Entity Framework.
  6. Membuat Form Master Barang. Menjabarkan detil langkah demi langkah membuat form master barang, mencakup keseluruhan fungsi CRUD (Created Read Update Delete) untuk data barang.
  7. Membuat Form Transaksi Barang Masuk. Menjabarkan detil langkah demi langkah membuat form transaksi barang masuk, mencakup keseluruhan fungsi CRUD (Created Read Update Delete) untuk data transaksi barang masuk.
  8. Membuat Form Transaksi Barang Keluar. Menjabarkan detil langkah demi langkah membuat form transaksi barang keluar, mencakup keseluruhan fungsi CRUD (Created Read Update Delete) untuk transaksi barang keluar.
  9. Membuat Form Laporan Kartu Stok, Menjabarkan pembuatan form yang menampilkan data kartu stok masing-masing barang, meliputi kronologis keluar masuknya barang.
  10. Membuat Form Laporan Mutasi Stok, Menjabarkan pembuatan form yang menampilkan data kartu stok keseluruhan barang, berupa summary barang masuk dan keluar serta saldo terakhir barang tercatat di gudang.

 

Jadi….. Bookmark segera artikel ini, karena artikel-artikel lanjutan akan diterbitkan secara periodik. Dan mudah-mudahan tutorial ini dapat membantu teman-teman mempelajari VB.net.

Semangat Belajar!

^_^

Renumbering Record Data Dengan VB.net dan SQL Server

Salah seorang member di salah satu grup di facebook pernah bertanya, bagaimana mengurutkan nomor kode jika data record dihapus. Sederhana sebenarnya, tapi kita memerlukan pendekatan yang sedikit rumit dan kemungkinan akan memakan resource dari sisi server (apabila data sangat banyak).

Ilustrasi dari pertanyaan tersebut adalah sebagai berikut:

Original data:
001    Budi
002    Rudi
003    Fahmi

Pada suatu saat, user akan menghapus data dengan kode 002. Tetapi aplikasi harus dapat mengubah nama Fahmi mempunyai kode 002 (menggantikan Rudi yang telah dihapus), dan seterusnya untuk record yang dibawahnya. Intinya, aplikasi ini harus dapat menangani sequensial nomor kode.

Sebenarnya dengan berbagai pendekatan logika dan lain-lain, hal ini bisa saja diwujudkan. Tetapi ada permasalahan lain, bagaimana jika data ini mempunyai relasi ke tabel lain. Misal, Rudi mempunyai histori di sebuah tabel, sedangkan Fahmi tidak mempunyai histori di tabel tersebut. Jika kode Fahmi (003) diganti menjadi kode nya Rudi (002), maka apakah selanjutnya Fahmi mempunyai histori di tabel tersebut?

Bisa ya bisa tidak. Jika anda seorang DB Admin yang cool, maka anda akan memikirkan masalah relasi antar tabel. Anda bisa menentukan apakah aktifitas UPDATE dan DELETE akan mempunyai efek ke tabel lain yang berelasi. Pada SQL Server nya Microsoft sudah ada fitur untuk membuat relasi antar tabel, dan pada relasi itu kita bisa mengatur Cascade Update dan Cascade Delete. Misalkan kita atur menjadi Cascade, maka perubahan data dari tabel master akan mempunyai efek ke tabel lain. Di tabel master, saya menghapus kode 002, maka pada tabel yang berhubungan, record dengan kode 002 akan terhapus.

Pada gambar di atas, dapat dilihat bahwa tabel siswa dan history berelasi melalui field idsiswa. Selanjutnya perhatikan gambar di bawah ini:

Perhatikan properties dari relasi pada gambar. Untuk Insert and Update Specification, saya buat rule Cascade untuk masing-masing Delete Rule dan Update Rule. Sampai tahap ini, pendekatan saya untuk membuat data itu terintegritas sudah cukup. Selanjutnya kita selesaikan permasalahan pengurutan nomor kode jika terjadi penghapusan data dan kode tidak menjadi urut. Urutan yang dikehendaki adalah 001, 002, 003, 004 dan seterusnya. Ingat, tipe data yang diurutkan adalah varchar, bukan Int. Ini menjadi lebih sulit lagi lho. #trust me.

 

Logika dan pemecahan masalah.

Jika anda berpikir untuk melakukan pengurutan dengan tipe angka adalah hal yang paling simpel, maka saya sepakat. Ada banyak pendekatan untuk langkah ini, tapi saya hanya mengambil satu pendekatan saja untuk solving masalah ini.

Pertama, saya melakukan query untuk menghapus sebuah record. Dan saya tidak perlu kuatir untuk tabel relasinya 🙂

Kedua, saya melakukan ALTER Tabel, untuk membuat sebuah id bayangan yang bertipe data INT, dan mempunyai Identity(1,1).

"ALTER TABLE siswa ADD idbayangan INT IDENTITY(1,1) "

Ketiga, setelah idbayangan terbentuk (yang harapan saya adalah mempunyai nomor yang urut), maka melalui program VB, saya melakukan update terhadap field idsiswa (pada contoh ini), dengan reformating untuk menambahkan leading zero, yang pastinya update terhadap idsiswa ini, akan berefek juga terhadap tabel histori.

Coba perhatikan gambar di bawah adalah kondisi sebelum delete:

Pada gambar terlihat, id 001 dimiliki oleh orang bernama Koko, mempunyai dua buah history di tabel history. Id 002 adalah seseorang bernama Amir, mempunyai 2 record di tabel history. Id 003 bernama Linda, memiliki sebuah record di tabel history. Saya akan mencoba menghapus ID 001, selanjutnya ID 002 akan menjadi 001, ID 001 dengan nama koko di tabel history akan hilang, dan ID 001 di history menjadi milik Amir.

Cek gambar di bawah setelah di delete:

yak, sampai disini sudah sesuai dengan yang diinginkan. File dari project ini dapat di download di : http://www.mediafire.com/?91qvfv72ba6ij2z

Catatan:

sampel ini belum di test untuk data dengan jumlah record yang banyak. Bisa di optimalkan selanjutnya dengan memakai triger maupun cursor. Belum dites juga untuk concurency. This is just a basic sample.

LINQ Tuts. Part 2: Dengan contoh yang dapat di download)

LINQ dan Extension Method

Katakanlah kita mempunyai sebuah objek array dengan nama arrayNama. Setelah mendeklarasikan objek array ini, untuk menggunakannya kembali biasanya kita mengetik nama dari array tersebut dan selanjutnya menekan tanda "titik" untuk mengaktfkan intellisense. Pada saat kita menggunakan intellisense akan muncul method-method yang disarankan oleh intellisense.

Gambar 1. Extension Method.

 

Gambar di atas adalah gambar dari sebuah intellisense yang menampilkan method-method yang disarankan untuk operasi apa yang akan kita lakukan. Extension method terindikasi dari tanda panah biru yang menghadap ke bawah. Method Select, Single, Sum, Max dan lain-lain berkaitan erat dengan operasi-operasi menggunakan LINQ dan merupakan operator standar dari operasi LINQ.

 

Contoh penggunaan LINQ dalam kehidupan sehari-hari seorang programmer

Pada tulisan ini, saya ingin menampilkan contoh yang biasa saya gunakan untuk memecahkan berbagai persoalan dengan menggunakan LINQ. Mungkin bagi para pembaca masih terlalu basic, hehehe. Prinsipnya begini, selagi semuanya masih bisa dijadikan object maka bisa diselesaikan dengan menggunakan LINQ. Untuk tahap pertama, saya ingin mencoba melakukan berbagai macam operasi string dengan menggunakan LINQ.

Permasalahan:

Ada sebuah kalimat di dalam textbox. Kalimat itu terdiri atas beberapa kata dan karakter.

  1. Hitunglah jumlah kata, karakter, huruf dan angka dalam kalimat tersebut.
  2. Hitung kata apa yang paling sering muncul, dan berapa jumlahnya
  3. Hitung huruf apa yang paling sering muncul dan berapa jumlahnya
  4. Buatkan sebuah textbox yang gunanya untuk memfilter kata. Nanti pada textbox ini, kita masukkan sebuah kata. Dari kata yang kita masukkan ini, hitunglah dalam kalimat ada berapa kata yang cocok dengan kata yang dimasukkan ini.
  5. Buatlah sebuah datagridview, kemudian lakukan pengelompokan kata dan jumlah kemunculannya, tampilkan di datagridview.
  6. Hampir sama dengan nomor 5, tetapi yang dikelompokkan adalah huruf dan jumlah kemunculannya
  7. Hampir sama dengan nomor 5, tetapi yang dikelompokkan adalah angka dan jumlah kemunculannya.

Jika saya memposisikan sebagai mahasiswa yang baru belajar bahasa program, untuk soal nomor 1 mungkin mudah. Nomor 2 mayanlah. Nomor 3 udah mulai berkeringat. Nomor 4 sudah mulai gelisah, liat kiri kanan. Nomor 5, 6, 7 mungkin dah pingsan di kelas.

Tetapi hal-hal di atas ternyata sangat mudah diselesaikan dengan operasi LINQ.

Untuk soal nomor 1 bagian hitung kata, penyelesaian ala LINQ nya adalah:

Dim kata As String() = txtKalimat.Text.Split(New Char() {}, StringSplitOptions.RemoveEmptyEntries)
Dim jumlahKata As Integer = kata.Count
MessageBox.Show(jumlahKata)

Sebenarnya sintax di atas belum masuk query syntax dari LINQ, tapi menggunakan extension method Count, yang mana method ini masi erat hubungannya dalam operasi-operasi LINQ

Untuk soal nomor 1 bagian hitung char, penyelesaian ala LINQ nya sbb:

Dim jumlahChar As Integer = (From chars In txtKalimat.Text Select chars).Count

Masih termasuk mudahlah ini. Padanannya juga dengan fungsi Length, kita dapat menghitung panjang char dari suatu kalimat.

Untuk soal nomor 1 bagian hitung jumlah huruf (bukan spasi, angka, tanda titik dll), penyelesaian LINQ nya sbb:

Dim huruf = (From kalimat In txtKalimat.Text Where Char.IsLetter(kalimat) Select kalimat).Count

Disini sudah mulai dirasakan enaknya penggunaan LINQ. Kalau cara ga pake LINQ, dalam bayangan saya mungkin melakukan pengulangan terhadap kalimat, terus di cek apakah huruf atau bukan (biasanya sih pengecekan dengan ASCII), jika termasuk huruf, maka tambahkan ke result integer, jika tidak maka tidak ada penambahan. Hmmm.. dah kebayang juga sih ribetnya. Itu masih di case hitung huruf. Kalau hitung angka gimana? ASCII nya ganti lagi. Dengan LINQ, kita hanya modifikasi baris di atas, di bagian Char.IsLetter(kalimat) tinggal kita ganti ke Char.IsDigit(kalimat). Selesai. 🙂

Lanjut ke soal Nomor 2. Kalau cara yang paling awam untuk soal nomor dua adalah, lakukan split, kemudian lakukan looping insert ke database. Selanjutnya lakukan query dengan group by kata. Letakkan di view, lakukan query kedua dengan sintax sql : "select top 1 from namaView order by jumlah descenting". Sudah bisa dibayangkan berapa baris sintax nya…

Dengan LINQ, konsep yang sama bisa diselesaikan seperti berikut:

Dim kata As String() = txtKalimat.Text.Split(New Char(){}, StringSplitOptions.RemoveEmptyEntries)
Dim maxKata = From k In kata Group By k Into Group Select textKata = k, jumlah = Group.Count Order By jumlah Descending
Dim kataTerbanyak = maxKata.First

MessageBox.Show("Kata yang paling banyak muncul adalah: " & kataTerbanyak.textKata & vbCrLf & "Sebanyak :" & kataTerbanyak.jumlah)

Baris pertama melakukan split dari kalimat. Baris kedua lumayan ribet lah.

  1. From k In Kata => masih LINQ biasa
  2. Group By k => melakukan penggrupan seperti pada query di sql
  3. Into Group => biasanya dilakukan ke alias group, atau ke group itu sendiri.
  4. Select textKata = k, jumlah = Group.Count => melakukan select yang terbaru akibat dari penggrupan yang dilakukan sebelumnya.
  5. Order By jumlah Descending => melakukan urutan data dari jumlah yang paling besar ke paling kecil. So coba pembaca bayangkan, sekarang data kita sudah terurut berdasarkan jumlah dari yang besar ke kecil. Sekarang tinggal ambil yang terbesar dari kumpulan data itu, yang berada di urutan pertama. Untuk mengambilnya gunakan method First. Selanjutnya kita tinggal mengakses nama "field", textKata dan jumlah.
  6. Ribet? iya sih, tapi menyelesaikan problem ini dengan 3 atau 4 baris, saya anggap "sesuatu" . :p

Untuk soal nomor 3, dengan LINQ kita selesaikan aja dengan method Where seperti berikut:

Dim hurufLINQ = From l In txtKalimat.Text Where Char.IsLetter(l) Group l By key = l Into Group Select huruf = key, jumlah = Group.Count
Dim hurufTerbanyak = hurufLINQ.First
MessageBox.Show("Huruf yang paling banyak muncul adalah: " & hurufTerbanyak.huruf & vbCrLf & "Sebanyak :" & hurufTerbanyak.jumlah)

Untuk soal nomor 4, prinsipnya sama dengan nomor 3. Hanya menggunakan Where saja, tidak melakukan grouping dulu.

Dim kata As String() = txtKalimat.Text.Split(New Char() {}, StringSplitOptions.RemoveEmptyEntries)
Dim jumlahKata As Integer = (From intkata In kata Where intkata = txtFilter.Text Select intkata).Count
MessageBox.Show(jumlahKata)

Mungkin setelah sampai di problem nomor 4, para pembaca sudah mulai mengerti mengenai pembicaraan kita tentang LINQ ini. Biar ndak bertele-tele dengan pembicaraan saya ini, maka saya sertakan file yang telah saya buat dengan menggunakan visual studio 2008. Termasuk di dalamnya ada pemecahan masalah untuk nomor 5, 6 dan 7. Tambahan lainnya adalah operasi-operasi pada angka. Mencari nilai tertinggi, terendah, jumlah, bilangan ganjil, bilangan genap dll.

Silahkan download dimari: http://www.mediafire.com/?mvejcnic3iobjuq

Dimanakah anda sekarang ini?

1. Sudah mengenal Extension Method

2. Memecahkan masalah pada operasional string dengan menggunakan LINQ to Object.

Harapan saya, sesudah membaca artikel ini, para pembaca mulai tertarik untuk menyelesaikan masalah dengan bantuan LINQ. Pokoknya apapun yang bisa dijadikan object, bisa di selesaikan dengan LINQ.

 

LINQ Tuts. Part 1: Dasar-Dasar LINQ

arsitekturLINQ

Sekilas LINQ

LINQ merupakan singkatan dari Language Integrated Query.  LINQ merupakan fitur yang sudah ada sejak .Net Framework v3.5. Yang menjadi pertanyaan sekarang adalah, mengapa kita mempelajari LINQ? Bagaimana pula nasib T-SQL yang sudah kita mengerti bahkan sudah hafal luar kepala?

Sekarang ini, perkembangan teknologi sudah semakin maju, banyak pilihan manipulasi data, bahkan dalam sebuah aplikasi, kita harus memahami sintaks sql untuk memanipulasi database, selain itu kita juga harus mengerti xpath, xquery dan xslt jika berurusan dengan XML. Lain lagi dengan programmer yang bekerja dengan datasets, yang harus mengerti berbagai macam class dan property yang bisa digunakan dari ADO.Net.

Hal-hal tersebutlah yang menjadi dasar dan dorongan untuk menjadikan LINQ sebagai satu kesatuan cara pandang dari pengelolaan data… (ampun, bahasanya ribet)

 

Arsitektur LINQ

Berikut ini adalah diagram dari arsitektur LINQ :

 

Dari gambar di atas, dapat dilihat bahwa LINQ dapat mengakses data source dari berbagai sumber:

  1. LINQ to Objects, sumber data dari IENumerable dan IQueryable generic collection.
  2. LINQ to XML, sumber data dari IENumerable Xelement.
  3. LINQ to Dataset, sumber data dari IENumerable Datarow
  4. LINQ to SQL, sumber data dari IENumerable dan IQueryable dan setiap object yang kita tentukan sendiri sebagai represent data dari SQL tabel.

Mari kita bahas satu per satu…

LINQ to Objects

LINQ to Objects dapat mengakses sumber data IENumerable atau IEQueryable secara langsung tanpa membutuhkan LINQ Provider atau API, seperti pada LINQ to SQL atau LINQ to XML. IENumerable atau IEQueryable collection contohnya adalah array string (string()), array integer (integer()), bisa pula generic List.

Langsung aja masuk ke contoh, misalkan anda memiliki kumpulan data dalam sebuah array. Untuk mengakses data pada array, biasanya kita melakukan looping pada array tersebut dan melakukan iterasi pada setiap data yang sesuai dengan kriteria, misalnya nama sebuah makanan yang dimulai dengan huruf tertentu.

 

Di bawah ini adalah script vb.net untuk menampilkan data pada listbox dengan menggunakan pengulangan:

Dim makanan() As String = {"Pecel", "Gudeg", "Kerupuk", "Pizza", "Pisang Goreng", "Gadogado", "Sari roti", "Oreo", "Martabak"}
ListBox1.Items.Clear()
For Each strMakanan In makanan
    If strMakanan.StartsWith("P") Then
        ListBox1.Items.Add(strMakanan)
    End If
Next

Pada sepenggal script vb di atas, kebiasaan kita untuk mengakses data terhadap array dengan menggunakan looping. Kita juga melakukan iterasi dan melakukan pengkondisian terhadap nama makanan yang dimulai dari huruf "P" dengan menggunakan fungsi StartsWith.

Nah, dengan LINQ to Objects, kita modifikasi script di atas menjadi :

        Dim makanan() As String = {"Pecel", "Gudeg", "Kerupuk", "Pizza", "Pisang Goreng", "Gadogado", "Sari roti", "Oreo", "Martabak"}        
        ListBox1.Items.Clear()
        Dim linqMakanan As IEnumerable(Of String) = From namaMakanan In makanan Select namaMakanan _
                                                    Where namaMakanan.StartsWith("P")

        For Each strMakanan In linqMakanan
            ListBox1.Items.Add(strMakanan)
        Next

Sekarang mari kita bangingkan antara kedua script di atas. Script yang pertama menyelesaikan masalah dengan melakukan pengkondisian "If". Dan script yang kedua, menyelesaikan masalah dengan cara query (melakukan filtering "Where"). 

Selanjutnya pada bagian looping for each. Paradigma orang awam: "Sama aja tuh, di atas pake for each, yang bawah juga pake for each". Kalau saya bilang tidak sama, for each yang di atas melakukan iterasi terhadap semua elemen yang berada di dalam array makanan(). sementara for each yang di bawah, hanya melakukan iterasi pada data yang sudah terfilter. Sudah bisa dilihat kan bedanya? Dan tentunya sudah dapat dibayangkan, yang mana yang lebih cepat dalam hal mengakses dan mempresentasikan data.

Nah, sekarang kita melakukan pembahasan terhadap sintax LINQ. Mungkin para pembaca yang sudah mengerti dan paham luar dalam sintaks SQL, menyadari kalau penulisan sintax LINQ mirip-mirip dengan sintax SQL.  Perbedaan yang mendasar adalah operator sequens yang berbalik. Dimana SQL sintax memiliki faham SELECT – FROM – WHERE, sementara LINQ memiliki faham FROM – WHERE – SELECT (hmm, jadi kebayang format DM – MD di pelajaran bahasa). Kenapa pada LINQ sintax terbalik dengan SQL sintax? Jawabannya adalah agar supaya (kayak bahasa pak Jendral) intellisense dapat mengetahui sumber data mana yang akan kita gunakan. Sehingga intellisense dapat memberikan dan menyediakan saran/suggest untuk "where" clause dan "select" clause.

Pada sepenggal script LINQ di atas, yang dihasilkan adalah IENumerable String. Bisa saja kita melakukannya secara implisit seperti ini:

        Dim linqMakanan = From namaMakanan In makanan Select namaMakanan _
                          Where namaMakanan.StartsWith("P")

Pada script di atas, compiler akan secara otomatis menentukan tipe yang cocok, tidak masalah mau secara implisit atau sudah ditentukan.

LINQ akan lebih berguna lagi jika kita ingin memfilter data yang lebih kompleks. Pada contoh di atas, kita memfilter nama makanan yang huruf depannya adalah "P". Pada LINQ, kita bisa melakukan filtering yang lain, misalnya nama makanan yang huruf depan adalah "P" dan huruf akhir adalah "l".

        Dim linqMakanan = From namaMakanan In makanan Select namaMakanan _
                          Where namaMakanan.StartsWith("P") And namaMakanan.EndsWith("l")

dari sintax LINQ di atas akan menghasilkan "Pecel".

 

Query Syntax lawan Method Syntax

Syntax LINQ yang telah kita bahas di atas termasuk tipe Query Syntax. Query Syntax bersifat declarative manner.

        Dim angka() As Integer = {10, 12, 52, 32, 41, 75, 8, 88, 98, 72, 55, 21, 66, 33, 44, 41}
        Dim angkaGanjil As IEnumerable(Of Integer) = From bilGanjil In angka _
                                                     Select bilGanjil _
                                                     Where (bilGanjil Mod 2 = 1)

        For Each ganjil In angkaGanjil
            ListBox1.Items.Add(ganjil)
        Next

Sedangkan method syntax ditulis dengan menggunakan pemanggilan method (seperti where dan select):

        Dim angka() As Integer = {10, 12, 52, 32, 41, 75, 8, 88, 98, 72, 55, 21, 66, 33, 44, 41}
        Dim angkaGanjil As IEnumerable(Of Integer) = angka.Where(Function(n) n Mod 2 = 1)
        For Each ganjil In angkaGanjil
            ListBox1.Items.Add(ganjil)
        Next

Fungsi dari kedua script di atas sebenarnya sama, yaitu memfilter data dan mengembalikan angka ganjil dari kumpulan data. Pada script kedua, ada bagian seperti:angka.Where(Function(n) n Mod 2 = 1).

Function(n) ini disebut Lambda Expression. Lambda Expression adalah sebuah fungsi yang hanya menerima sebuah parameter input, terdiri dari 1 statement dan mengembalikan sebuah nilai (accpets single parameter input, contains single statement, returns a value)

Syntax tipe mana yang akan anda gunakan? Berdasarkan rumor yang beredar, di bawah ini adalah informasi perbandingan keduanya(berdasarkan buku C# 2008 Programmers Reference karangan Wei-Meng Lee):

1. Dari sisi performa, tidak ada perbedaan di antara kedua tipe syntax tersebut.

2. Query Syntax lebih mudah dibaca, jadi gunakanlah selagi memungkinkan.

3. Gunakanlah method syntax, jika tidak ada fungsi yang ekivalen di query syntax. Misalnya kita ingin menghitung berapa jumlah bilangan ganjil pada case di atas, kita menggunakan fungsi count.

Dim count As Integer = angka.Where(Function(n) n Mod 2 = 1).Count

 

Dimanakah anda sekarang?

Setelah membaca artikel saya yang ndak seberapa ini, seharusnya pembaca sudah mengerti mengenai:

– LINQ, singkatan dari apa, motivasi desain nya apa.

– Arsitektur LINQ yang meliputi LINQ to Objects, LINQ to XML, LINQ to Datasets dan LINQ to SQL

– Sintax LINQ dengan format FROM – WHERE – SELECT, yang berbanding terbalik dengan sintax SQL.

– Pemahaman dasar LINQ to Objects, pengaksesan data secara langsung terhadap IENumerable dan IQueryable.

– Bisa membedakan Query Syntax dan Method Syntax

– Sedikit mengetahui tentang Lambda

Selanjutnya kita akan membahas mengenai LINQ Extension Method dan LINQ to SQL. Tunggu tanggal mainnya.

Aplikasi Database Sederhana (drag-drop-style)

Membuat Aplikasi Database Sederhana menggunakan VB.net dan C#

Artikel ini berupa tutorial step-by-step untuk membuat aplikasi database sederhana menggunakan C# dan database SQL Server Compact Edition. Aplikasi yang akan kita buat adalah aplikasi “Address Book” berfungsi untuk menyimpan data kontak dan nomor telepon. Dalam tutorial kali ini, aplikasi hanya akan berfungsi untuk menambah, mengubah dan menghapus data. Pengembangan selanjutnya seperti fasilitas searching dan lain-lain ane serahkan pada agan-agan untuk mengembangkannya. Aplikasi ini menggunakan metode data-binding untuk menghubungkan komponen user interface (dalam tutorial ini menggunakan DataGridView) dengan data yang tersimpan dalam DataSet.

(more…)