0% found this document useful (0 votes)
52 views40 pages

I. Form Layout Single Record Dengan Binding Type Ado Data Control

The document describes three different form layouts for single records in Visual Basic using different data binding types: 1. ADO Data Control binding - includes event handling for record navigation and updates. 2. ADO Code binding - includes setting a recordset, binding textboxes, and handling record addition, editing, deletion and navigation. 3. Class binding - initializes a recordset and declares an event for record changes.

Uploaded by

Rina Pahlevi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views40 pages

I. Form Layout Single Record Dengan Binding Type Ado Data Control

The document describes three different form layouts for single records in Visual Basic using different data binding types: 1. ADO Data Control binding - includes event handling for record navigation and updates. 2. ADO Code binding - includes setting a recordset, binding textboxes, and handling record addition, editing, deletion and navigation. 3. Class binding - initializes a recordset and declares an event for record changes.

Uploaded by

Rina Pahlevi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 40

I.

FORM LAYOUT SINGLE RECORD


DENGAN BINDING TYPE ADO DATA CONTROL

Coding :
Private Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
End Sub
Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As
Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As
Boolean)
'This is where you would put error handling code
'If you want to ignore errors, comment out the next line
'If you want to trap them, add code here to handle them
MsgBox "Data error event hit err:" & Description
End Sub

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete

SMK TELKOM SANDHY PUTRA MALANG Page 1


Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Private Sub cmdAdd_Click()


On Error GoTo AddErr
datPrimaryRS.Recordset.AddNew

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
datPrimaryRS.Refresh
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 2


Penjelasan:

Jika kita mengklik tombol update maka secara otomatis data yang akan diganti akan terganti, jadi
tidak ada pilihan untuk membatalkan perubahan data.

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehingga akan tertampil form dengan record kosong seperti ini.

UPDATE : Tombol update untuk merubah isi suatu record pada suatu data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

II. FORM LAYOUT SINGLE RECORD


DENGAN BINDING TYPE ADO CODE

SMK TELKOM SANDHY PUTRA MALANG Page 3


Coding :
Dim WithEvents adoPrimaryRS As Recordset
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean

Private Sub Form_Load()


Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program Files\Microsoft Visual
Studio\VB98\NWIND.MDB;"

Set adoPrimaryRS = New Recordset


adoPrimaryRS.Open "select
CategoryID,ProductID,ProductName,UnitsInStock,UnitsOnOrder,SupplierID from Products Order by
CategoryID", db, adOpenStatic, adLockOptimistic

Dim oText As TextBox


'Bind the text boxes to the data provider
For Each oText In Me.txtFields
Set oText.DataSource = adoPrimaryRS
Next

mbDataChanged = False
End Sub

Private Sub Form_Resize()


On Error Resume Next
lblStatus.Width = Me.Width - 1500
cmdNext.Left = lblStatus.Width + 700
cmdLast.Left = cmdNext.Left + 340
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


If mbEditFlag Or mbAddNewFlag Then Exit Sub

Select Case KeyCode


Case vbKeyEscape
cmdClose_Click
Case vbKeyEnd
cmdLast_Click
Case vbKeyHome
cmdFirst_Click
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
cmdLast_Click
Else
cmdNext_Click
End If
SMK TELKOM SANDHY PUTRA MALANG Page 4
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
lblStatus.Caption = "Record: " & CStr(adoPrimaryRS.AbsolutePosition)
End Sub

Private Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Private Sub cmdAdd_Click()


On Error GoTo AddErr
With adoPrimaryRS
If Not (.BOF And .EOF) Then
mvBookMark = .Bookmark
End If
.AddNew
lblStatus.Caption = "Add record"
mbAddNewFlag = True
SetButtons False
End With

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With adoPrimaryRS
.Delete
.MoveNext
If .EOF Then .MoveLast

SMK TELKOM SANDHY PUTRA MALANG Page 5


End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
adoPrimaryRS.Requery
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdEdit_Click()


On Error GoTo EditErr

lblStatus.Caption = "Edit record"


mbEditFlag = True
SetButtons False
Exit Sub

EditErr:
MsgBox Err.Description
End Sub
Private Sub cmdCancel_Click()
On Error Resume Next

SetButtons True
mbEditFlag = False
mbAddNewFlag = False
adoPrimaryRS.CancelUpdate
If mvBookMark > 0 Then
adoPrimaryRS.Bookmark = mvBookMark
Else
adoPrimaryRS.MoveFirst
End If
mbDataChanged = False

End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

adoPrimaryRS.UpdateBatch adAffectAll

If mbAddNewFlag Then
adoPrimaryRS.MoveLast 'move to the new record
End If

mbEditFlag = False
mbAddNewFlag = False
SetButtons True
mbDataChanged = False

Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 6


Private Sub cmdClose_Click()
Unload Me
End Sub

Private Sub cmdFirst_Click()


On Error GoTo GoFirstError

adoPrimaryRS.MoveFirst
mbDataChanged = False

Exit Sub

