Senin, 03 September 2012

Contoh pembuatan aplikasi tree-tier



Buat Class dgn nama ClassBussinessProcess yang terdiri dari beberapa fungsi seperti dibawah ini :

Private Conn As ADODB.Connection
Private rs As ADODB.Recordset

'---membuat variabel yg bisa diakses oleh form
'---utk mengisi data2 server spt nama server, user dan password
Public Property Get Server() As String
  Server = strServer
End Property

Public Property Let Server(ByVal sServer As String)
  strServer = sServer
End Property

Public Property Get User() As String
  User = strUser
End Property

Public Property Let User(ByVal sUser As String)
  strUser = sUser
End Property

Public Property Get Passwords() As String
  Passwords = strPass
End Property

Public Property Let Passwords(ByVal sPass As String)
  strPass = sPass
End Property

'-----------------------------------------------------------------

'---menampung nama table yg mau dibuka oleh recordset
Public Property Get TableName() As String
  TableName = strTable
End Property

Public Property Let TableName(ByVal sTableName As String)
  strTable = sTableName
End Property

Public Function OpenRecord() As ADODB.Recordset
  If rs.State = adStateOpen Then rs.Close
  rs.CursorLocation = adUseClient
  rs.Open strTable, Conn, adOpenStatic, adLockOptimistic
  Set OpenRecord = rs
End Function

Public Sub AddRecord()
  Dim i As Control
  Dim f As Form
  
  For Each i In f.Controls
  If TypeOf i Is TextBox Then
  i.Text = ""
  ElseIf TypeOf i Is ComboBox Then
  i.Text = ""
  End If
  Next
End Sub

Public Sub InsertRecord(ParamArray arrayFields() As Variant)
  Dim i, JumlahField As Integer
  JumlahField = rs.Fields.Count - 1
  rs.AddNew
  For i = 0 To JumlahField
  rs(i) = arrayFields(i)
  Next
  rs.Update
End Sub

Public Sub DeleteRecord()
  rs.Delete
  rs.Update
  rs.MoveNext
End Sub

Public Sub UpdateRecord(ParamArray arrayFields() As Variant)
On Error Resume Next
  Dim i, JumlahField As Integer
  JumlahField = rs.Fields.Count - 1
  
  For i = 0 To JumlahField
  rs(i) = arrayFields(i)
  Next
  rs.Update
End Sub

Public Sub FindRecord(ByRef sField As String)
  rs.MoveFirst
  rs.Find "CustomerID LIKE '" & sField & "%'"
  If rs.EOF Then
  MsgBox "Data tidak ditemukan", , "Find"
  End If
End Sub

'---utk menampilkan data pada datagrid
Public Sub GridView(ByRef objGrid As Object)
  Set objGrid.DataSource = rs
End Sub

Public Function CountRecord() As String
  CountRecord = rs.RecordCount
End Function

Public Function PositionRecord() As String
  PositionRecord = rs.AbsolutePosition
End Function

Public Sub MoveToFirst()
  rs.MoveFirst
End Sub

Public Sub MoveToPrior()
  rs.MovePrevious
End Sub

Public Sub MoveToNext()
  rs.MoveNext
End Sub

Public Sub MoveToLast()
  rs.MoveLast
End Sub

'---pd saat class dipanggil, maka kode dibawah ini
'---yg pertama kali di jalankan
Private Sub Class_Initialize()
  Set Conn = New ADODB.Connection
  Set rs = New ADODB.Recordset
  
  '---utk mencegah error krn namaserver blm di initial
  '---maka conn.open dicegah spy tdk membuka database dahulu
  If Server = "" Then Exit Sub
  
  '---krn setiap kali class ini dipanggil akan
  '---menjalankan kode dibawah ini, maka utk
  '---mencegah error krn membuka koneksi yg
  '---yg sedang terbuka, maka selalu diperiksa
  '---status koneksinya, kalo sudah terbuka
  '---langsung keluar tapi kalo blm ya dibuka
  If Conn.State = adStateOpen Then Exit Sub
 Conn.Open "Provider=SQLNCLI.1;" & _
  "Data Source=" & Server & ";" & _
  "User ID=" & User & ";" & _
  "Password=" & Passwords & ";" & _
  "Initial Catalog=northwind"
End Sub

'---pd saat class di close bersihkan objek di memori
Private Sub Class_Terminate()
  If rs.State = adStateOpen Then
  rs.Close
  Set rs = Nothing
  End If
  
  If Conn.State = adStateOpen Then
  Conn.Close
  Set Conn = Nothing
  End If
End Sub

 

Nah saya rasa tidak perlu lagi saya menjelaskan dari kode2 diatas ya karena masing2 fungsi

sudah ada komentar penjelasanya koq  

 

Sekarang buat lah satu module, yang fungsinya cuma utk membuat variabel global spy bisa

diakses oleh class maupun form dan isinya seperti dibawah ini:

