Kamis, 20 Januari 2011

Sssttt …. Windows 64 bit lebih renyah dari 32 bit

untuk semua yang sudah memiliki alat tempur yang support 64 bit, dan menggunakan windows, disarankan untuk memasang versi 64 bit nya, rasanya wuss… wusss… jauh lebih kencang ^^.

 

Rgds
Adi

Senin, 15 November 2010

Generic In VB.NET

karena lagi seru2nya nobar bareng teman2 mengenai topik Generic dengan C++ yang bisa bikin mual karena penggunaan tanda * dan ** (a.k.a. Pointer).

berikut ini bentuk sederhananya dengan menggunakan bahasa pemrograman VB yang terdapat dalam .NET Platform.

berikut ini ceritanya:

misalkan kita ingin membuat fungsi untuk melakukan pertukaran data, dengan fungsi seperti berikut ini:

Sub Swap(ByRef a As Integer, ByRef b As Integer)
        Dim temp As Integer = a
        a = b
        b = temp
End Sub

fungsi diatas bisa kita gunakan untuk mempertukarkan 2 buah data yang bertipe integer. seperti contoh penggunaan berikut ini:

Dim a, b As Integer
a = 2
b = 5
Console.WriteLine("A = {0}, B = {1}", a, b)
Swap(a, b)
Console.WriteLine("A = {0}, B = {1}", a, b)

pertanyaannya, bagaimana jika kita ingin mempertukarkan data yang bertipe double, atau string ?. jika dengan pendekatan di atas, maka harus didefinisikan fungsi-fungsi yang sama yang bersesuaian dengan tipe data yang diinginkan (istilahnya: method overloading)

namun, untuk membuat proses tersebut menjadi lebih mudah, bisa digunakan Generic Method, sehingga definisi fungsi cukup dilakukan 1x saja, kemudian bisa digunakan untuk jenis tipe data apa saja.  berikut ini fungsi swap dalam bentuk Generic:

Sub SwapGeneric(Of T)(ByRef x1 As T, ByRef x2 As T)
        Dim temp As T = x1
        x1 = x2
        x2 = temp
End Sub

perhatikan perbedaan yang ada antara Swap dengan SwapGeneric, di SwapGeneric, fungsi tersebut tidak memberitahukan secara spesifik apa tipe data yang akan dipertukarkan, tapi dibuat Generic dengan menggunakan T yang nantinya T tersebut akan digantikan oleh tipe data yang diinginkan pada saat fungsi SwapGeneric ini digunakan. berikut ini contoh penggunaannya:

- mempertukarkan 2 buah data integer

Dim a, b As Integer
a = 2
b = 5
Console.WriteLine("A = {0}, B = {1}", a, b)
SwapGeneric(Of Integer)(a, b)
Console.WriteLine("A = {0}, B = {1}", a, b)


- mempertukarkan 2 buah data double

Dim c, d As Double
c = 10.2
d = 5.5
Console.WriteLine("C = {0}, D = {1}", c, d)
SwapGeneric(Of Double)(c, d)
Console.WriteLine("C = {0}, D = {1}", c, d)


- mempertukarkan 2 buah data string

Dim e, f As String
e = "Saya"
f = "Dia"
Console.WriteLine("E = {0}, F = {1}", e, f)
SwapGeneric(Of String)(e, f)
Console.WriteLine("E = {0}, F = {1}", e, f)

bisa dilihat, dengan fungsi yang sama, bisa digunakan untuk mempertukarkan data dengan tipe data apa saja. bahkan untuk class seperti yang ditunjukkan pada contoh berikut ini:

Dim p1 As New Point(10, 2)
Dim p2 As New Point(5, 6)
Console.WriteLine("Before:")
Console.WriteLine("P1 -> " & p1.ToString())
Console.WriteLine("P2 -> " & p2.ToString())
SwapGeneric(Of Point)(p1, p2)
Console.WriteLine("After:")
Console.WriteLine("P1 -> " & p1.ToString())
Console.WriteLine("P2 -> " & p2.ToString())

dengan definisi class Point adalah sebagai berikut:

Public Class Point
    Public Property X As Integer
    Public Property Y As Integer
    Public Sub New(ByVal x As Integer, ByVal y As Integer)
        Me.X = x
        Me.Y = y
    End Sub
    Public Overrides Function ToString() As String
        Return String.Format("X = {0}, Y = {1}", X, Y)
    End Function