GoFirstError:
MsgBox Err.Description
End Sub

Private Sub cmdLast_Click()


On Error GoTo GoLastError

adoPrimaryRS.MoveLast
mbDataChanged = False

Exit Sub

GoLastError:
MsgBox Err.Description
End Sub

Private Sub cmdNext_Click()


On Error GoTo GoNextError

If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext


If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
'show the current record
mbDataChanged = False

Exit Sub
GoNextError:
MsgBox Err.Description
End Sub

Private Sub cmdPrevious_Click()


On Error GoTo GoPrevError

If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious


If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
'show the current record
mbDataChanged = False

Exit Sub

SMK TELKOM SANDHY PUTRA MALANG Page 7


GoPrevError:
MsgBox Err.Description
End Sub

Private Sub SetButtons(bVal As Boolean)


cmdAdd.Visible = bVal
cmdEdit.Visible = bVal
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal
cmdDelete.Visible = bVal
cmdClose.Visible = bVal
cmdRefresh.Visible = bVal
cmdNext.Enabled = bVal
cmdFirst.Enabled = bVal
cmdLast.Enabled = bVal
cmdPrevious.Enabled = bVal
End Sub

Private Sub lblLabels_Click(Index As Integer)

End Sub

Penjelasan :

Pada ADO CODE jika kita mengklik tombol ADD

Maka akan muncul tombol Update dan Cancel seperti gambar dibawah ini :

Dan jika kita mengklik tombol EDIT

SMK TELKOM SANDHY PUTRA MALANG Page 8


Maka akan muncul tombol Update dan Cancel seperti gambar dibawah ini :

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
*Update:untuk menetapkan data yang telah di inputkan
*Cancel:membatalkan proses penambahan data
EDIT : untuk merubah data
*Update:untuk menetapkan data yang telah di ubah
*Cancel:membatalkan proses perubahan data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

III. FORM LAYOUT SINGLE RECORD


DENGAN BINDING TYPE CLASS

Coding :
Dim WithEvents adoPrimaryRS As Recordset
Private DoingRequery As Boolean
Public Event MoveComplete()

Private Sub Class_Initialize()


Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient

SMK TELKOM SANDHY PUTRA MALANG Page 9


db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program Files\Microsoft Visual
Studio\VB98\NWIND.MDB;"

Set adoPrimaryRS = New Recordset


adoPrimaryRS.Open "select
Address,City,CompanyName,ContactName,Country,CustomerID,Fax,Phone,PostalCode,Region from
Customers Order by CustomerID", db, adOpenStatic, adLockOptimistic

DataMembers.Add "Primary"
End Sub

Private Sub Class_GetDataMember(DataMember As String, Data As Object)


Select Case DataMember
Case "Primary"
Set Data = adoPrimaryRS
End Select
End Sub

Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
RaiseEvent MoveComplete
End Sub

Private Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Public Property Get EditingRecord() As Boolean


EditingRecord = (adoPrimaryRS.EditMode <> adEditNone)
End Property

Public Property Get AbsolutePosition() As Long


AbsolutePosition = adoPrimaryRS.AbsolutePosition

SMK TELKOM SANDHY PUTRA MALANG Page 10


End Property

Public Sub AddNew()


adoPrimaryRS.AddNew
End Sub

Public Sub Delete()


adoPrimaryRS.Delete
MoveNext
End Sub

Public Sub Requery()


adoPrimaryRS.Requery
DataMemberChanged "Primary"
End Sub

Public Sub Update()


With adoPrimaryRS
.UpdateBatch adAffectAll
If .EditMode = adEditAdd Then
MoveLast
End If
End With
End Sub

Public Sub Cancel()


With adoPrimaryRS
.CancelUpdate
If .EditMode = adEditAdd Then
MoveFirst
End If
End With
End Sub

Public Sub MoveFirst()


adoPrimaryRS.MoveFirst
End Sub

Public Sub MoveLast()


adoPrimaryRS.MoveLast
End Sub

Public Sub MoveNext()


If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
End Sub

Public Sub MovePrevious()

SMK TELKOM SANDHY PUTRA MALANG Page 11


If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
End Sub

Penjelasan :
Pada Form Single Record dengan Binding Type Class, terdapat class module.

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehingga akan tertampil form dengan record kosong seperti ini dengan 2 button..

*Update:untuk menetapkan data yang telah di inputkan


*Cancel:membatalkan proses penambahan data
EDIT : untuk merubah data

*Update:untuk menetapkan data yang telah di ubah


*Cancel:membatalkan proses perubahan data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

IV. FORM LAYOUT GRID(DATASHEET)


DENGAN BINDING TYPE ADO DATA CONTROL

SMK TELKOM SANDHY PUTRA MALANG Page 12


Coding :

Private Sub Form_Resize()


On Error Resume Next
'This will resize the grid when the form is resized
grdDataGrid.Height = Me.ScaleHeight - datPrimaryRS.Height - 30 - picButtons.Height
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As


Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As
Boolean)
'This is where you would put error handling code
'If you want to ignore errors, comment out the next line
'If you want to trap them, add code here to handle them
MsgBox "Data error event hit err:" & Description
End Sub

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch

