Sub er_DS_Update(Frm As Form, ds As Data, nNoRepos As Integer, bUpdateFailed As Integer)
Dim bNew As Integer
Dim bUpdating As Integer
On Error GoTo DS_Update_Handler
bUpdateFailed = False 'MAR
If er_CurrRowExists(ds) = False Then
bNew = True
End If
' If er_CurrRowExists(ds) Or ds.EditMode = DATA_EDITADD Then 'MAR
If ds.EditMode <> DATA_EDITNONE Then
nNoRepos = nNoRepos + 1
bUpdating = True
ds.Recordset.Update
bUpdating = False
nNoRepos = nNoRepos - 1
If bNew And Not bUpdateFailed And ds.Recordset.RecordCount Then
ds.Recordset.MoveLast
bNew = False
End If
End If
Exit Sub
DS_Update_Handler:
Select Case Err
Case 3020 ' Error: Update without Add New or Edit
Resume Next
Case 3021 ' Error: No current record
Resume Next
Case Else
er_DisplayError (Err)
If bUpdating Then bUpdateFailed = True 'MAR
Resume Next
End Select
End Sub
Sub er_ffDeleteRow(ds As Data)
Dim bLastRecord As Variant
If ds.Recordset.RecordCount = 0 Then Exit Sub
On Error GoTo ErrorHandler
bLastRecord = False
If ds.Recordset.AbsolutePosition = (ds.Recordset.RecordCount - 1) Then
bLastRecord = True
End If
ds.Recordset.Delete
If Not er_CurrRowExists(ds) Then
MoveFromCurrRow ds, bLastRecord
End If
If ds.Recordset.RecordCount = 0 Then
'ds.Recordset.AddNew 'MAR replaced by next line
ds.Refresh
End If
er_ffDeleteRow_Done:
Exit Sub
ErrorHandler:
Select Case Err
'Case 3197 ' Error: Data has changed, operation stopped
' ds.Recordset.Update
' Resume Next
Case 3021 ' Error: No current record
Resume Next
Case 444 ' Method not applicable in this context
Resume Next
Case Else
er_DisplayError (Err)
Resume er_ffDeleteRow_Done
End Select
End Sub
Function er_FieldIsNumeric(fld As Field) As Integer
Select Case fld.Type
Case DB_BOOLEAN
er_FieldIsNumeric = True
Case DB_BYTE
er_FieldIsNumeric = True
Case DB_INTEGER
er_FieldIsNumeric = True
Case DB_LONG
er_FieldIsNumeric = True
Case DB_CURRENCY
er_FieldIsNumeric = True
Case DB_SINGLE
er_FieldIsNumeric = True
Case DB_DOUBLE
er_FieldIsNumeric = True
Case Else
er_FieldIsNumeric = False
End Select
End Function
Function er_FieldIsString(fld As Field) As Integer
Select Case fld.Type
Case DB_TEXT
er_FieldIsString = True
Case DB_LONGBINARY
er_FieldIsString = True
Case DB_MEMO
er_FieldIsString = True
Case Else
er_FieldIsString = False
End Select
End Function
Function er_NullValue(fld As Field) As Variant
Select Case fld.Type
Case DB_BOOLEAN
er_NullValue = 0
Case DB_BYTE
er_NullValue = 0
Case DB_INTEGER
er_NullValue = 0
Case DB_LONG
er_NullValue = 0
Case DB_CURRENCY
er_NullValue = 0
Case DB_SINGLE
er_NullValue = 0
Case DB_DOUBLE
er_NullValue = 0
Case DB_DATE
er_NullValue = ""
Case DB_TEXT
er_NullValue = ""
Case DB_LONGBINARY
er_NullValue = ""
Case DB_MEMO
er_NullValue = ""
End Select
End Function
Function er_ObjectSet(ds As Data) As Integer
Dim iMode As Integer
On Error GoTo ObjectSet_Handler
er_ObjectSet = True
' Try to cause an error by accessing the data control
If ds.EditMode = DATA_EDITADD Then iMode = 0 'no op
Exit Function
ObjectSet_Handler:
Select Case Err
Case 91
er_ObjectSet = False
Resume Next
Case Else
er_DisplayError (Err)
Resume Next
End Select
End Function
Function er_PreValidate(ds As Data, Action As Integer, Save As Integer) As Integer
er_PreValidate = False
Select Case Action
' Case DATA_ACTIONMOVEFIRST To DATA_ACTIONMOVELAST, DATA_ACTIONDELETE 'MAR changed
Case DATA_ACTIONMOVEFIRST To DATA_ACTIONMOVELAST
If ds.Recordset.RecordCount = 0 And Save = False Then
'Action = DATA_ACTIONCANCEL 'MAR removed
Save = False
er_PreValidate = True
End If
Case DATA_ACTIONDELETE
If ds.Recordset.RecordCount = 0 And Save = False Then
Action = DATA_ACTIONCANCEL
Save = False
er_PreValidate = True
End If
Case DATA_ACTIONUPDATE
If Save = False Then
Action = DATA_ACTIONCANCEL
er_PreValidate = True
End If
Case DATA_ACTIONBOOKMARK
er_PreValidate = True
End Select
Exit Function
PreVal_Handler:
Select Case Err
Case 3021 ' Error: No current record
Beep
Resume Next
Case Else
er_DisplayError (Err)
Resume Next
End Select
End Function
Sub er_SetEditMode(ds As Data)
On Error GoTo SetEditMode_Handler
If er_CurrRowExists(ds) And ds.EditMode = DATA_EDITNONE Then
ds.Recordset.Edit
End If
Exit Sub
SetEditMode_Handler:
Select Case Err
'Case 3197 ' Error: Data has changed, operation stopped
' Resume Next
Case Else
er_DisplayError (Err)
Resume Next
End Select
End Sub
Sub er_SetFieldToNull(fld As Field)
Select Case fld.Type
Case DB_BOOLEAN
fld = 0
Case DB_BYTE
fld = 0
Case DB_INTEGER
fld = 0
Case DB_LONG
fld = 0
Case DB_CURRENCY
fld = 0
Case DB_SINGLE
fld = 0
Case DB_DOUBLE
fld = 0
Case DB_DATE
fld = Date
Case DB_TEXT
fld = ""
Case DB_LONGBINARY
fld = ""
Case DB_MEMO
fld = ""
End Select
End Sub
Function er_SQLValue(ds As Data, sFldName As String)
Dim bQuotes As Integer
Dim sValue As String
Dim vValue As Variant
Select Case ds.Recordset(sFldName).Type
Case DB_TEXT
bQuotes = True
Case DB_MEMO
bQuotes = True
Case Else
bQuotes = False
End Select
If IsNull(ds.Recordset(sFldName)) Then
vValue = er_NullValue(ds.Recordset(sFldName))
sValue = vValue
Else
sValue = LTrim(RTrim(ds.Recordset(sFldName)))
End If
If bQuotes Then
sValue = "'" & sValue & "'"
End If
er_SQLValue = sValue
End Function
Function erwAddDisplayFieldTranslation(ctlData As Data, strFieldName As String, varValue As Variant, udtTranslateList() As TranslateItem, nListCount As Integer)
Function erwSetNewListField(ListCtrl As Control, DataCtrl As Data, FieldName As String, ListItems() As ListItem, bValidate As Integer, bNoClick As Integer)
Dim i As Integer
Dim ListIndex As Integer
Dim GStrIndex As Long
Dim FieldValue As String
Dim bRetVal
bRetVal = True
Err = 0
On Error Resume Next
ListIndex = ListCtrl.ListIndex
'If no list selection, see if typed in text is on list and select it if so