End Class

selain membuat method Generic, kita juga bisa membuat class Generic, seperti contoh struktur data Stack Generic berikut ini:

Public Class StackGeneric(Of T)

    Dim data As New List(Of T)

    Public Sub New()
        data.Clear()
    End Sub

    Public Function Count() As Integer
        Return data.Count
    End Function

    Public Sub Push(ByVal s As T)
        data.Add(s)
    End Sub

    Public Function Pop() As T
        Dim s As T = data(data.Count - 1)
        data.RemoveAt(data.Count - 1)
        Return s
    End Function

    Public Function Top() As T
        Return data(data.Count - 1)
    End Function

End Class

sama seperti T pada method Generic, di sini T juga baru akan ditentukan tipe datanya nanti pada saat penggunaan. dan berikut ini contoh penggunaan dari class di atas:

‘ membuat object StackGeneric –> Of Integer
Dim stack1 As New StackGeneric(Of Integer)()

Console.WriteLine(stack1.Count())

stack1.Push(1)
stack1.Push(2)
stack1.Push(3)
stack1.Push(4)
stack1.Push(5)

Console.WriteLine(stack1.Count())

Console.WriteLine("Elemen Stack:")
While stack1.Count > 0
    Console.WriteLine(stack1.Pop())
End While

dan karena sifatnya yang Generic, kita juga bisa mendefinisikan stack of string seperti contoh berikut ini:

Dim stack2 As New StackGeneric(Of String)()
Console.WriteLine(stack2.Count())
stack2.Push("Satu")
stack2.Push("Dua")
stack2.Push("Tiga")
stack2.Push("Empat")
stack2.Push("Lima")
Console.WriteLine(stack2.Count())
Console.WriteLine("Elemen Stack:")
While stack2.Count > 0
    Console.WriteLine(stack2.Pop())
End While

 

ok, semoga bermanfaat.

Rgds
Adi

Sabtu, 06 November 2010

Demo Praktek - Program Membuat Menu Pesanan Makanan Pada Restoran

Program berikut ini ditulis dengan menggunakan VB 2010.

berikut ini screenshot rancangan form nya:

image

dan berikut ini tampilan sewaktu mode Run:

image

program sudah didesain sangat fleksibel, sehingga penambahan menu makanan, menu minuman dan menu bonus bisa dilakukan dengan mudah tanpa perlu banyak mengedit source code program. hal yang perlu dilakukan untuk setiap penambahan menu yang baru adalah:

1. penamaan terhadap kontrol checkbox nama menu, label harga, dan textbox jumlah pesanan baru tersebut.
format:
checkbox –> chkXXX
label –> lblXXX
textbox –> txtXXX

2. daftarkan pada jendela properties event pada event CheckedChanged untuk checkbox yang baru tersebut agar menggunakan event handler CheckedChanged yang sudah ada.
image

ok, source code program dapat didownload dari Sini.
semoga bermanfaat

Rgds
Adi

Sabtu, 30 Oktober 2010

Access Modifier VB.NET Version

ketika bekerja dengan paradigma OO, access modifier merupakan salah satu point penting yang harus diperhatikan ketika menulis code. dengan menggunakan access modifier, programmer bisa membatasi type yang ditulis (apakah class, method, property, field, etc.) dapat diakses dari mana saja.

sama seperti C#, untuk VB.NET, access modifier yang dapat digunakan juga ada 5, yaitu: Public, Friend, Protected, Private dan Protected Friend

berikut ini penjelasan dari masing-masing access modifier:

1. Public

type yang menggunakan access modifier ini membuat type tersebut bisa diakses tanpa pembatasan apapun. secara default.

2. Friend

type yang menggunakan access modifier ini membuat type tersebut bisa diakses selama dalam satu assembly yang sama. assembly di sini berarti sebuah dll.

Friend ini merupakan access modifier default yang digunakan untuk class yang tidak menuliskan access modifiernya secara explicit.

Friend lebih terbatas dari Public.

3. Protected

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan dan turunan dari type yang bersangkutan.

Protected lebih terbatas dari Friend.

4. Private

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan.

private merupakan access modifier yang paling secure. semua type yang dilabeli access modifier private membuat type tersebut tidak dapat diakses dari luar type yang bersangkutan.