SMK TELKOM SANDHY PUTRA MALANG Page 13


Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Private Sub cmdAdd_Click()


On Error GoTo AddErr
datPrimaryRS.Recordset.MoveLast
grdDataGrid.SetFocus
SendKeys "{down}"

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
datPrimaryRS.Refresh
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

Private Sub grdDataGrid_Click()

End Sub

FUNGSI MASING-MASING TOMBOL :

SMK TELKOM SANDHY PUTRA MALANG Page 14


ADD : Tombol add untuk menempatkan cursor pada record kosong yang tersedia pada suatu
data. Jadi, di sini Add tidak menambahkan record kosong, tetapi button ini hanya
menempatkan cursor pada record yang kosong saja.

UPDATE : Tombol update untuk merubah isi suatu record pada suatu data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

V. FORM LAYOUT GRID(DATASHEET)


DENGAN BINDING TYPE ADO CODE

Coding :
Dim WithEvents adoPrimaryRS As Recordset
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean

Private Sub Form_Load()


Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program Files\Microsoft Visual
Studio\VB98\NWIND.MDB;"

Set adoPrimaryRS = New Recordset


adoPrimaryRS.Open "select
Address,City,CompanyName,ContactName,ContactTitle,Country,CustomerID,Fax,Phone,PostalCode,R
egion from Customers Order by CustomerID", db, adOpenStatic, adLockOptimistic

Set grdDataGrid.DataSource = adoPrimaryRS

SMK TELKOM SANDHY PUTRA MALANG Page 15


mbDataChanged = False
End Sub

Private Sub Form_Resize()


On Error Resume Next
'This will resize the grid when the form is resized
grdDataGrid.Height = Me.ScaleHeight - 30 - picButtons.Height - picStatBox.Height
lblStatus.Width = Me.Width - 1500
cmdNext.Left = lblStatus.Width + 700
cmdLast.Left = cmdNext.Left + 340
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


If mbEditFlag Or mbAddNewFlag Then Exit Sub

Select Case KeyCode


Case vbKeyEscape
cmdClose_Click
Case vbKeyEnd
cmdLast_Click
Case vbKeyHome
cmdFirst_Click
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
cmdLast_Click
Else
cmdNext_Click
End If
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
lblStatus.Caption = "Record: " & CStr(adoPrimaryRS.AbsolutePosition)
End Sub

Private Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove

SMK TELKOM SANDHY PUTRA MALANG Page 16


Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Private Sub cmdAdd_Click()


On Error GoTo AddErr
adoPrimaryRS.MoveLast
adoPrimaryRS.AddNew
grdDataGrid.SetFocus

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With adoPrimaryRS
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
Set grdDataGrid.DataSource = Nothing
adoPrimaryRS.Requery
Set grdDataGrid.DataSource = adoPrimaryRS

Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdEdit_Click()


On Error GoTo EditErr

lblStatus.Caption = "Edit record"


mbEditFlag = True
SetButtons False
Exit Sub

EditErr:
MsgBox Err.Description
End Sub
Private Sub cmdCancel_Click()
On Error Resume Next

SMK TELKOM SANDHY PUTRA MALANG Page 17


SetButtons True
mbEditFlag = False
mbAddNewFlag = False
adoPrimaryRS.CancelUpdate
If mvBookMark > 0 Then
adoPrimaryRS.Bookmark = mvBookMark
Else
adoPrimaryRS.MoveFirst
End If
mbDataChanged = False

End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

adoPrimaryRS.UpdateBatch adAffectAll

If mbAddNewFlag Then
adoPrimaryRS.MoveLast 'move to the new record
End If

mbEditFlag = False
mbAddNewFlag = False
SetButtons True
mbDataChanged = False

Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

Private Sub cmdFirst_Click()


On Error GoTo GoFirstError

adoPrimaryRS.MoveFirst
mbDataChanged = False

Exit Sub

GoFirstError:
MsgBox Err.Description
End Sub

Private Sub cmdLast_Click()


On Error GoTo GoLastError

adoPrimaryRS.MoveLast
mbDataChanged = False

Exit Sub

GoLastError:
MsgBox Err.Description
End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 18


Private Sub cmdNext_Click()
On Error GoTo GoNextError

If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext


If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
'show the current record
mbDataChanged = False

Exit Sub
GoNextError:
MsgBox Err.Description
End Sub

Private Sub cmdPrevious_Click()


On Error GoTo GoPrevError

If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious


If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
'show the current record
mbDataChanged = False

Exit Sub

GoPrevError:
MsgBox Err.Description
End Sub

Private Sub SetButtons(bVal As Boolean)


cmdAdd.Visible = bVal
cmdEdit.Visible = bVal
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal
cmdDelete.Visible = bVal
cmdClose.Visible = bVal
cmdRefresh.Visible = bVal
cmdNext.Enabled = bVal
cmdFirst.Enabled = bVal
cmdLast.Enabled = bVal
cmdPrevious.Enabled = bVal
End Sub

