Aplikasi Inventory Sederhana – Form Master Barang

Aplikasi Inventory Sederhana User Interface Antarmuka Pengguna Form Utama Master Barang

Form Master Barang | Setelah sebelumnya kita berhasil membuat templare desain user interface dan data access layer, berikutnya kita akan membuat form untuk mengelola proses CRUD (Create, Read, Update, Delete) untuk data Master Barang di Aplikasi Inventory ini. Untuk mengelola data master barang ini, kita memerlukan 2 (dua) buah form, yaitu Form List Barang, dan Form Entri Barang. Kedua form tersebut akan menggunakan metode data-binding untuk menampilkan data yang berhasil diambil menggunakan library data access layer yang kita buat sebelumnya.

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

Data Binding

Data Binding adalah metode untuk menghubungkan elemen atau komponen user interface dengan data access layer di belakangnya. Dengan konfigurasi yang benar, maka perubahan apapun yang ada di data layer dapat langsung terlihat di user interface. Dan juga sebaliknya, perubahan yang kita lakukan di form user interface dapat langsung terseimpan ke database, hanya dengan memanfaatkan beberapa baris kode saja. Untuk mencapai hal ini, kita hanya perlu mengkonfigurasikan property data-binding yang ada di setiap elemen user interface yang terlibat. Jadi misalkan kita mempunyai sebuah TextBox yang di-binding ke sebuah DataSet, maka ketika kita mengisikan sesuatu, atau mengubah isi TextBox bersangkutan, maka secara otomatis data yang tersimpan di DataSet juga ikut berubah.

Form Entri Barang

Kita akan menggunakan satu buah form yang sama untuk proses menambah data baru (Add New) dan mengubah data lama (Edit) dikarenakan field yang terlibat akan sama, hanya berbeda behavior saat di awal melakukan inisialisasi data. Saat menambah data baru yang perlu dilakukan adalah menambahkan satu row kosong, sedangkan saat mengubah data yang dilakukan adalah mengambil ulang (Retrieve) data dari database. Langkah-langkah yang perlu dilakukan antara lain:

  • Menyiapkan sebuah Inherited Form dari template frmEdit kemudian kita beri nama frmItemEdit. Untuk menambahkan form turunan dari template yang sudah kita buat di atas maka, maka silakan buka Form Dialog Add New Item, dan pilih Inherited Form seperti gambar di bawah ini, kemudian berikan nama form turunan dan klik tombol [Add]

[collapsed title=Spoiler: Add New Item Dialog] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

  • Berikutnya akan muncul Dialog Box yang meminta kita untuk memilih Form superclass, atau Form template layout yang akan kita pakai sebagai parent, seperti tampak pada gambar di bawah ini.

[collapsed title=Spoiler: Select Parent Form] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

  • Menambahkan elemen user interface ke dalam frmItemEdit. Tambahkan semua elemen field yang diperlukan ke dalam form, sehingga tampak seperti desain form di bawah ini.

[collapsed title=Spoiler: Desain Awal Form Master Barang] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

  • Setting konfigurasi data-binding untuk setiap elemen User Interface. Pertama-tama pilih TextBox kode barang, kemudian cari property Text dalam group DataBinding, kemudian klik tombol dropdown dan pilih field code dari table items sebagai data-binding-nya seperti tampak pada gambar di bawah ini.

[collapsed title=Spoiler: Setting Property Data Binding] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

  • Pada saat pertama kali kita melakukan setting data-binding, maka akan muncul beberapa komponen baru di bawah desain form, seperti tampak pada gambar di bawah ini. Selanjutnya lakukan setting data-binding untuk semua field lainnya.

[collapsed title=Spoiler: Tambahan Komponen Setelah Setting Data Binding Pertama Kali] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

  • Menambahkan kode untuk membedakan inisialisasi data baru dengan edit data lama. Untuk membedakan proses inisialisasi databaru dengan edit data lama, maka kita manfaatkan constructor New dengan tambahan parameter id saat ketika kita ingin mengubah (edit) data lama.