5. Protected Friend

access modifier ini merupakan pengabungan dari dari Protected dan Friend. dengan menggunakan access modifier ini, maka sebuah type dapat diakses dari dalam class yang bersangkutan, atau dari turunan class yang bersangkutan atau dalam satu assembly yang sama.

ok, semoga bermanfaat

Rgds
Adi

Access Modifier C# Version

ketika bekerja dengan paradigma OO, access modifier merupakan salah satu point penting yang harus diperhatikan ketika menulis code. dengan menggunakan access modifier, programmer bisa membatasi type yang ditulis (apakah class, method, property, field, etc.) dapat diakses dari mana saja.

untuk C#, access modifier yang dapat digunakan ada 5, yaitu: public, internal, protected, private dan protected internal

berikut ini penjelasan dari masing-masing access modifier:

1. public

type yang menggunakan access modifier ini membuat type tersebut bisa diakses tanpa pembatasan apapun. secara default, enumeration dan interface menggunakan access modifier ini.

2. internal

type yang menggunakan access modifier ini membuat type tersebut bisa diakses selama dalam satu assembly yang sama. assembly di sini berarti sebuah dll.

internal lebih terbatas dari public.

3. protected

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan dan turunan dari type yang bersangkutan.

protected lebih terbatas dari internal.

4. private

type yang menggunakan access modifier ini membuat type tersebut hanya bisa diakses dari type yang bersangkutan. merupakan access modifier default yang digunakan untuk variable (field) dan method.

private merupakan access modifier yang paling secure. semua type yang dilabeli access modifier private membuat type tersebut tidak dapat diakses dari luar type yang bersangkutan.

5. protected internal

access modifier ini merupakan pengabungan dari dari protected dan internal. dengan menggunakan access modifier ini, maka sebuah type dapat diakses dari dalam class yang bersangkutan, atau dari turunan class yang bersangkutan atau dalam satu assembly yang sama.

ok, semoga bermanfaat

Rgds
Adi

Rabu, 27 Oktober 2010

Source Code Praktek Mengenai Topik Menu

sesuai dengan janji saya, berikut ini source dari topik menu yang dibahas pada praktek hari selasa tgl 26/10/2010. silahkan download dari link Ini

dan semoga bermanfaat,

 

Rgds
Adi

Minggu, 24 Oktober 2010