Private Sub grdDataGrid_Click()

End Sub
FUNGSI MASING-MASING TOMBOL :
ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehigga akan tertampil 1 record kosong pada form tersebut.

SMK TELKOM SANDHY PUTRA MALANG Page 19


EDIT : Tombol edit untuk merubah isi suatu record pada suatu data.
Pada saat kita mengklik button ini, akan muncul 2 button lagi yaitu:
*Update:untuk menetapkan data yang telah di ubah
*Cancel:membatalkan proses perubahan data

DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

VI. FORM LAYOUT GRID(DATASHEET)


DENGAN BINDING TYPE CLASS

Coding :
Dim WithEvents adoPrimaryRS As Recordset

SMK TELKOM SANDHY PUTRA MALANG Page 20


Private DoingRequery As Boolean
Public Event MoveComplete()

Private Sub Class_Initialize()


Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program Files\Microsoft Visual
Studio\VB98\NWIND.MDB;"

Set adoPrimaryRS = New Recordset


adoPrimaryRS.Open "select
Address,City,CompanyName,ContactName,Country,CustomerID,Fax,Phone,PostalCode,Region from
Customers", db, adOpenStatic, adLockOptimistic

DataMembers.Add "Primary"
End Sub

Private Sub Class_GetDataMember(DataMember As String, Data As Object)


Select Case DataMember
Case "Primary"
Set Data = adoPrimaryRS
End Select
End Sub

Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
RaiseEvent MoveComplete
End Sub

Private Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

Public Property Get EditingRecord() As Boolean


EditingRecord = (adoPrimaryRS.EditMode <> adEditNone)
End Property

Public Property Get AbsolutePosition() As Long


AbsolutePosition = adoPrimaryRS.AbsolutePosition
End Property

SMK TELKOM SANDHY PUTRA MALANG Page 21


Public Sub AddNew()
adoPrimaryRS.AddNew
End Sub

Public Sub Delete()


adoPrimaryRS.Delete
MoveNext
End Sub

Public Sub Requery()


adoPrimaryRS.Requery
DataMemberChanged "Primary"
End Sub

Public Sub Update()


With adoPrimaryRS
.UpdateBatch adAffectAll
If .EditMode = adEditAdd Then
MoveLast
End If
End With
End Sub

Public Sub Cancel()


With adoPrimaryRS
.CancelUpdate
If .EditMode = adEditAdd Then
MoveFirst
End If
End With
End Sub

Public Sub MoveFirst()


adoPrimaryRS.MoveFirst
End Sub

Public Sub MoveLast()


adoPrimaryRS.MoveLast
End Sub

Public Sub MoveNext()


If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
End Sub

Public Sub MovePrevious()


If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
End Sub

Penjelasan :
SMK TELKOM SANDHY PUTRA MALANG Page 22
Pada Form Single Record dengan Binding Type Class, terdapat class module.

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehingga akan tertampil form dengan record kosong seperti ini dengan 2 button..

*Update:untuk menetapkan data yang telah di inputkan


*Cancel:membatalkan proses penambahan data
EDIT : untuk merubah data

*Update:untuk menetapkan data yang telah di ubah


*Cancel:membatalkan proses perubahan data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

VII. FORM LAYOUT MS HFLEXGRID


DENGAN BINDING TYPE ADO DATA CONTROL

SMK TELKOM SANDHY PUTRA MALANG Page 23


Coding :
Private Const MARGIN_SIZE = 60 ' in Twips
' variables for column dragging
Private m_bDragOK As Boolean
Private m_iDragCol As Integer
Private xdn As Integer, ydn As Integer

Private Sub Form_Load()


Dim i As Integer

datPrimaryRS.Visible = False

With MSHFlexGrid1

.Redraw = False
' set grid's column widths
.ColWidth(0) = -1
.ColWidth(1) = -1
.ColWidth(2) = -1
.ColWidth(3) = -1
.ColWidth(4) = -1
.ColWidth(5) = -1
.ColWidth(6) = -1

' set grid's style


.AllowBigSelection = True
.FillStyle = flexFillRepeat

' make header bold


.Row = 0
.Col = 0
.RowSel = .FixedRows - 1
.ColSel = .Cols - 1
.CellFontBold = True

' grey every other row


For i = .FixedRows + 1 To .Rows - 1 Step 2
.Row = i
.Col = .FixedCols
.ColSel = .Cols() - .FixedCols - 1
.CellBackColor = &HC0C0C0 ' light grey
Next i

.AllowBigSelection = False
.FillStyle = flexFillSingle
.Redraw = True

End With

End Sub

Private Sub MSHFlexGrid1_DragDrop(Source As Control, X As Single, Y As Single)


'-------------------------------------------------------------------------------------------
' code in grid's DragDrop, MouseDown, MouseMove, and MouseUp events enables column dragging
'-------------------------------------------------------------------------------------------

