Vous êtes sur la page 1sur 10

Bases de Datos En Visual

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


' Add support for PageUp, PageDown, ' Ctrl+PageUp, Ctrl+PageDown, ' Ctrl+Home, Ctrl+End

Select Case KeyCode


Case vbKeyPageDown
If Shift = vbCtrlMask Then
Call cmdLast_Click
Else
If cmdNext.Enabled Then
Call cmdNext_Click
End If
End If
Case vbKeyPageUp
If Shift = vbCtrlMask Then
Call cmdFirst_Click
Else
If cmdPrevious.Enabled Then
Call cmdPrevious_Click
End If
End If
Case vbKeyHome
If Shift = vbCtrlMask Then
Call cmdFirst_Click
End If
KeyCode = 0
Case vbKeyEnd
If Shift = vbCtrlMask Then
Call cmdLast_Click
End If
' "Eat" the keystroke.
KeyCode = 0
End Select
End Sub

Private Sub Form_Load()


On Error GoTo ErrorHandler
Set customer = New CustomerHandler
' Abre la conexion co la base de datos y los registros y los inicializa
Set customerRecordset = customer.GetCustomers
If Not customerRecordset Is Nothing Then
Call InitForm

' Display the form.


Call ShowData
Else
MsgBox "Unable to load the requested data."
Unload Me
End If

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError(Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub Form_Unload(Cancel As Integer)


Set customer = Nothing
End Sub

Private Sub ClearForm()


Dim ctl As Control

On Error GoTo ErrorHandler

currentDataState = DataState.Loading

For Each ctl In Me.Controls


If TypeOf ctl Is TextBox Then
ctl.Text = ""
ElseIf TypeOf ctl Is CheckBox Then
ctl.Value = vbChecked
ElseIf TypeOf ctl Is ComboBox Then
ctl.ListIndex = -1
' TODO:
' Add more control types, if necessary.
End If
Next ctl

If customerRecordset.RecordCount = 0 Then
currentDataState = DataState.NoRows
Else
currentDataState = DataState.Adding
End If

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError(Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub DeleteRow()


On Error GoTo ErrorHandler
If MsgBox( "Delete the current record?", vbYesNo + vbQuestion, Me.Caption) = vbYes Then
customerRecordset.Bookmark = customerRecordset.Bookmark
customerRecordset.Delete

If customerRecordset.RecordCount > 0 Then


customerRecordset.MoveNext
If customerRecordset.EOF Then
customerRecordset.MovePrevious
End If
End If
Call ShowData
End If

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError(Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Function SaveData() As Boolean


Dim currentBookmark As Variant
Dim isOK As Boolean
isOK = True

On Error Resume Next


currentBookmark = customerRecordset.Bookmark

On Error GoTo ErrorHandler


If currentDataState = DataState.Adding Then
customerRecordset.AddNew
End If

Call SaveFields
customerRecordset.Update

If currentDataState = DataState.Adding Then


' Display the newly added key.
Call GetID
End If

' Resetea los botones


currentDataState = DataState.Normal
Call HandleButtonState

ExitHere:
If Not isOK Then
' If something went wrong, then go back
' columna original.
If Not IsEmpty(currentBookmark) Then
customerRecordset.Bookmark = currentBookmark
End If
End If
SaveData = isOK
Exit Function

ErrorHandler:
isOK = False
Select Case Err.Number
Case Else
Call HandleUnexpectedError(Err.Number, Err.Description)
End Select
Call GotoFirstControl
Resume ExitHere
End Function

Private Sub HandleNavButtons()

' Handle the enabling/disabling of


' the navigation buttons.

' No point even considering errors that


' occur in here.
On Error Resume Next

Select Case currentDataState


Case DataState.Adding, DataState.Editing
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
Case Else
' Move to the previous row,
' and see if you're
' at the beginning of the recordset.
customerRecordset.MovePrevious
cmdFirst.Enabled = Not customerRecordset.BOF
cmdPrevious.Enabled = Not customerRecordset.BOF
customerRecordset.MoveNext

' Move to the next row,


' and see if you're at the end.
customerRecordset.MoveNext
cmdNext.Enabled = Not customerRecordset.EOF
cmdLast.Enabled = Not customerRecordset.EOF
customerRecordset.MovePrevious
End Select
End Sub

Private Sub FindRow()


Dim searchCriteria As String
Dim nameToFind As String
Dim currentBookmark As Variant

On Error GoTo ErrorHandler

nameToFind = InputBox( _
"Enter " & conFindField & " value to find:", _
Me.Caption)

If Len(nameToFind) > 0 Then


searchCriteria = conFindField & " LIKE " & _
AddQuotes(nameToFind & "%")
currentBookmark = customerRecordset.Bookmark

' buscar un record.


customerRecordset.MoveFirst
customerRecordset.Find searchCriteria

If customerRecordset.EOF Then
MsgBox "No match found!", vbOKOnly, Me.Caption

' Move back to the original row.


customerRecordset.Bookmark = currentBookmark
Else
Call ShowData
End If
End If

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub AddNewRow()


Call ClearForm
Call HandleButtonState
Call GotoFirstControl
End Sub

Private Sub HandleButtonState()


Select Case currentDataState
Case DataState.Adding, DataState.Editing
cmdSave.Enabled = True
cmdCancel.Enabled = True
cmdFind.Enabled = False
cmdNew.Enabled = False
cmdDelete.Enabled = False
cmdClose.Enabled = False
Case DataState.NoRows
cmdSave.Enabled = False
cmdCancel.Enabled = False
cmdFind.Enabled = False
cmdNew.Enabled = False
cmdDelete.Enabled = False
cmdClose.Enabled = True
Case Else
cmdSave.Enabled = False
cmdCancel.Enabled = False
cmdFind.Enabled = True
cmdNew.Enabled = True
cmdDelete.Enabled = True
cmdClose.Enabled = True
End Select
Call HandleNavButtons
End Sub

Private Sub InitForm()

On Error GoTo ErrorHandler

' Load the combo box with state values.


Call LoadStates

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub ShowData()


On Error GoTo ErrorHandler

currentDataState = DataState.Loading

If customerRecordset.RecordCount = 0 Then
Call AddNewRow
Else
txtData(0).Text = NullToText(customerRecordset("CustomerID"))
txtData(1).Text = NullToText(customerRecordset("FirstName"))
txtData(2).Text = NullToText(customerRecordset("LastName"))
txtData(3).Text = NullToText(customerRecordset("Address"))
txtData(4).Text = NullToText(customerRecordset("City"))
txtData(5).Text = NullToText(customerRecordset("ZipCode"))

Call FindString(cboState, _
NullToText(customerRecordset("State")))
chkActive.Value = FixBoolean(customerRecordset("Active"))

Call HandleButtonState
currentDataState = DataState.Normal
End If
Call GotoFirstControl

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub SaveFields()


On Error GoTo ErrorHandler

' The ADO/Jet provider will not allow


' empty strings in fields that don't
' explicitly allow empty strings (as
' opposed to Nulls). Convert empty
' text boxes back to Null, for storage
' in the table.

customerRecordset("FirstName") = TextToNull(txtData(1).Text)
customerRecordset("LastName") = TextToNull(txtData(2).Text)
customerRecordset("Address") = TextToNull(txtData(3).Text)
customerRecordset("City") = TextToNull(txtData(4).Text)
customerRecordset("ZipCode") = TextToNull(txtData(5).Text)

customerRecordset("State") = TextToNull(cboState.Text)
customerRecordset("Active") = CBool(chkActive.Value)

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub GetID()


' Get the newly added customer ID.
On Error GoTo ErrorHandler

txtData(0).Text = customerRecordset("CustomerID")

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub GotoFirstControl()


' Set the focus to the first control
' on your form. This procedure is
' separated out, because it requires
' knowledge of your particular form.
On Error Resume Next
txtData(1).SetFocus
End Sub

Private Sub LoadStates()


' Load cboStates from tblStates.
Dim states As ADODB.Recordset
Set states = customer.GetStates()

Do Until states.EOF
cboState.AddItem states("State")
states.MoveNext
Loop

ExitHere:
If Not states Is Nothing Then
states.Close
Set states = Nothing
End If
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub txtData_Change(Index As Integer)


' You typed into a text box.
' Check what to do at this point.
Call HandleChange
End Sub

Private Sub cboState_Click()


On Error GoTo ErrorHandler

' If there were no rows, now


' you're adding a new one.
' If you were in normal state,
' now you're editing.
' If you were editing, you still are.
' In any other state, you have no
' business being in here.
Select Case currentDataState
Case DataState.NoRows
currentDataState = DataState.Adding
Case DataState.Normal
currentDataState = DataState.Editing
Case DataState.Editing
' Do nothing.
Case Else
Exit Sub
End Select

' If you're editing, check to


' see if the combo box value
' has changed from what's stored
' in the data.
If currentDataState = DataState.Editing Then
' If there's no change, don't bother
' enabling buttons.
If cboState.Text = _
NullToText(customerRecordset("State")) Then
Exit Sub
End If
End If
Call HandleButtonState

ExitHere:
Exit Sub

ErrorHandler:
Select Case Err.Number
Case Else
Call HandleUnexpectedError( _
Err.Number, Err.Description)
End Select
Resume ExitHere
End Sub

Private Sub chkActive_Click()


Call HandleChange
End Sub

Private Sub HandleChange()


' Deal with changes to text
' boxes or check box.
' If there are no rows, now you're
' editing.
' If you're just viewing data,
' now you're editing.
' Otherwise, get out.
Select Case currentDataState
Case DataState.NoRows
currentDataState = DataState.Adding
Case DataState.Normal
currentDataState = DataState.Editing
Case Else
Exit Sub
End Select

' Set up the buttons.


Call HandleButtonState
End Sub

Vous aimerez peut-être aussi