Create Koneksi Antara VB.NET (a.k.a B#) dengan Database SQL Server

untuk bisa bekerja dengan database dari program vb.net, langkah pertama yang harus dilakukan adalah dengan membentuk koneksi antara program dengan database servernya. pada artikel ini, database yang digunakan adalah SQL Server 2008 dengan nama database yang akan digunakan adalah OMS dan untuk user SQL Servernya yang akan digunakan adalah sa dengan sandi misalkan juga sa.

karena database yang digunakan adalah SQL Server, namespace yang akan kita manfaatkan adalah namespace System.Data.SqlClient. object class yang bertanggung jawab untuk membentuk koneksi dengan database adalah object bertipe SqlConnection.

object SqlConnection sendiri dalam membentuk koneksi ke database SQL Server memerlukan parameter yang disebut sebagai ConnectionString. ConnectionString ini sendiri adalah sebuah string yang berisi parameter-parameter yang dibutuhkan untuk membentuk koneksi itu sendiri. adapun parameter-parameter tersebut adalah:

Data Source atau Server –> menyatakan nama komputer / ip address komputer di mana database SQL Servernya berada. jika database berada satu mesin dengan aplikasi, anda bisa menggunakan localhost\<sql server instance name> atau (local)\<sql server instance name>  atau .\<sql server instance name>
untuk mengecek sql server instance name, bisa dilakukan via menu sql server configuration manager seperti yang ditunjukkan pada gambar berikut.

image

image

pada laptop saya, sql server instance name yang digunakan adalah SQL2008

Initial Catalog atau Database –> menyatakan nama database yang akan diambil / digunakan dari mesin database SQL Server yang sudah berhasil dicontact. pada artikel ini database yang akan digunakan bernama OMS.

image

Integrated Security = True | SSPI atau UID = <UserID>; PWD = <Password> –> digunakan untuk memberitahukan cara program akan melakukan koneksi ke database SQL Server, dalam hal ini ada 2 teknik yang bisa digunakan, yaitu dengan menggunakan Windows Authentication yakni dengan menggunakan account windows (via Integrated Security = True | SSPI), atau dengan menggunakan SQL Server Authentication yakni dengan menggunakan account sql server yang sudah disediakan (via UID = <UserID>; PWD = <Password>).

ok, berikut ini detail bagaimana kode proses pembentukan koneksi ke database sql server via vb.net

misalkan rancangan programnya seperti berikut ini:

image

untuk proses pembentukan koneksi, sedikitnya ada dua pendekatan yang bisa digunakan, yaitu:

Early Open – Late Closed

contoh code ditunjukkan pada sample code berikut ini:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
              "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
    ' jika menggunakan sql server auth.
    'Dim connString2 As String = _
    '          "Data Source = .\sql2008; Initial Catalog = OMS; UID = sa; PWD = sa"

    ' Early open via constructor
    Public Sub New()
        InitializeComponent()
        ' create object SqlConnection dengan melewatkan parameter 
        ' yang dibutuhkan via ConnectionString
        ' jika menggunakan windows auth.
        conn = New SqlConnection(connString)
        ' atau
        ' jika menggunakan sql server auth.
        'conn = New SqlConnection(connString2)
        ' open koneksinya
        conn.Open()
        ' tampilkan state dari koneksi
        ' jika berhasil dibuka, maka akan tercetak Status Koneksi: Open
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
    End Sub

    ' late closed via event FormClosed
    Private Sub Form1_FormClosed(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ' menutup koneksi jika ada yang sedang terbuka
        If conn IsNot Nothing Then conn.Close() : conn.Dispose()
    End Sub

End Class

Open When Needed – Closed As Soon As Possible

contoh code ditunjukkan pada sample code berikut ini:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
           "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
    ' jika menggunakan sql server auth.
    'Dim connString2 As String = _
    '        "Data Source = .\sql2008; Initial Catalog = OMS; UID = sa; PWD = sa"

    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
        conn = New SqlConnection(connString)
        conn.Open() ' open koneksi yang sudah terbentuk
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
        Application.DoEvents()
        ' biarkan sistem idle selama 3 detik
        ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
        System.Threading.Thread.Sleep(3000)
        ' close koneksi
        conn.Close()
        ' dispose koneksi
        conn.Dispose()
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
    End Sub

End Class

Penggunaan Using

dengan menggunakan Using … End Using, programmer tidak perlu dipusingkan lagi dengan proses penutupan dan penghapusan object yang sudah tidak digunakan secara manual, karena hal tersebut akan otomatis akan ditangani oleh Using. syarat object yang bisa dipasang dengan Using … End Using adalah object yang mengimplementasikan interface IDisposable seperti object bertipe SqlConnection yang digunakan dicontoh ini. berikut bentuk perubahan code nya:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' bentuk string ConnectionString
    ' jika menggunakan windows auth.
    Dim connString As String = _
            "Data Source = .\sql2008; Initial Catalog = OMS; Integrated Security = True"
   
    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, _
                     ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
       Using conn = New SqlConnection(connString)
            conn.Open() ' open koneksi yang sudah terbentuk
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
            Application.DoEvents()
            ' biarkan sistem idle selama 3 detik
            ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
            System.Threading.Thread.Sleep(3000)
        End Using
        ' dengan penggunaan Using,
        ' programmer tidak perlu lagi menutup koneksi secara manual
        ' proses penutupan dan penghapusan object dari memori akan diurus
        ' oleh Using
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

Menggunakan MySetting properties untuk menyimpan ConnectionString

cara-cara yang dipakai pada code sebelumnya masih menggunakan penulisan ConnectionString secara hardcode. hal ini suatu saat akan menimbulkan keribetan tersendiri apabila suatu saat terjadi pemindahan server database ke lokasi dengan alamat yang berbeda dengan alamat yang digunakan saat ini. untuk itu kita bisa menyimpan string ConnectionString ke dalam file app.config via settingan properties dibagian Setting pada My Project Properties, seperti yang ditunjukkan pada gambar di bawah ini.

image

dengan menuliskan connectionstring ke dalam file app.config akan membuat proses perubahan terhadap nilai parameter dalam connectionstring lebih mudah untuk dimodifikasi, karena tidak perlu lagi menggantinya langsung dengan cara mengedit code, cuma perlu mengedit file app.config dari aplikasi yang bersangkutan saja.

image

perubahan terhadap code hanya terjadi pada proses pemanggilan connectionString saja, yaitu dengan memanggil dari object MySetting, seperti ditunjukkan oleh code di bawah ini:

' import namespace System.Data.SqlClient
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing

    ' open when needed - close ASAP (As Soon As Possible)
    Private Sub btnOpenThenClosed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenThenClosed.Click
        ' create koneksi on demand
        ' dengan menggunakan ConnectionString via MySetting Property
        Using conn = New SqlConnection(My.MySettings.Default.ConnString) 
            conn.Open() ' open koneksi yang sudah terbentuk
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
            Application.DoEvents()
            ' biarkan sistem idle selama 3 detik
            ' anda bisa menggantinya dengan proses-proses yang ingin dikerjakan
            System.Threading.Thread.Sleep(3000)
        End Using
        ' dengan penggunaan Using,
        ' programmer tidak perlu lagi menutup koneksi secara manual
        ' proses penutupan dan penghapusan object dari memori akan diurus
        ' oleh Using
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

Membentuk string ConnectionString Secara Runtime

dan selain menggunakan cara-cara di atas, kita juga bisa membentuk string ConnectionString secara runtime via object SqlServerConnectionStringBuilder.

untuk sample pada aplikasi ini, kita akan menyesuaikan rancangan aplikasinya menjadi seperti di bawah ini:

image image

dan code programnya adalah sebagai berikut:

' import namespace yang dibutuhkan
Imports System.Data.SqlClient

Public Class Form1

    ' buat object bertipe SqlConnection
    Dim conn As SqlConnection = Nothing
    ' buat object SqlConnectionStringBuilder
    Dim connString As SqlConnectionStringBuilder = Nothing

    Public Sub New()
        InitializeComponent()
        Me.cboAuthType.SelectedIndex = 0
    End Sub

    Private Sub cboAuthType_KeyPress(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cboAuthType.KeyPress
        e.Handled = True
    End Sub

    Private Sub cboAuthType_SelectedIndexChanged(ByVal sender As System.Object, _
                 ByVal e As System.EventArgs) Handles cboAuthType.SelectedIndexChanged
        If Me.cboAuthType.SelectedIndex = 0 Then
            Me.txtUserID.Enabled = False
            Me.txtPassword.Enabled = False
        Else
            Me.txtUserID.Enabled = True
            Me.txtPassword.Enabled = True
        End If
    End Sub

    Private Sub btnOpen_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles btnOpen.Click
        Try
            ' validasi
            If Me.txtServerName.Text.Trim().Equals("") Then _
                Throw New Exception("Isi Server Name Please ...")
            If Me.txtDatabaseName.Text.Trim().Equals("") Then _
                Throw New Exception("Isi Database Name Please ...")
            ' membentuk object ConnectionString secara run time
            ' via object SqlConnectionStringBuilder
            connString = New SqlConnectionStringBuilder()
            With connString
                .DataSource = Me.txtServerName.Text.Trim()
                .InitialCatalog = Me.txtDatabaseName.Text.Trim()
                If Me.cboAuthType.SelectedIndex = 0 Then
                    .IntegratedSecurity = True
                Else
                    .UserID = Me.txtUserID.Text.Trim()
                    .Password = Me.txtPassword.Text.Trim()
                End If
            End With
            ' membentuk koneksi
            conn = New SqlConnection(connString.ToString())
            conn.Open() ' open koneksi
            ' cetak status koneksi terkini
            Me.lblStatus.Text = String.Format("Status Koneksi: {0}", conn.State.ToString())
        Catch ex As Exception
            connString = Nothing
            conn = Nothing
            MessageBox.Show(ex.Message, Me.Text, _
                                             MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Private Sub btnClosed_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles btnClosed.Click
        ' tutup koneksi
        If conn IsNot Nothing Then conn.Close() : conn.Dispose()
        ' cetak status koneksi terkini
        Me.lblStatus.Text = String.Format("Status Koneksi: {0}", _
                            If(conn IsNot Nothing, conn.State.ToString(), "Nothing"))
    End Sub

End Class

untuk C#, anda tinggal menyesuaikan sintaks yang digunakan pada artikel ini dengan sintaks dari bahasa C#.

ok, sekian dari saya, semoga bermanfaat bagi semua.

Rgds
Adi