If m_iDragCol = -1 Then Exit Sub ' we weren't dragging


If MSHFlexGrid1.MouseRow <> 0 Then Exit Sub
SMK TELKOM SANDHY PUTRA MALANG Page 24
With MSHFlexGrid1
.Redraw = False
.ColPosition(m_iDragCol) = .MouseCol
.Redraw = True
End With

End Sub

Private Sub MSHFlexGrid1_MouseDown(Button As Integer, shift As Integer, X As Single, Y As Single)


'-------------------------------------------------------------------------------------------
' code in grid's DragDrop, MouseDown, MouseMove, and MouseUp events enables column dragging
'-------------------------------------------------------------------------------------------

If MSHFlexGrid1.MouseRow <> 0 Then Exit Sub

xdn = X
ydn = Y
m_iDragCol = -1 ' clear drag flag
m_bDragOK = True

End Sub

Private Sub MSHFlexGrid1_MouseMove(Button As Integer, shift As Integer, X As Single, Y As Single)


'-------------------------------------------------------------------------------------------
' code in grid's DragDrop, MouseDown, MouseMove, and MouseUp events enables column dragging
'-------------------------------------------------------------------------------------------

' test to see if we should start drag


If Not m_bDragOK Then Exit Sub
If Button <> 1 Then Exit Sub ' wrong button
If m_iDragCol <> -1 Then Exit Sub ' already dragging
If Abs(xdn - X) + Abs(ydn - Y) < 50 Then Exit Sub ' didn't move enough yet
If MSHFlexGrid1.MouseRow <> 0 Then Exit Sub ' must drag header

' if got to here then start the drag


m_iDragCol = MSHFlexGrid1.MouseCol
MSHFlexGrid1.Drag vbBeginDrag

End Sub

Private Sub MSHFlexGrid1_MouseUp(Button As Integer, shift As Integer, X As Single, Y As Single)


'-------------------------------------------------------------------------------------------
' code in grid's DragDrop, MouseDown, MouseMove, and MouseUp events enables column dragging
'-------------------------------------------------------------------------------------------

m_bDragOK = False

End Sub

Private Sub Form_Resize()

Dim sngButtonTop As Single


Dim sngScaleWidth As Single
Dim sngScaleHeight As Single

On Error GoTo Form_Resize_Error


With Me
sngScaleWidth = .ScaleWidth
sngScaleHeight = .ScaleHeight

SMK TELKOM SANDHY PUTRA MALANG Page 25


' move Close button to the lower right corner
With .cmdClose
sngButtonTop = sngScaleHeight - (.Height + MARGIN_SIZE)
.Move sngScaleWidth - (.Width + MARGIN_SIZE), sngButtonTop
End With

.MSHFlexGrid1.Move MARGIN_SIZE, _
MARGIN_SIZE, _
sngScaleWidth - (2 * MARGIN_SIZE), _
sngButtonTop - (2 * MARGIN_SIZE)

End With
Exit Sub

Form_Resize_Error:
' avoid error on negative values
Resume Next

End Sub
Private Sub cmdClose_Click()

Unload Me

End Sub

Penjelasan :
MS HflexGrid dengan Binding Type Ado Data Control ini merupakan Form yang digunakan sebagai
Report. Jadi, tidak terdapat button untuk merubah, menghapus atau menambah data. Kita hanya bisa
melihat Report nya saja.

VIII. FORM LAYOUT MS HFLEXGRID


DENGAN BINDING TYPE ADO CODE

Coding :
Private Const MARGIN_SIZE = 60 ' in Twips
' variables for data binding
Private datPrimaryRS As ADODB.Recordset

' variables for enabling column sort


Private m_iSortCol As Integer
Private m_iSortType As Integer

SMK TELKOM SANDHY PUTRA MALANG Page 26


Private Sub Form_Load()

Dim sConnect As String


Dim sSQL As String
Dim dfwConn As ADODB.Connection
Dim i As Integer

' set strings


sConnect = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;User ID=Admin;Data
Source=C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Mode=Share Deny None;Jet
OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB:Database Password='';Jet
OLEDB:Global Partial Bulk Ops=2;"
sSQL = "select CompanyName,CustomerID,ContactName,Phone,Address,City,Country from
Customers Order by CustomerID"

' open connection


Set dfwConn = New Connection
dfwConn.Open sConnect

' create a recordset using the provided collection


Set datPrimaryRS = New Recordset
datPrimaryRS.CursorLocation = adUseClient
datPrimaryRS.Open sSQL, dfwConn, adOpenForwardOnly, adLockReadOnly

Set MSHFlexGrid1.DataSource = datPrimaryRS

With MSHFlexGrid1

.Redraw = False
' set grid's column widths
.ColWidth(0) = -1
.ColWidth(1) = -1
.ColWidth(2) = -1
.ColWidth(3) = -1
.ColWidth(4) = -1
.ColWidth(5) = -1
.ColWidth(6) = -1

' set grid's style


.AllowBigSelection = True
.FillStyle = flexFillRepeat