[collapsed title=Spoiler: Kode Sumber Inisialisasi Form Edit]

    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()
        ' panggil inisialisasi database
        InitializeDatabase(-1)
    End Sub

    Public Sub New(ItemID As Integer)
        ' This call is required by the designer.
        InitializeComponent()
        ' panggil inisialisasi database
        InitializeDatabase(ItemID)
    End Sub

    Private Sub InitializeDatabase(ItemID As Integer)
        ' try retrieve data
        Try
            ' periksa nilai ItemID
            ' jika kurang dari 0 maka kita asumsikan mau bikin data baru
            ' jika lebih dari 0 maka kita asumsikan ambil bikin data lama
            If ItemID < 0 Then
                Me.BindingContext(Me.ItemsBindingSource).AddNew()
            Else
                Me.ItemsTableAdapter.FillByID(Me.DsInventory.items, ItemID)
            End If
        Catch ex As Exception
            MessageBox.Show("Error retrieving data from database\nDetails: " + ex.Message,
                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

[/collapsed]

  • Menambahkan kode untuk menyimpan perubahan data ke database. Untuk menambahkan kode penyimpanan data ke database, bukalah designer form, kemudian klik ganda (double click) button [Save] dan tambahkan kode seperti di bawah ini.

[collapsed title=Spoiler: Kode Sumber Penyimpanan Data Ke Database]

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' try saving data
        Try
            ' akhiri proses editing
            Me.BindingContext(Me.ItemsBindingSource).EndCurrentEdit()
            ' persist changes
            Me.ItemsTableAdapter.Update(Me.DsInventory)
            ' informasikan data berhasil disimpan
            MessageBox.Show("Data BERHASIL disimpan!",
                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information)
            ' tutup form
            Me.Close()
        Catch ex As Exception
            MessageBox.Show("Error saving data to database\nDetails: " + ex.Message,
                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

[/collapsed]

Form List Barang

Sedangkan untuk melihat seluruh data barang yang tersimpan di database, kita akan membuatkan sebuah form list yang akan berisikan tombol-tombol (button) untuk proses tambah data, ubah data, dan delete data barang. Langkah-langkah yang perlu dilakukan antara lain,

  • Menyiapkan sebuah Inherited Form dari template frmList kemudian kita beri nama frmItemList. Cara membuat Inherited Form sama seperti saat kita membuat frmItemEdit di atas, silakan lakukan cara yang sama.
  • Berikutnya yang perlu kita lakukan adalah menambahkan elemen user interface ke dalam frmItemList. Elemen user interface yang harus di tambahkan di form list ini adalah DataGridView yang akan menampilkan seluruh data yang kita ambil dari database

[collapsed title=Spoiler: Desain Form List Master Barang]Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs[/collapsed]

  • Setting konfigurasi data-binding untuk setiap elemen User Interface. Proses setting data-binding ini bisa dilakukan lewat property Data Source, atau dapat juga dengan menggunakan shortcut context button kecil yang ada di atas design DataGridView, seperti tampak pada gambar di bawah ini.

[collapsed title=Spoiler: Konfigurasi Data Binding]Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs[/collapsed]

  • Jika kita membuka kode sumber untuk frmItemList ini, maka akan terlihat bahwa Visual Studio secara otomatis menambahkan sebaris kode untuk mengambil data dari database menggunakan data access layer yang kita buat pada artikel sebelumnya. Rupanya Visual Studio cukup cerdas dengan menmbahkan kode sumber yang diperlukan untuk mengantisipasi para developer yang terlupa menambahkannya.

[collapsed title=Spoiler: Auto Generate Code untuk Retrieve Data dari Visual Studio]Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs[/collapsed]

  • Menambahkan kode untuk mengambil data dari database. Proses pengambilan data (data retrieval) ini dilakukan pada saat Load Form, dimana kode sumbernya sudah ditambahkan secara otomatis oleh Visual Studio. Namun kita perlu tambahkan satu lagi ke button [Refresh] agar kita bisa mengambil ulang isi database. Caranya cukup dengan melakukan klik ganda (double click) pada button4 yang bertuliskan [Refresh]

[collapsed title=Spoiler: Kode Sumber untuk Proses Retrieve Data]

    Private Sub frmItemList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DsInventory.items' table. You can move, or remove it, as needed.
        Me.ItemsTableAdapter.Fill(Me.DsInventory.items)
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Me.ItemsTableAdapter.ClearBeforeFill = True
        Me.ItemsTableAdapter.Fill(Me.DsInventory.items)
    End Sub

[/collapsed]

  • Menambahkan kode untuk menampilkan form tambah data baru. Untuk menambah data baru, kita perlu memanggil frmItemEdit tanpa menggunakan parameter apapun agar form edit barang tahu kita akan menambahkan data baru. Caranya cukup dengan melakukan klik ganda (double click) pada button1 yang bertuliskan [Add], kemudian tambahkan kode berikut ini

[collapsed title=Spoiler: Kode Sumber untuk Tambah Data Baru]

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' start process
        Cursor = Cursors.AppStarting
        ' prepare variables
        Dim fx As frmItemEntry
        fx = New frmItemEntry
        ' tampilkan form
        fx.ShowDialog()
        ' refresh data, ambil data yang berubah
        Button4.PerformClick()
        ' finish process
        Cursor = Cursors.Default
    End Sub

[/collapsed]

  • Menambahkan kode untuk menampilkan form ubah data lama. Untuk mengubah data lama, yang kita perlu lakukan adalah memanggil frmItemEdit dengan memberikan parameter id agar form edit barang tahu kita akan menambahkan data baru. Caranya cukup dengan melakukan klik ganda (double click) pada button2 yang bertuliskan [Edit], kemudian tambahkan kode berikut ini

[collapsed title=Spoiler: Kode Sumber untuk Ubah Data Lama]

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' start process
        Cursor = Cursors.AppStarting
        ' prepare variables
        Dim id As Integer
        Dim fx As frmItemEntry
        ' ambil id data yg akan diedit
        id = DataGridView1.SelectedRows(0).Cells("id").Value
        ' create form entry berdasarkan id yang dipilih
        fx = New frmItemEntry(id)
        ' refresh data, ambil data yang berubah
        Button4.PerformClick()
        ' tampilkan form
        fx.ShowDialog()
        ' finish process
        Cursor = Cursors.Default
    End Sub

[/collapsed]

  • Menambahkna kode untuk menghapus data barang. Untuk menghapus data, yang kita perlu lakukan adalah mengambil row data yang akan dihapus, kemudian melakukan konfirmasi ke pengguna apakah benar-benar akan menghapus data yang dimaksud. Caranya cukup dengan melakukan klik ganda (double click) pada button3 yang bertuliskan [Edit], kemudian tambahkan kode berikut ini,

[collapsed title=Spoiler: Kode Sumber untuk Hapus Data]

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' start process
        Cursor = Cursors.AppStarting
        ' prepare variables
        Dim dr As DialogResult
        Dim id As Integer
        Dim code As String
        Dim name As String
        Dim message As String
        Dim pos As Integer
        ' ambil id dan code dari data yg akan diedit
        Dim dv As DataRowView
        dv = Me.BindingContext(Me.ItemsBindingSource).Current
        id = Convert.ToInt32(dv("id"))
        code = Convert.ToString(dv("code"))
        name = Convert.ToString(dv("name"))
        ' buat pesan konfirmasi
        message = String.Format("Are you sure to delete this [{0}] {1} data ? ", code, name)
        ' try deleting
        Try
            dr = MessageBox.Show(message,
                Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            If dr = Windows.Forms.DialogResult.Yes Then
                pos = Me.BindingContext(Me.ItemsBindingSource).Position
                Me.BindingContext(Me.ItemsBindingSource).RemoveAt(pos)
                Me.ItemsTableAdapter.Update(Me.DsInventory)
                Me.DsInventory.AcceptChanges()
            End If
        Catch ex As Exception
            MessageBox.Show("Error deleting data from database\nDetails: " + ex.Message,
                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.DsInventory.RejectChanges()
        End Try
        ' finish up
        Cursor = Cursors.Default
    End Sub

[/collapsed]

Simpulan

Jika kita perhatikan kode sumber yang kita tuliskan di aplikasi ini sangat sedikit sekali dikarenakan kita menggunakan metode data-binding. Kita juga tidak perlu lagi repot-repot membuat perintah SQL untuk proses CRUD, karena proses CRUD ini sudah ditangani di data access layer. Dengan makin sedikit-nya kode yang harus kita tuliskan tentunya akan semakin meningkatkan produktifitas kita semua sebagai programmer dan semakin banyak karya-karya fenomenal yang bisa kita buat.

Source Code

Untuk memudahkan teman-teman mempelajari hal ini, silakan Download Source Code Di SiniDibuat menggunakan Visual Studio 2013,  

Salam PojokProgrammer ^_^

 

/

Filter Data Menggunakan Tanggal dan Karakter di VB.net

Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net

Tips dan Trik | Saat membangun sebuah aplikasi database, pasti kita akan bertemu dengan kasus pengolahan data yang besar atau proses pengambilan (retrieval) 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.

Misalkan kita memiliki 2 (dua buah table) yaitu Orders dan OrderTypes. Table Orders 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 table Orders adalah seperti pada gambar di bawah ini,

Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net

Sedangkan isi table OrderTypes seperti tampak pada gambar di bawah ini.

Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net

Kemudian kita coba buat sebuah desain form seperti tampak pada gambar di bawah ini. Kita akan menggunakan control TextBox untuk filter berdasarkan Nomor Transaksi, kemudian menggunakan DateTimePicker untuk filter berdasarkan tanggal transaksi, dan ComboBox untuk filter berdasarkan Jenis Transaksi. Dengan cara ini kita mendapatkan beberapa model filter sekaligus (y).

Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net

Berikutnya yang kita perlukan adalah code untuk proses-proses berikut ini

  • Inisialisasi kriteria filter tanggal transaksi
  • Inisialisasi kriteria filter jenis transaksi
  • proses pengambilan data dari database

Untuk proses pengambilan data dari database, aplikasi contoh kita menggunakan SQL Server 2012 LocalDB dengan connection string seperti di bawah ini

Private Const _cnString As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\dbSample.mdf;Integrated Security=True"

Untuk inisialisasi kriteria filter tanggal, 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.

    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

Untuk jenis transaksi, kita mengambil jenis-jenis transaksi yang tersedia di dalam tabel OrderTypes kemudian memuatnya ke ComboBox, sehingga code-nya akan tampak seperti ini

    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

Untuk proses penampilan data ke grid, 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.

    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

Secara keseluruhan, Code dalam Form kita menjadi seperti ini, termasuk di dalamnya procedure New dan Event Handler untuk menangani event click di tombol Filter.

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

Penampakan aplikasi berjalan adalah seperti ini

Filter Pengambilan Data Menggunakan Tanggal dan Karakter di VB.net

Selamat Belajar, Salam Pojok Programmer !

CRUD Sederhana – Insert Menggunakan MySqlCommand

Pojok Programmer - CRUD Sederhana - Insert Menggunakan MySqlCommand

CRUD Sederhana | Aplikasi database memerlukan pemahaman yang cukup karena banyak konsep yang harus dipahami sebelumnya, belum lagi komponen dan driver yang harus di-install sebelumnya. Namun .NET framework memudahkan kita untuk membuat coding database atau dikenal sebagai CRUD (Create Read Update Delete). Artikel ini akan membahas proses INSERT data ke database MySql menggunakan MySqlCommand. Pertama-tama kita siapkan table yang akan digunakan untuk menyimpan data. Silakan buka phpMyAdmin dan jalankan script SQL berikut ini untuk membuat table-nya

CREATE TABLE `pegawai` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nip` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `nama` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `alamat` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `tempat_lahir` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `tanggal_lahir` date DEFAULT NULL,
  PRIMARY KEY (`id`)
);

Berikutnya kita buatkan Form sederhana yang berisikan TextBox untuk input data dan DataGridView untuk menampilkan data yang sudah tersimpan di database. Mungkin kira-kira tampilannya seperti ini, namun silakan jika teman-teman punya selera desain yang lain.

Pojok Programmer - CRUD Sederhana - Insert Menggunakan MySqlCommand

Pada awalprogram kita lakukan inisialisasi data dengan cara melakukan refresh terhadap isi grid, dengan menggunakan code seperti ini

Public Sub New()
    ' required by designer code
    InitializeComponent()
    ' required by this tutorial
    RefreshDataGrid()
End Sub

Private Sub RefreshDataGrid()
    ' siapkan koneksi database
    Dim cn As New MySqlConnection(cnString)
    Dim da As New MySqlDataAdapter("SELECT * FROM pegawai", cn)
    Dim dt As New DataTable
    ' coba ambil data
    Try
        ' masukkan data ke datatable
        da.Fill(dt)
        ' binding datatable ke grid
        DataGridView1.DataSource = dt
    Catch ex As Exception
        ' tampilkan error jika ada
        MessageBox.Show(ex.Message)
    End Try
End Sub

Sedangkan ini adalah code yang digunkan untuk meng-handle event click dari button Simpan.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' siapkan koneksi database
    Dim cn As New MySqlConnection(cnString)
    Dim cm As MySqlCommand
    Try
        ' siapkan perintah sql
        cm = cn.CreateCommand
        cm.CommandType = CommandType.Text
        cm.CommandText = "INSERT " & _
            "INTO pegawai(nip, nama, tempat_lahir, tanggal_lahir, alamat) " & _
            "VALUES (@nip, @nama, @tempat, @tanggal, @alamat)"
        ' gunakan parameter
        cm.Parameters.AddWithValue("@nip", TextBox1.Text)
        cm.Parameters.AddWithValue("@nama", TextBox2.Text)
        cm.Parameters.AddWithValue("@tempat", TextBox3.Text)
        cm.Parameters.AddWithValue("@alamat", TextBox4.Text)
        cm.Parameters.AddWithValue("@tanggal", DateTimePicker1.Value.ToString("yyyy-MM-dd"))
        ' buka koneksi database (wajib)
        cn.Open()
        ' jalankan perintah insert
        cm.ExecuteScalar()
        ' tutup koneksi (kalau tidak, dosa!)
        cn.Close()
        ' refresh data grid kembali
        RefreshDataGrid()
    Catch ex As Exception
        ' tampilkan error jika ada
        MessageBox.Show(ex.Message)
    End Try
End Sub

Dan Hasil akhirnya setelah dijalankan menjadi seperti ini

Pojok Programmer - CRUD Sederhana - Insert Menggunakan MySqlCommand

Silakan unduh source code di sini. Selamat Belajar

.

Aplikasi Inventory Sederhana – Data Access Layer

Aplikasi Inventory Sederhana - Data Access Layer

Aplikasi Inventory | Untuk memudahkan proses pembuatan Aplikasi Inventory sederhana atau Aplikasi Stok Barang ini, kita memerlukan sebuah Data Access Layer untuk proses pengambilan (retrieval) dan penyimpanan (persisting) data dari dan ke database yang kita gunakan, yaitu MySQL. Teknologi yang kita gunakan adalah ADO.net menggunakan DataSet dan DataAdapter. Dan untuk memudahkan kerja kita, maka kita akan menggunakan MySQL Installer for Windows untuk proses instalasi driver MySQL Connector/NET dan plugin MySQL for Visual Studio. Kekuatan ADO.net salah satunya ada di DataSet, dimana kita bisa membuat replika dari database fisik dan kemudian kita bisa menggunakannya secara object-oriented. 

 

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

 

Siapkan Koneksi Database

Langkah pertama adalah dengan membuka Server Explorer kemudian menambahkan koneksi baru ke database MySQL yang sudah kita siapkan di artikel sebelumnya. Perlu dicatat bahwa kita memerlukan plugin MySQL for Visual Studio agar dapat melakukan langkah-langkah tutorial di bawah ini, dan plugin ini hanya bisa digunakan di Visual Studio Professional ke atas, pada versi Express plugin ini tidak bisa digunakan.

Silakan tambahkan koneksi baru dan isikanlah form konfigurasi database, seperti contoh pada gambar di bawah ini

[collapsed title=Membuat Koneksi Baru di Server Explorer]

Pada Server Explorer, click icon Add New Connection sehingga muncul dialog box seperti di bawah ini

[collapsed title=Tentukan Data Source]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

Kemudian isikan credential yang diperlukan untuk mengakses database mysql Anda, jika menggunakan paket xampp di localhost maka cukup isikan root sebagai user name dan kosongkan password.

[collapsed title=Isikan Credential Database]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

Jika sukses, Anda dapat melihat seluruh tables, viwes, dan stored procedure yang ada di database.

[collapsed title=Penampakan Database di Server Explorer]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

[/collapsed]

 

Membuat Typed-DataSet

Kekuatan ADO.net salah satunya ada di DataSet, dimana kita bisa membuat replika dari database fisik dan kemudian kita bisa menggunakannya secara object-oriented. Sedangkan DataSet sendiri ada 2 (dua) jenis, untyped-dataset dan typed-dataset. Disebut typed-dataset karena DataSet yang kita gunakan bukan dataset generic namun sudah dikonfigurasikan sesuai dengan schema database tertentu. Dengan menggunakan plugin MySQL for Visual Studio, kita bisa membuat Typed DataSet dengan cepat hanya dengan melakukan drag-and-drop dari Server Explorer.

[collapsed title=Membuat DataSet dengan Cara Drag-and-Drop dari Server Explorer]

Untuk membuat Typed DataSet pertama-tama buat sebuah Folder bernama Data di Solution Explorer, kemudian klik-kanan mouse pada folder Data tersebut dan pilihlah menu Add New Item

[collapsed title=Membuat DataSet kosong]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

Berikan nama DataSet tersebut sebagai dsInventory, cukup logis karena kita sedang membuat sebuah Aplikasi Inventory. DataSet Designer kosong akan muncul seperti tampak pada gambar di screenshot ini.

[collapsed title=DataSet Designer kosong dengan nama dsInventory]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

Drag-And-Drop. Langkah selanjutnya adalah membuka Server Explorer, kemudian lakukan Drag-And-Drop semua table yang ada di database ke atas DataSet Designer, sehingga akan terbentuk seperti gambar di bawah ini.

[collapsed title=Hasil setelah proses Drag-And-Drop dari Server Explorer]

Aplikasi Inventory Sederhana - Data Access Layer Create Dataset

[/collapsed]

Perlu diperhatikan bahwa Visual Studio secara otomatis membantu kita membuatkan semua fungsi SELECTINSERTUPDATE, dan DELETE dari semua table di atas pada saat proses Drag-And-Drop sehingga kita tidak perlu membuat semua query tersebut secara manual. Pastinya cara ini sangat meningkatkan produktifitas para programmer karena hal-hal seperti ini bisa kita otomasikan menggunakan Visual Studio.

[/collapsed]

 

Enhancing DataSet – Field Tambahan

Setelah kita berhasil membuat Typed-DataSet sesuai langkah-langkah di atas, langkah selanjutnya adalah melakukan enhancing, atau memberikan fungsi tambahan, terhadap DataSet yang sudah dibuatkan oleh Visual Studio. Tambahan fungsi ini meliputi field dan query untuk mempermudah kita melakukan pengambilan data dari database

[collapsed title=Enhancing DataSet – Field]

Membuat field tambahan ke table transactions, dengan cara meletakkan cursor pada posisi field yang mau kita tambahkan, kemudian klik-kanan mouse dan pilih menu Insert Column.

[collapsed title=Enhancing DataSet – Table Transactions]

Membuat field tambahan ke table transactions, dengan cara meletakkan cursor pada posisi field yang mau kita tambahkan, kemudian klik-kanan mouse dan pilih menu Insert Column.

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Buatlah semua field tambahan untuk table transactions sehingga menjadi seperti tampak di gambar di bawah ini.

[collapsed title=Enhancing DataSet – Table Transactions]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Buatlah semua field tambahan untuk table transaction_details sehingga menjadi seperti tampak di gambar di bawah ini.

[collapsed title=Enhancing DataSet – Table Transactions Details]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Perlu diperhatikan bahwa penambahan field diluar yang ada di table fisik nantinya akan sangat berguna ketika kita melakukan proses data binding  data ke control seperti DataGridView, sehingga kita tidak perlu membuat kolom tambahan lagi di DataGridView karena sudah tersedia semua di DataSet.

[/collapsed]

 

Enhancing DataSet – Query Tambahan

Berikutnya yang kita lakukan menambahkan query ke DataSet. Jika kita perhatikan di DataSet Designer, ada komponen khusus dibawah bable dengan nama xxxTableAdapter. Komponen TableAdapter ini adalah DataAdapter yang khusus dibuatkan untuk menangani proses CRUD dari tabel bersangkutan, jadi proses CRUD untuk table transactions ditangani oleh transactionsTableAdapter. Secara default, sudah tersedia method Fill dan GetData, namun kedua methos tersebut masih bersifat generic pada saat proses pengambilan data dari database akan mengambil keseluruhan data tanpa filter.

Untuk itu kita perlu menambahkan sejumlah query untuk memudahkan kita mengambil data dari database berdasarkan kriteria tersentu, pastinya kita akan memerlukan query untuk mendapatkan data transaksi dengan ID tertentu, atau nomor transaksi tertentu, atau bisa juga berdasarkan tanggal transaksi.

[collapsed title=Enhancing DataSet – Add Query]

Membuat query tambahan ke table items, dengan cara meletakkan cursor pada posisi header itemsTableAdapter yang mau kita tambahkan, kemudian klik-kanan mouse dan pilih menu Add Query. Seperti tampak di bawah ini.

[collapsed title=Enhancing DataSet – Add Items Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Setelah itu akan muncul dialog box wizard proses pembuatan TableAdapter Query seperti ini, pilih Use SQL Statement karena kita akan mengambil data menggunakan perintah SQL.

[collapsed title=Enhancing DataSet – Add Query Wizard]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Kemudian pilih SELECT which returns rows karena query kita menghasilkan rows dari table items, untuk option lain silakan teman-teman coba sendiri.

[collapsed title=Enhancing DataSet – Add Query Wizard]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Beginilah penampakan query terhadap table items berdasarkan field ID, perhatikan bahwa query di bawah ini memasukkan sebuah parameter @id yang harus kita berikan nanti ketika memanggil query ini.

[collapsed title=Enhancing DataSet – Add Query Wizard]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

 

Berikan nama untuk query ini, seperti tampak pada gambar di bawah ini.

[collapsed title=Enhancing DataSet – Add Query Wizard]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

 

Selesai! Visual Studio sudah membuatkan fungsi untuk membantu kita melakukan query ke table items di database berdasarkan field ID.

[collapsed title=Enhancing DataSet – Add Query Wizard]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Setelah menambahkan query pengambilan data items berdasarkan ID, maka penampakan DataSet akan menjadi seperti pada gambar di bawah ini.

[collapsed title=Enhancing DataSet – Add Items Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikutnya yang perlu kita lakukan adalah menambahkan semua query berdasarkan kriteria yang kita inginkan ke seluruh table yang ada dalam DataSet kita ini. Berikut ini penampakan query terhadap table items berdasarkan field Code.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Penampakan DataSet setelah menambahkan query berdasarkan field ID dan dan field Code pada table items dan transaction_types seperti pada gambar di bawah ini.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap table transactions berdasarkan field ID. Perhatikan bahwa pada query ini kita melakukan JOIN terhadap table transactions dan transaction_types. Lebih jauh tentang JOIN silakan pelajari artikel ini.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap table transactions berdasarkan field Code. Untuk query ini kita juga lakukan JOIN dengan transaction_types.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap table transactions berdasarkan field Date. Perhatikan bahwa kita menggunakan klausa BETWEEN di dalam klausa WHERE.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset By Dae

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset By Date

[/collapsed]

Penampakan DataSet setelah menambahkan query berdasarkan field ID dan, field Code, dan field Date pada table transactions seperti pada gambar di bawah ini.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap table transaction_details berdasarkan field Code.

[collapsed title=Enhancing DataSet – Add Query – Transactions Details by ID]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap table transaction_details berdasarkan field Trans_ID.

[collapsed title=Enhancing DataSet – Add Query – Transactions Details by Transaction ID]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Penampakan DataSet setelah menambahkan query berdasarkan field ID dan dan field Transaction ID pada table transaction_details seperti pada gambar di bawah ini.

[collapsed title=Enhancing DataSet – Add Query]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Dengan tersedianya fungsi-fungsi query tambahan pada DataSet yang kita buat di atas, maka pada saat proses pengambilan data, kita hanya perlu meamanggil fungsi-fungsi tersebut dan tidap perlu lagi membuat query secara manual. Sekali lagi, produktifitas programmer semakin meningkat dengan cara ini.

[/collapsed]

 

Denormalisasi

Apakah denormalisasi database itu? denormalisasi database adalah pelanggaran aturan normalisasi atau menjabarkan suatu desain database yang telah normal untuk meningkatkan performa pengaksesan data pada database. Database yang telah normal disini dimaksudkan database yang redundansi datanya minim sehingga data yang disimpan tidak mengalami kerancuan dalam proses pengaksesan. Namun denormalisasi yang kita lakukan di sini tidak secara fisik, namun hanya menggunakan fasilitas view yang ada di database.

[collapsed title=Denormalisasi]

Denormalisasi kita lakukan dengan melakukan JOIN terhadap seluruh tabel yang ada di database inventory kita. Nantinya view denormalisasi ini akan berguna saat membuat laporan. Dengan bantuan plugin MySQL for Visual Studio, kita bisa membuat sebuah View langsung dari IDE Visual Studio sehingga tidak perlu berpindah ke phpMyAdmin atau HeidiSQL untuk membuat view denormalisasi ini.

[collapsed title=Denormalisasi – Membuat View]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Setelah View berhasil kita buat, langkah berikutnya adalah menambahkan view tersebut ke dalam Data Access Layer yang kita buat, caranya sama cukup dengan melakukan drag-drop dari Server Explorer ke DataSet Designer, sehingga tampak seperti gambar di bawah ini.

[collapsed title=Denormalisasi – Drag View ke DataSet Designer]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap view transaction_denormalized berdasarkan field Trans_ID.

[collapsed title=Denormaslisasi – Add Query – untuk view]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap view transaction_denormalized berdasarkan field Trans_Code.

[collapsed title=Denormaslisasi – Add Query – untuk view]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap view transaction_denormalized berdasarkan field Item_ID.

[collapsed title=Denormaslisasi – Add Query – untuk view]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Berikut ini penampakan query terhadap view transaction_denormalized berdasarkan field Item_Code.

[collapsed title=Denormaslisasi – Add Query – untuk view]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

Penampakan Data Access Layer setelah kita melengkapi query untuk View transaction_denormalized.

[collapsed title=Denormalisasi – Hasil Query Tambahan untuk View]

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

[/collapsed]

[/collapsed]

 

Hasil Akhir

Setelah seluruh langkah di atas kita selesaikan, maka langkah pamungkas dalam pembuatan Data Access Layer ini adalah dengan melakukan compile atau build project ini. Setelah proses build selesai dilakukan maka kita akan mendapatkan sejumlah komponen baru tampil di toolbox seperti tampak pada gambar di bawah ini. Visual Studio otomatis akan mengenali komponen Data Access Layer buatan kita dan menambahkannya ke dalam toolbox, dan kita bisa melakukan drag-and-drop komponen-komponen tersebut ke dalam form-form buatan kita nantinya. Komponen tambahan ini nantinya akan kita pergunakan dalam pembuatan Aplikasi Inventory ini.

Aplikasi Inventory Sederhana - Data Access Layer Enhance Dataset

 

Penutup

Mudah-mudahan penjelasan tentang pembuatan Data Access Layer dapat dipahami dengan mudah, dan silakan kunjungi link di bawah ini untuk mengunduh source-code sementara.

[collapsed title=Spoiler: Download Source Code Di Sini] Dibuat menggunakan Visual Studio 2013, Silakan Download Source Code Di Sini [/collapsed]

 

Salam Pojok Programmer !

Mini Workshop: Pemrograman Database di VB.net

Mini Workshop: Pemrograman Database di VB.net

Mini Workshop | Workshop Dasar Pemrograman VB.net yang diselenggarakan oleh PojokProgrammer.net ini ditujukan bagi para pemula yang sudah memahami dasar-dasar pemrograman Visual Basic .Net, namun ingin mengembangkan lebih lanjut skill dalam pengolahan data di database. Training ini akan membahas hal-hal mendasar yang menjadi pondasi untuk membuat sebuah aplikasi database yang canggih.

Workshop akan berlangsung selama 8 (delapan) jam dan terbagi dalam 4 (empat) sesi, meliputi Pengenalan Akses Data di .Net Framework, Konsep Data Binding ADO.NET, Transaksi Satu Table, dan Transaksi Dua Table, serta sedikit overview Push Method di Crystal Report.

Sesi Workshop

Workshop akan berlangsung selama 8 (delapan) jam dan terbagi dalam 4 (empat) sesi, antara lain 

  • Pengenalan Akses Data ADO.net. Peserta akan dikenalkan metode akses data di lingkungn .net framework dan memahami perbedaannya dengan metode akses yang sudah tersedia sebelumnya.
  • Konsep Data Binding. Membahas konsep data-binding antara control-dataset-database untuk memudahkan proses pemrograman database dan mengurangi sejumlah coding manual yang biasa dilakukan sebelum ADO.net diluncurkan.
  • Transksi Data Satu Table. Peserta akan diajak untuk membuat sebuah Form sederhana untuk proses CRUD ke satu table. Transaksi ini juga akan menggunakan lookup table dengan memanfaatkan data binding untuk mengisi data ke control seperi combobox.
  • Transaksi Data Dua Table. Peserta akan diajak untuk membuat sebuah Form master-detail untuk proses CRUD ke dua buah table. Transaksi ini juga akan memanfaatkan relasi yang tersedia di DataSet untuk memudahkan proses CRUD ini.
  • Push Method di Crystal Report. Peserta akan memanfaatkan ADO.net untuk proses pembuatan laporan menggunakan Crystal Report, seperti laporan berdasarkan kode tertentu atau berdasarkan periode waktu tertentu.

 

Jadwal Berikutnya

  • Tanggal: Rabu, 21 Juni 2014
  • Peserta: 10-16 Orang
  • Lokasi: Code Margonda. Jl. Margonda Raya 349B

 

Biaya Training

All-In Rp. 500.000,- meliputi

  • Sertifikat Kehadiran
  • Makan Siang dan Snack

 

Dapatkan Early Bird Discount

  • 40% untuk pembayaran sebelum 7 Juni 2014
  • 20% untuk pembayaran sebelum 14 Juni 2014

 

Pendaftaran

Bagi calon peserta yang berminat, dapat langsung mengisikan Formulir Ini.

Informasi lebih lanjut silakan menghubungi Nur Hidayat di nomor 08559910165.

 

Mini Workshop Dasar Pemrograman VB.net

Mini Workshop: Dasar Pemrograman VB.net

Mini Workshop: Dasar Pemrograman VB.net

Mini Workshop | Workshop Dasar Pemrograman VB.net yang diselenggarakan oleh PojokProgrammer.net ini ditujukan khusus untuk pemula yang belum memahami dasar-dasar pemrograman Visual Basic .Net, atau baru memulai belajar pemrograman. Training ini akan membahas hal-hal mendasar yang menjadi pondasi jika berkeinginan untuk menjadi programmer yang handal.

Workshop akan berlangsung selama 8 (delapan) jam dan terbagi dalam 4 (empat) sesi, meliputi Pengenalan IDE Visual Studio, Konsep Dasar Pemrograman, Algoritma Sederhana, dan Database Akses Sederhana,

Sesi Workshop

Workshop akan berlangsung selama 8 (delapan) jam dan terbagi dalam 4 (empat) sesi, antara lain 

  • Pengenalan IDE Visual Studio. Peserta akan dikenalkan dengan Lingkungan IDE Visual Studio agar dapat optimal dalam penggunaannya, meliputi hal-hal seperti membuat Solution baru, membuat Project baru, Pengenalan Console Application dan Window Forms Application, Debugging, dan sebagainya.
  • Konsep Dasar Pemrograman. Membahas hal sangat mendasar yang kadangkala terlewatkan sehingga para programmer banyak yang tidak mampu menyelesaikan hal sederhana karena tidak memahami konsep seperti Konstanta dan Variable, Struktur Data sederhana, Logika Percabangan, dan Logika Perulangan.
  • Algoritma Sederhana. Banyak yang melihat algoritma sebagai sesuatu yang rumit, namun sesungguhnya algoritma hanyalah sejumlah langkah yang kita susun untuk menyelesaikan suatu problem pemrograman. Pemahaman terhadap konsep dasar pemrograman akan sangat membantu dalam sesi ini
  • Database Sederhana. Peserta akan diajarkan langkah-langkah yang diperlukan untuk berkomunikasi dan memanipulasi data yang ada di dalam database. Pembahasan akan meliputi proses CRUD (Create, Read, Update, Delete) sederhana.

 

Jadwal Berikutnya

  • Tanggal: Rabu, 25 Juni 2014
  • Peserta: 10-16 Orang
  • Lokasi: Code Margonda. Jl. Margonda Raya 349B

 

Biaya Training

All-In Rp. 500.000,- meliputi

  • Sertifikat Kehadiran
  • Makan Siang dan Snack

 

Dapatkan Early Bird Discount

  • 40% untuk pembayaran sebelum 11 Juni 2014
  • 20% untuk pembayaran sebelum 18 Juni 2014

 

Pendaftaran

Bagi calon peserta yang berminat, dapat langsung mengisikan Formulir Ini.

Informasi lebih lanjut silakan menghubungi Nur Hidayat di nomor 08559910165.

 

Mini Workshop Dasar Pemrograman VB.net

Pojok Programmer Magazine Mei-Juni 2014

Pojok Programmer Magazine Mei-Juni 2014

Download GRATIS Pojok Programmer Magazine | Berawal dari keprihatinan akan keterbatasan sumber informasi pembelajaran pemrograman berbahasa Indonesia, maka kami mencoba mengumpulkan beberapa orang yang sering kali kerepotan karena muncul pertanyaan yang sama dan sifatnya trivial berulang-ulang ditanyakan oleh member di group Facebook Programmer VB Indonesia dan Komunitas VB.net Indonesia, maka akhirnya diterbitkanlah majalah Elektronik ini.

Dengan Semangat Edisi Perdana, maka Edisi ini mengangkat tema utama “Menjadi Programmer Handal” yang ditulis oleh Endar Zulfahrain. Tema ini dipilih karena kemampuan inilah pasti yang diinginkan oleh semua orang yang memulai belajar pemrograman. Artikel lainnya adalah perkenalan tentang sejumlah hal yang perlu dipahami oleh seorang Programmer Handal, meliputi konsep OOP oleh Hartoto Dinata, sejarah data akses, Reporting oelh Paulus Iman, serta Pengenalan ASP.net oleh Gege Satya dan Pengenalan WPF oleh Fandi Susanto.

Semoga Majalah Elektronik ini bisa terus terbit memajukan kualitas Programmer Indonesia.

Silakan unduh di sini.GRATIS!

Nur Hidayat
Editor in Chief

.

Pojok Programmer Magazine Mei-Juni 2014

Heartbleed for Dummies

Pojok Programmer Heartbleed OpenSSL for Dummies  infographics

Security | Beberapa hari terakhir banyak dunia IT diramaikan oleh bug Heartbleed. Bagi yang kurang memahami security, atau bagia yang belum bersentuhan dengan dunia security mungkin agak bingung, sebenarnya ada problem apa dengan bug ini.  Saya bukan ahli dalam hal security atau keamanan jaringan, tapi mudah-mudahan penjelasan dalam artikel ini cukup mudah dimengerti untuk memahami bagaimana cara kerja bug heartbleed.

Bug heartbleed bersarang di dalam implementasi OpenSSL untuk TLS heartbeat. Secara umum, tujuan dari heartbeat ini adalah untuk memverifikasi bahwa koneksi ke sebuah server masih terhubung atau tidak dengan cara mengirimkan sebuah pesan dan mengharapkan respon respon yang sama. Ketika sebuah paket TLS heartbeat dikirim , di dalam paket tersebut berisikan beberapa potongan penting dari informasi dan sebarang data, atau payload. Server yang menerima paket payload ini harus mengirimkan ulang isinya untuk memverifikasi sambungan masih hidup atau tidak. Di dalam paket TLS heartbeat itu juga tersimpan informasi panjang payload, kita sebut saja sebagai len_payload. Dan ukuran maksimum payload adalah sebesar 1 byte atau 2^16 = 64kB data.

Yang dilakukan oleh OpenSSL saat menerima paket payload heartbeat adalah, 

  • Mengalokasikan variable respon, dengan menggunakan len_payload sebagai ukuran payload balasan
  • memcpy() len_payload byte dari payload ke dalam respon.
  • Kirim respon heartbeat (dengan semua len_payload bytes) kembali ke pengirim asli.

Problem muncul karena OpenSSL tidak pernah repot-repot untuk memeriksa apakah len_payload yang benar-benar sesuai dengan panjang payload yang diterima. Jadi, orang attacker bisa mengirim permintaan heartbeat yang menunjukkan panjang payload (len_payload) hingga 2^16 (65536) , namun payload sebenarnya jauh lebih pendek. Sehingga yang terjadi adalah bahwa memcpy menyalin data di memory ke luar batas payload ke dalam variable respon, memberikan hingga 64k isi memori OpenSSL ke attacker. Koq bisa tidak terjadi segmentation fault? hal tersebut terjadi karena OpenSSL memiliki implementasi custom tersendiri sehingga tidak menimbulkan segmentation fault di level OS.

Lalu, apa keuntungannya? 

Apa yang ada di memori 64k ekstra ini? Itu tergantung…. Anda bisa mendapatkan apa pun yang berguna pada satu paket heartbeat palsu. Dan tidak ada yang bisa menghentikan Anda dari mengirim paket heartbeat palsu seperti itu sebanyak yang kita inginkan. Banyak yang telah menunjukkan bahwa mereka bisa mendapatkan informasi yang tidak terenkripsi berupa username, password, private security keys, dan hal-hal lain yang dibutuhkan untuk kepentingan keamanan di dunia maya.

Happy Understanding! ðŸ˜€

Terjemahan bebas dari Pertanyaan di Quora.

Heartbleed Infographics

Pojok Programmer Heartbleed OpenSSL for Dummies  infographics

Sumber gambar: http://www.bankinfosecurity.com/heartbleed….

How Heartbleed Works

Pojok Programmer Heartbleed OpenSSL for Dummies  infographics How Heartbleed Works

Sumber gambar: http://xkcd.com/1354/

Hello World Versi OOP Menggunakan VB.net

Hello World Versi OOP Menggunakan VB.net

Pemrograman | Pemrograman Berorientasi Obyek (PBO) atau Object Oriented Programming (OOP) adalah salah satu paradigma pemrograman yang berusaha menyederhanakan problem yang diselesaikan sebagai kumpulan dari obyek-obyek. Selain paradigma OOP, masih ada beberapa paradigma pemrograman lainnya, seperti Pemrograman ImperativePemrograman ProceduralPemrograman Functional, dan lain-lain. Namun artikel ini tidak akan membahas semua paradigma tersebut. Artikel ini akan mencoba menjelaskan secara ringkas beberapa konsep penting dalam OOP dan menerapkan konsep tersebut menjadi sebuah program Hello World sederhana.

UPDATE: Karena ada permintaan program Hello World dalam versi PHP, silakan buka spoiler di bagian akhir dari artikel ini

Interface

Interface sering digunakan untuk mendefinisikan sebuah tipe abstrak yang tidak berisi data, dan memaparkan perilaku obyek dalam bentuk kumpulan function  atau method. Sebuah class yang memiliki semua function atau method yang sama dikatakan mengimplementasikan interface tersebut. Selain itu, class dapat mengimplementasikan beberapa interface sekaligus. Contoh Interface dalam sebuah code VB.net adalah sebagai berikut

''' Interface Printer
''' Mendifinisikan behavior printer
Public Interface Printer
    Sub PrintOut(ByVal message As String)
End Interface

Class

Class adalah template atau pola yang digunakan untuk membuat objek, biasanya berisikan sejumlah nilai awal untuk variable dan implementasi perilaku (behavior) dari sebuah interface. Berikut ini contoh implementasi sebuah Interface Printer dan contoh Class Message yang akan kita gunakan untuk menyimpan pesan yang ingin kita cetak ke printer dalam sebuah code VB.net adalah sebagai berikut,

''' implementasi interface Printer
''' class untuk mencetak ke console
Public Class SystemOutPrinter
    Implements Printer
    Public Sub PrintOut(message As String) Implements Printer.PrintOut
        Console.WriteLine(message)
    End Sub
End Class

''' Class berisi pesan yang ingin ditampilkan
Public Class Message
    Private message As String
    ' constructor
    Public Sub New(ByVal message As String)
        Me.message = message
    End Sub
    ' fungsi untuk menampilkan pesan
    Public Sub PrintOut(printer As Printer)
        printer.PrintOut(Me.ToString())
    End Sub
    ' fungsi untuk mengubah pesan menjadi string
    Public Overrides Function ToString() As String
        Return Me.message
    End Function
End Class

Inheritance

Inheritance adalah ketika suatu obyek atau kelas didasarkan pada objek atau class lain. Inheritance adalah sebuah mekanisme penggunaan kembali kode (code reuse). Hubungan inheritance menimbulkan sebuah hubungan hirarki antara parent class dengan child class, dengan child class akan mewariskan semua property/variable dan method yang ada di parent class. Contoh penerapan abstract class dan inheritance menggunakan VB.net adalah sebagai berikut,

''' contoh class abstract
''' harus dibuat object inheritance kalau mau pake
Public MustInherit Class AbstractPrinterFactory
    Public Shared Function GetFactory() As AbstractPrinterFactory
        ' return default printer factory
        Return New SystemOutPrinterFactory()
    End Function
    Public MustOverride Function GetPrinter() As Printer
End Class

''' hasil turunan abstract class
Public Class SystemOutPrinterFactory
    Inherits AbstractPrinterFactory
    Public Overrides Function GetPrinter() As Printer
        Return New SystemOutPrinter()
    End Function
End Class

Abstract Class vs. Interface

Jika kita perhatikan di atas, Inheritance dapat berupa extend/inherits class lain, atau implements sebuah interface. Keduanya sama-sama mewariskan semua method ke child class. Namun ada perbedaan yang perlu diperhatikan. Sebuah class hanya bisa extend/inherits dari satu class saja, sedangkan sebuah class bisa implements banyak Interface. Untuk memudahkannya. Inherits menggambarkan hubungan “adalah”, artinya Class Tiger inherits Animals, sama artinya Tiger adalah Animals, Sedangkan Implements artinya “bisa melakukan sesuatu”, misalkan Tiger Implements Running, Swimming. Artinya Tiger bisa Running dan Swimming.

Hello World!

Akhirnya setelah semua siap, sekarang kita buatkan method Main untuk memanggil Hello World kita, seperti di bawah ini

''' module utama
Module HelloWorld
    Public Sub Main()
        Dim message As New Message("Hello World!")
        Dim factory As AbstractPrinterFactory
        Dim printer As Printer
        ' create printer
        factory = SystemOutPrinterFactory.GetFactory()
        printer = factory.GetPrinter()
        ' display message 
        ' menggunakan printer yang di buat di atas
        message.PrintOut(printer)
    End Sub
End Module

Dan hasil tampilannya seperti dibawah ini

Hello World Versi OOP Menggunakan VB.net

Source code lengkap menggunakan Visual Studio 2012 silakan unduh di sini.

[collapsed title=Source Code Lengkap versi VB.net]

''' 

”’ Class berisi pesan yang ingin ditampilkan ”’

Public Class Message Private message As String ‘ constructor Public Sub New(ByVal message As String) Me.message = message End Sub ‘ fungsi untuk menampilkan pesan Public Sub PrintOut(printer As Printer) printer.PrintOut(Me.ToString()) End Sub ‘ fungsi untuk mengubah pesan menjadi string Public Overrides Function ToString() As String Return Me.message End Function End Class ”’

”’ Interface Printer ”’

Public Interface Printer Sub PrintOut(ByVal message As String) End Interface ”’

”’ implementasi interface Printer ”’

Public Class SystemOutPrinter Implements Printer Public Sub PrintOut(message As String) Implements Printer.PrintOut Console.WriteLine(message) End Sub End Class ”’

”’ contoh class abstract ”’ harus dibuat object inheritance kalau mau pake ”’

Public MustInherit Class AbstractPrinterFactory Public Shared Function GetFactory() As AbstractPrinterFactory ‘ return default printer factory Return New SystemOutPrinterFactory() End Function Public MustOverride Function GetPrinter() As Printer End Class ”’

”’ hasil turunan abstract class ”’

Public Class SystemOutPrinterFactory Inherits AbstractPrinterFactory Public Overrides Function GetPrinter() As Printer Return New SystemOutPrinter() End Function End Class ”’

”’ module utama ”’

Module HelloWorld Public Sub Main() Dim message As New Message(“Hello World!”) Dim factory As AbstractPrinterFactory Dim printer As Printer ‘ create printer factory = SystemOutPrinterFactory.GetFactory() printer = factory.GetPrinter() ‘ display message ‘ menggunakan printer yang di buat di atas message.PrintOut(printer) Console.ReadLine() End Sub End Module

[/collapsed]

 

Versi PHP

 

UPDATE: Karena ada permintaan program Hello World dalam versi PHP, silakan buka spoiler di bawah ini untuk lebih jelasnya

 

[collapsed title=Source Code Lengkap versi PHP]

 

/*
 * contoh interface
 */
interface Printer 
{ 
	public function printOut($message); 
} 

/*
 * class Message 
 * berisi pesan string yang ingin ditampilkan
 */
class Message 
{ 
	private $message; 

	public function __construct($message) { 
		$this->message = $message; 
	} 

	public function printOut($printer) { 
		$printer->printOut($this->toString()); 
	} 

	public function toString() { 
		return $this->message; 
	} 
} 

/*
 * contoh class abstract
 * harus dibuat object inheritance kalau mau pake
 */
abstract class AbstractPrinterFactory 
{ 
	public static function getFactory(){ 
		return new SystemOutPrinterFactory(); 
	} 

	public abstract function getPrinter(); 
} 

/*
 * contoh inheritance dari class abstract
 */
class SystemOutPrinterFactory extends AbstractPrinterFactory 
{ 
	public function getPrinter() { 
		return new SystemOutPrinter(); 
	} 
} 

/*
 * contoh implementasi interface
 */
class SystemOutPrinter implements Printer 
{ 
	public function printOut($message) { 
		print $message; 
	} 
} 

/*
 * program utama :)
 */
class HelloWorld 
{ 
	public static function run($arg) 
	{ 
		$message = new Message($arg); 
		$factory = AbstractPrinterFactory::getFactory(); 
		$printer = $factory->getPrinter(); 
		$message->printOut($printer); 
	} 
}


/*
 * Sekarang jalankan aplikasi
 */
HelloWorld::run("Hello, World!");

 

[/collapsed]

 

Selamat Belajar!

 

Hello World Versi OOP Menggunakan VB.net

 

Aplikasi Inventory Sederhana – Desain User Interface

Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs

Desain User Interface | Untuk memudahkan penggunaan aplikasi atau program yang kita buat, makan user interface atau antarmuka pengguna haruslah cukup intuitif dan konsisten. Misalkan sebuah aplikasi inventory pastinya akan mempunya form untuk menampilkan daftar gudang, daftar barang, daftar transaksi barang dan sebagainya. Form-form yang memiliki tujuan serupa harus memiliki layout yang sama, dalam artian memiliki posisi button yang sama, posisi grid juga sama, dan sebagainya. Untuk itu kita bisa saja membuat beberapa form dan menambahkan control ke dalamnya satu persatu, kemudian kita ulangi kembali langkah2 tersebut untuk semua form yang diperlukan…. Sungguh kerja keras yang luar biasa 🙂 …. Namun sebagai programmer kita harus juga kerja cerdas. Di sinilah Visual Inheritance akan membantu kita mempermudah hal tersebut.

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

Masih ingat dengan konsep Inheritance di OOP? Dengan menggunakan inheritance kita bisa membuat sebuah class yang merupakan turunan dari class yang lain dengan class hasil turunannya mewariskan (inherit) semua sifat (properties dan methods) dari superclass-nya. Dan kalau kita perhatikan Form juga adalah sebuah class, artinya kita juga bisa membuat sebuah class turunannya. Di sinilah istilah Visual Inheritance menjadi relevan, karena seluruh tampilan visual, berupa layout dan posisi control, seperti Button, Panel, Label, dan sebagainya otomatis akan diwariskan kepada Form turunannya, sehingga keinginan kita membuat sebuah User Interface yang konsisten bisa dicapai dengan coding seminimal mungkin.

Untuk Aplikasi Inventory Sederhana yang sedang kita buat ini, kita memerlukan 2 (dua) buah form dengan tampilan layout Button yang konsisten, untuk mempermudah pengguna, yaitu

  • Pertama, form untuk melihat daftar barang dan daftar transaksi
  • Kedua, form untuk proses tambah atau edit barang dan transaksi

Sesuai desain aplikasi yang sudah kita buat sebelumnya, desain form untuk menampilkan daftar barang dan daftar transaksi harus memiliki sejumlah Button untuk proses Tambah, Ubah, dan Hapus. Action tambahan lainnya adalah Button untuk Refresh dan Cetak Data. Maka desainnya kita buat seperti ini.

[collapsed title=Spoiler: Desain Form List] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Sedangkan form untuk proses penambahan dan pengubahan data cukup memiliki Button untuk Simpan saja, seperti ini.

[collapsed title=Spoiler: Desain Form Edit Data] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Seluruh control dalam template tersebut harus kita set property Modifer sebagai Protected, agar kita bisa mengubah property masing-masing control tersebut di dalam form turunannya.

[collapsed title=Spoiler: Ubah Modifier Semua Control] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Untuk menambahkan form turunan dari template yang sudah kita buat di atas maka, maka silakan buka Form Dialog Add New Item, dan pilih Inherited Form seperti gambar di bawah ini, kemudian berikan nama form turunan dan klik tombol [Add]

[collapsed title=Spoiler: Add New Item Dialog] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Berikutnya akan muncul Dialog Box yang meminta kita untuk memilih Form superclass, atau Form template layout yang akan kita pakai sebagai parent, seperti tampak pada gambar di bawah ini.

[collapsed title=Spoiler: Select Parent Form] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Jika kita kita buka file frmItemList.Designer.vb, maka ada kata kunci penting yang menandakan bahwa frmItemList adalah turunan (inherit) dari frmList. Seperti terlihat di gambar ini.

[collapsed title=Spoiler: Inheritance – Designer Code] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Tambahkan semua form yang kita perlukan, meliputi Form Daftar Barang, Form Edit Barang, Form Daftar Barang Masuk, Form Edit Barang Masuk, dan seterusnya, sehingga keseluruhan Solution kita menjadi seperti gambar di bawah ini.

[collapsed title=Spoiler: Struktur File Solution] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Setelah selesai, maka kita dapat mengubah dan menambahkan control yang kita inginkan ke Form Turunannya, misalkan contoh untuk Form Entry Data Master Barang seperti gambar di bawah ini.

[collapsed title=Spoiler: Contoh Desain Form Edit Barang] Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs [/collapsed]

Mudah-mudahan penjelasan tentang Visual Inheritance dapat dipahami dengan mudah, dan silakan kunjungi link di bawah ini untuk mengunduh source-code sementara.

[collapsed title=Spoiler: Download Source Code Di Sini] Dibuat menggunakan Visual Studio 2013, Silakan Download Source Code Di Sini [/collapsed]

Salam PojokProgrammer ^_^

 

.