'---variabel utk menampung nama database user
Public strUser As String

'---variabel utk menampung nama database password
Public strPass As String

'---variabel utk menampung nama server database
Public strServer As String

'---variabel utk menampung nama tabel yg mau dibuka
Public strTable As String

'---variabel utk menampung connection string database
Public ConnString As String

'---variabel utk mengecek apakah tombol add aktif/tidak
'---kalo nilainya true berati memanggil class insert
'---kalo nilainya false berati memanggil class update
Public Add As Boolean

'---variabel utk menampung kode yg mau diedit
Public UpdateKode As String 

 

Sebelum saya lanjutkan, cara kerja dari aplikasi ini kira2 seperti bro

- Pada saat dijlalankan, akan ada form login seperti dibawah ini
 

Isi kode dari form diatas adalah seperti dibawah ini :

Private Sub cmdCancel_Click()
  Unload Me
End Sub

'---mengisi variabel property yg ada dlm class

Private Sub cmdOK_Click()
Dim objClass As New ClassBussinessProcess
  With objClass
  .Server = txtServer.Text
  .User = txtUserName.Text
  .Passwords = txtPassword.Text
  End With
  frmBrowseCustomers.Show
  Unload Me
End Sub



- Setelah di klik OK, maka form akan tertutup dan memanggil form lain seperti gambar dibawah ini :

 

Kode ukt form diatas adalah seperti dibawah ini :

Private objClass As New ClassBussinessProcess

Private Sub cmdClose_Click()
  Unload Me
End Sub

'---utk merefresh data spy tampil dgn data yg baru
'---krn insert data atau edit data
Private Sub cmdRefresh_Click()
  objClass.OpenRecord
  objClass.GridView DataGrid1
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
End Sub

'---pd saat form ini menjadi form yg aktif maka akan
'---diperiksa isi variabel updatekode, jika kosong
'---maka langsung keluar, tetapi jika ada isinya
'---maka panah datagrid akan diarahkan pd data yg
'---baru saja di edit,
Private Sub Form_Activate()
  If UpdateKode = "" Then
  Exit Sub
  Else
  objClass.FindRecord UpdateKode
  DataGrid1.MarqueeStyle = dbgHighlightRow
  DataGrid1.SetFocus
  End If
End Sub

Private Sub Form_Load()
  objClass.TableName = "Customers"
  objClass.OpenRecord
  objClass.GridView DataGrid1
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
End Sub

Private Sub ImageFirst_Click()
  objClass.MoveToFirst
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
  DataGrid1.MarqueeStyle = dbgHighlightRow
End Sub

Private Sub ImageLast_Click()
  objClass.MoveToLast
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
  DataGrid1.MarqueeStyle = dbgHighlightRow
End Sub

Private Sub ImageNext_Click()
  objClass.MoveToNext
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
  DataGrid1.MarqueeStyle = dbgHighlightRow
End Sub

Private Sub ImagePrevious_Click()
  objClass.MoveToPrior
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
  DataGrid1.MarqueeStyle = dbgHighlightRow
End Sub

Private Sub cmdAdd_Click()
  '---krn add=true maka class fungsi yg
  '---dipanggil adalah insert
  Add = True
  frmAddEditCustomers.Show vbModal
End Sub

Private Sub cmdDelete_Click()
  objClass.DeleteRecord
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
End Sub

Private Sub cmdEdit_Click()
  Add = False
  frmAddEditCustomers.Show vbModal
End Sub

Private Sub cmdFind_Click()
  objClass.FindRecord txtFind.Text
  DataGrid1.MarqueeStyle = dbgHighlightRow
  DataGrid1.SetFocus
End Sub

Private Sub DataGrid1_Click()
  Add = False
  txtRecord.Text = objClass.PositionRecord & " of " & objClass.CountRecord
End Sub

Private Sub DataGrid1_DblClick()
  Add = False
  cmdEdit_Click
End Sub


Coba perhatikan kode2 diatas, pada form diatas tidak ada kode yg biasa kita buat seperti deklarasi variabel

utk koneksi database atau insert atau yang lain. jadi form diatas bener2 gak kode pemrosesan yg ada cuma

memanggil class, jadi kalo ada perubahan pd class maka tampilan form gak ngaruh .



Cara kerja form diatas adalah sebagai berikut :

1. Pada saat di klik tombol Add atau Edit maka akan terbuka form seperti dibawah ini
 

    Form diatas fungsinya utk menginsert data atau mengedit data

2. Apabila tombol delete di klik maka akan langsung memanggil fungsi menghapus yg ada dalam class

Nah kira-kira seperti itulah ya bisnis proses nya, mudah2an bisa dipahami.

kalo diperhatikan, kode diatas hampir tidak menggunakan sql sintak.


Sumber : http://www.rudihartono.com/index.php/database-programming/18-aplikasi-3-tier
Nama  : Cyntia Al Annisa
Nim     : 11.41010.0213