' make header bold


.Row = 0
.Col = 0
.RowSel = .FixedRows - 1
.ColSel = .Cols - 1
.CellFontBold = True

' grey every other row


For i = .FixedRows + 1 To .Rows - 1 Step 2
.Row = i
.Col = .FixedCols
.ColSel = .Cols() - .FixedCols - 1
.CellBackColor = &HC0C0C0 ' light grey
Next i

.AllowBigSelection = False
.FillStyle = flexFillSingle
.Redraw = True

SMK TELKOM SANDHY PUTRA MALANG Page 27


End With

End Sub

Private Sub MSHFlexGrid1_DblClick()


'-------------------------------------------------------------------------------------------
' code in grid's DblClick event enables column sorting
'-------------------------------------------------------------------------------------------

Dim i As Integer

' sort only when a fixed row is clicked


If MSHFlexGrid1.MouseRow >= MSHFlexGrid1.FixedRows Then Exit Sub

i = m_iSortCol ' save old column


m_iSortCol = MSHFlexGrid1.Col ' set new column

' increment sort type


If i <> m_iSortCol Then
' if clicking on a new column, start with ascending sort
m_iSortType = 1
Else
' if clicking on the same column, toggle between ascending and descending sort
m_iSortType = m_iSortType + 1
If m_iSortType = 3 Then m_iSortType = 1
End If

DoColumnSort

End Sub

Sub DoColumnSort()
'-------------------------------------------------------------------------------------------
' does Exchange-type sort on column m_iSortCol
'-------------------------------------------------------------------------------------------

With MSHFlexGrid1
.Redraw = False
.Row = 1
.RowSel = .Rows - 1
.Col = m_iSortCol
.Sort = m_iSortType

.FillStyle = flexFillRepeat
.Col = 0
.Row = .FixedRows
.RowSel = .Rows - 1
.ColSel = .Cols - 1
.CellBackColor = &HFFFFFF
' grey every other row
Dim iLoop As Integer
For iLoop = .FixedRows + 1 To .Rows - 1 Step 2
.Row = iLoop
.Col = .FixedCols
.ColSel = .Cols() - .FixedCols - 1
.CellBackColor = &HC0C0C0 ' light grey
Next iLoop
.FillStyle = flexFillSingle

SMK TELKOM SANDHY PUTRA MALANG Page 28


.Redraw = True
End With

End Sub

Private Sub Form_Resize()

Dim sngButtonTop As Single


Dim sngScaleWidth As Single
Dim sngScaleHeight As Single

On Error GoTo Form_Resize_Error


With Me
sngScaleWidth = .ScaleWidth
sngScaleHeight = .ScaleHeight

' move Close button to the lower right corner


With .cmdClose
sngButtonTop = sngScaleHeight - (.Height + MARGIN_SIZE)
.Move sngScaleWidth - (.Width + MARGIN_SIZE), sngButtonTop
End With

.MSHFlexGrid1.Move MARGIN_SIZE, _
MARGIN_SIZE, _
sngScaleWidth - (2 * MARGIN_SIZE), _
sngButtonTop - (2 * MARGIN_SIZE)

End With
Exit Sub

Form_Resize_Error:
' avoid error on negative values
Resume Next

End Sub
Private Sub cmdClose_Click()

Unload Me

End Sub

Penjelasan :
MS HflexGrid dengan Binding Type Ado Code ini merupakan Form yang digunakan sebagai Report.
Jadi, tidak terdapat button untuk merubah, menghapus atau menambah data. Kita hanya bisa melihat
Report nya saja.

IX. FORM LAYOUT MASTER/DETAIL


DENGAN BINDING TYPE ADO DATA CONTROL
Yang dimaksud dengan report Master-Detail adalah laporan yang informasi didalamnya
ditampilkan secara berkelompok (groupping) berdasarkan kategori tertentu. Ada data induk (master)
dan ada data detail (rincian).

SMK TELKOM SANDHY PUTRA MALANG Page 29


Coding :
Private Sub Form_Load()
Set grdDataGrid.DataSource = datPrimaryRS.Recordset("ChildCMD").UnderlyingValue
End Sub

Private Sub Form_Resize()


On Error Resume Next
'This will resize the grid when the form is resized
grdDataGrid.Width = Me.ScaleWidth
grdDataGrid.Height = Me.ScaleHeight - grdDataGrid.Top - datPrimaryRS.Height - 30 -
picButtons.Height
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As


Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long,
fCancelDisplay As Boolean)
'This is where you would put error handling code
'If you want to ignore errors, comment out the next line
'If you want to trap them, add code here to handle them
MsgBox "Data error event hit err:" & Description
End Sub

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 30


Private Sub cmdAdd_Click()
On Error GoTo AddErr
datPrimaryRS.Recordset.AddNew

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
datPrimaryRS.Refresh
Set grdDataGrid.DataSource = datPrimaryRS.Recordset("ChildCMD").UnderlyingValue
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehingga akan tertampil form dengan record kosong seperti ini.

UPDATE : untuk merubah isi data pada data master


tidak bisa digunakan pada data detail
SMK TELKOM SANDHY PUTRA MALANG Page 31
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

X. FORM LAYOUT MASTER/DETAIL


DENGAN BINDING TYPE ADO CODE

Coding :
Dim WithEvents adoPrimaryRS As Recordset
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean

Private Sub Form_Load()


Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.3.51;Data
Source=C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;"

Set adoPrimaryRS = New Recordset


adoPrimaryRS.Open "SHAPE {select OrderID,CustomerID,OrderDate from Orders Order by OrderID}
AS ParentCMD APPEND ({select OrderID,ProductID,UnitPrice,Quantity,Discount from
[Order Details] Order by OrderID } AS ChildCMD RELATE OrderID TO OrderID) AS
ChildCMD", db, adOpenStatic, adLockOptimistic

Dim oText As TextBox


'Bind the text boxes to the data provider
For Each oText In Me.txtFields
Set oText.DataSource = adoPrimaryRS
Next

Set grdDataGrid.DataSource = adoPrimaryRS("ChildCMD").UnderlyingValue

mbDataChanged = False
End Sub

Private Sub Form_Resize()


On Error Resume Next
'This will resize the grid when the form is resized
grdDataGrid.Width = Me.ScaleWidth
grdDataGrid.Height = Me.ScaleHeight - grdDataGrid.Top - 30 - picButtons.Height - picStatBox.Height
lblStatus.Width = Me.Width - 1500
cmdNext.Left = lblStatus.Width + 700
cmdLast.Left = cmdNext.Left + 340
End Sub
SMK TELKOM SANDHY PUTRA MALANG Page 32
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If mbEditFlag Or mbAddNewFlag Then Exit Sub

Select Case KeyCode


Case vbKeyEscape
cmdClose_Click
Case vbKeyEnd
cmdLast_Click
Case vbKeyHome
cmdFirst_Click
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
cmdLast_Click
Else
cmdNext_Click
End If
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal


pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This will display the current record position for this recordset
lblStatus.Caption = "Record: " & CStr(adoPrimaryRS.AbsolutePosition)
End Sub

Private Sub adoPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal


cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean

Select Case adReason


Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel


End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 33


Private Sub cmdAdd_Click()
On Error GoTo AddErr
With adoPrimaryRS
If Not (.BOF And .EOF) Then
mvBookMark = .Bookmark
End If
.AddNew
lblStatus.Caption = "Add record"
mbAddNewFlag = True
SetButtons False
End With

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
With adoPrimaryRS
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
Set grdDataGrid.DataSource = Nothing
adoPrimaryRS.Requery
Set grdDataGrid.DataSource = adoPrimaryRS("ChildCMD").UnderlyingValue
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdEdit_Click()


On Error GoTo EditErr

lblStatus.Caption = "Edit record"


mbEditFlag = True
SetButtons False
Exit Sub

EditErr:
MsgBox Err.Description
End Sub
Private Sub cmdCancel_Click()
On Error Resume Next

SetButtons True
mbEditFlag = False
mbAddNewFlag = False
adoPrimaryRS.CancelUpdate
If mvBookMark > 0 Then

SMK TELKOM SANDHY PUTRA MALANG Page 34


adoPrimaryRS.Bookmark = mvBookMark
Else
adoPrimaryRS.MoveFirst
End If
mbDataChanged = False

End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

adoPrimaryRS.UpdateBatch adAffectAll

If mbAddNewFlag Then
adoPrimaryRS.MoveLast 'move to the new record
End If

mbEditFlag = False
mbAddNewFlag = False
SetButtons True
mbDataChanged = False

Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

Private Sub cmdFirst_Click()


On Error GoTo GoFirstError

adoPrimaryRS.MoveFirst
mbDataChanged = False

Exit Sub

GoFirstError:
MsgBox Err.Description
End Sub

Private Sub cmdLast_Click()


On Error GoTo GoLastError

adoPrimaryRS.MoveLast
mbDataChanged = False

Exit Sub

GoLastError:
MsgBox Err.Description
End Sub

Private Sub cmdNext_Click()


On Error GoTo GoNextError

If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext


If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then

SMK TELKOM SANDHY PUTRA MALANG Page 35


Beep
'moved off the end so go back
adoPrimaryRS.MoveLast
End If
'show the current record
mbDataChanged = False

Exit Sub
GoNextError:
MsgBox Err.Description
End Sub

Private Sub cmdPrevious_Click()


On Error GoTo GoPrevError

If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious


If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
Beep
'moved off the end so go back
adoPrimaryRS.MoveFirst
End If
'show the current record
mbDataChanged = False

Exit Sub

GoPrevError:
MsgBox Err.Description
End Sub

Private Sub SetButtons(bVal As Boolean)


cmdAdd.Visible = bVal
cmdEdit.Visible = bVal
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal
cmdDelete.Visible = bVal
cmdClose.Visible = bVal
cmdRefresh.Visible = bVal
cmdNext.Enabled = bVal
cmdFirst.Enabled = bVal
cmdLast.Enabled = bVal
cmdPrevious.Enabled = bVal
End Sub

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.

*Update:untuk menetapkan data yang telah di inputkan


*Cancel:membatalkan proses penambahan data
EDIT : untuk merubah data

SMK TELKOM SANDHY PUTRA MALANG Page 36


*Update:untuk menetapkan data yang telah di ubah
*Cancel:membatalkan proses perubahan data
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

XI. FORM LAYOUT MASTER/DETAIL


DENGAN BINDING TYPE CLASS

Coding :
Private WithEvents PrimaryCLS As clsOrders
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean

Private Sub Form_Load()


Set PrimaryCLS = New clsOrders

Dim oText As TextBox


'Bind the text boxes to the data provider
For Each oText In Me.txtFields
oText.DataMember = "Primary"
Set oText.DataSource = PrimaryCLS
Next
grdDataGrid.DataMember = "Secondary"
Set grdDataGrid.DataSource = PrimaryCLS
End Sub

Private Sub Form_Resize()


On Error Resume Next
'This will resize the grid when the form is resized
grdDataGrid.Width = Me.ScaleWidth
grdDataGrid.Height = Me.ScaleHeight - grdDataGrid.Top - 30 - picButtons.Height - picStatBox.Height
lblStatus.Width = Me.Width - 1500
cmdNext.Left = lblStatus.Width + 700
cmdLast.Left = cmdNext.Left + 340
End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 37


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If mbEditFlag Or mbAddNewFlag Then Exit Sub

Select Case KeyCode


Case vbKeyEscape
cmdClose_Click
Case vbKeyEnd
cmdLast_Click
Case vbKeyHome
cmdFirst_Click
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
cmdLast_Click
Else
cmdNext_Click
End If
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)


Screen.MousePointer = vbDefault
End Sub

Private Sub PrimaryCLS_MoveComplete()


'This will display the current record position for this recordset
lblStatus.Caption = "Record: " & CStr(PrimaryCLS.AbsolutePosition)
End Sub

Private Sub cmdAdd_Click()


On Error GoTo AddErr
PrimaryCLS.AddNew
lblStatus.Caption = "Add record"
mbAddNewFlag = True
SetButtons False

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()


On Error GoTo DeleteErr
PrimaryCLS.Delete
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()


'This is only needed for multi user apps
On Error GoTo RefreshErr
PrimaryCLS.Requery
Exit Sub

SMK TELKOM SANDHY PUTRA MALANG Page 38


RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdEdit_Click()


On Error GoTo EditErr

lblStatus.Caption = "Edit record"


mbEditFlag = True
SetButtons False
Exit Sub

EditErr:
MsgBox Err.Description
End Sub
Private Sub cmdCancel_Click()
On Error Resume Next

PrimaryCLS.Cancel
SetButtons True
End Sub

Private Sub cmdUpdate_Click()


On Error GoTo UpdateErr

PrimaryCLS.Update
SetButtons True
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()


Unload Me
End Sub

Private Sub cmdFirst_Click()


On Error GoTo GoFirstError

PrimaryCLS.MoveFirst
mbDataChanged = False

Exit Sub

GoFirstError:
MsgBox Err.Description
End Sub

Private Sub cmdLast_Click()


On Error GoTo GoLastError

PrimaryCLS.MoveLast
mbDataChanged = False

Exit Sub

GoLastError:
MsgBox Err.Description
End Sub

SMK TELKOM SANDHY PUTRA MALANG Page 39


Private Sub cmdNext_Click()
On Error GoTo GoNextError

PrimaryCLS.MoveNext
Exit Sub
GoNextError:
MsgBox Err.Description
End Sub

Private Sub cmdPrevious_Click()


On Error GoTo GoPrevError

PrimaryCLS.MovePrevious
Exit Sub

GoPrevError:
MsgBox Err.Description
End Sub

Private Sub SetButtons(bVal As Boolean)


cmdAdd.Visible = bVal
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal
cmdDelete.Visible = bVal
cmdClose.Visible = bVal
cmdRefresh.Visible = bVal
cmdNext.Enabled = bVal
cmdFirst.Enabled = bVal
cmdLast.Enabled = bVal
cmdPrevious.Enabled = bVal
End Sub

Penjelasan :
Pada Form Layout Master/Detail dengan Binding Type Class, terdapat class module.

FUNGSI MASING-MASING TOMBOL :


ADD : Tombol add untuk menambah suatu record pada suatu data.
Sehingga akan tertampil form dengan record kosong seperti ini.

UPDATE : untuk merubah isi data pada data master


tidak bisa digunakan pada data detail
DELETE : Tombol delete untuk menghapus suatu record pada suatu data
REFRESH : Tombol refresh untuk mengembaikan ke record 1
CLOSE : Tombol Close untuk menutup dialog box/mengakhiri running program

SMK TELKOM SANDHY PUTRA MALANG Page 40

You might also like