Application Problem
Mar 19, 2008I have been asked to make changes to an app that is WAY more complicated than anything I've ever done. The changes themselves are no problem (add 3 new fields to each of two tables and modify 2 forms and a report). The problem is after I make the changes the app doesn't work. The database (even stripped of all but 10 records) is too big to upload here. (2.5M)
I need to add 2 text fields (Route and Region) each 10 chars. and a yes/no field (Early Delivery) to the Order Head table and the Location table. I need to add those three fields to the Order Head and Location forms and get the info to copy over from the Location table if they select a reception location from the drop down on the Order Head form.
I have at least two possible problems. The first is as soon as I add the fields to the table and the Order Head form the form doesn't open in Data Entry mode. If I change the Data Entry property on the form to Yes, it works (although I think from looking at the code that it should have been set automatically when the New Order button was clicked on the switchboard). The second problem is that once I change the Data Entry property to Yes I can't add records to the subforms (the message is that a record must be added to Order Head first).
So....something I'm doing appears to be circumventing the code that commits the record.
I'd really appreciate any help.
OrderHead Code (I cut a lot out so the message wasn't too big)
Option Compare Database ' Use database order for string comparisons.
Option Explicit ' Requires variables to be declared before they are used.
Private Sub cmdAdd_Click()
On Error GoTo Err_cmdAdd_Click
Me.cmdAdditionalPayment.Visible = False
DoCmd.GoToRecord , , acNewRec
Me.frmBridalConsultant.SetFocus
Exit_cmdAdd_Click:
Exit Sub
Err_cmdAdd_Click:
MsgBox Err.Description
Resume Exit_cmdAdd_Click
End Sub
Private Sub cmdDelete_Click()
On Error GoTo Err_cmdDelete_Click
Dim myVar As Variant
Me.cmdAdditionalPayment.Visible = False
If IsNull(Me.frmRecordStatus) _
Or IsEmpty(Me.frmRecordStatus) _
Or Me.frmRecordStatus = " " Then
myVar = OrdersCleanUp(Me.frmOrder)
Me.frmRecordStatus = "P"
Me.dspRecordStatus = "DELETED"
Me.dspRecordStatus.Visible = True
'Me.cmdDelete.Visible = False
'Me.cmdUndelete.Visible = True
Me.Refresh
Form.Repaint
MsgBox ("Order flagged as deleted . . .")
Else
If Me.frmRecordStatus = "P" _
Or Me.frmRecordStatus = "D" Then
MsgBox "Order is already flagged as deleted"
Else
End If
End If
Exit_cmdDelete_Click:
Exit Sub
Err_cmdDelete_Click:
MsgBox Err.Description
Resume Exit_cmdDelete_Click
End Sub
Private Sub cmdSave_Click()
On Error GoTo Err_cmdSave_Click
If IsNull(Me.frmReceptionDate) _
Or IsEmpty(Me.frmReceptionDate) _
Or Me.frmReceptionDate = " " Then
Else
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Me.Refresh
MsgBox ("Order saved . . .")
End If
Exit_cmdSave_Click:
Exit Sub
Err_cmdSave_Click:
MsgBox Err.Description
Resume Exit_cmdSave_Click
End Sub
Private Sub Form_Activate()
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Activate" _
& vbCr & vbLf & "Order=" & Me![frmOrder]
Else
End If
If IsNull(Me![frmOrder]) Then
intOrder = 0
Else
intOrder = Me![frmOrder]
End If
If blnPackage Then
If Me.cmdAdditionalPayment.Visible = True Then
Me![frmTotalAdditionalPayments] = rtnTotalAdditionalPayments(intOrder)
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalAdditionalPayments]
Me.cmdMoney.Visible = True
Else
Me![frmTotalPayments] = rtnTotalPayments(intOrder)
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalPayments]
Me.cmdMoney.Visible = False
End If
Else
Me![frmTotalPayments] = rtnTotalPayments(intOrder)
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalPayments]
End If
Form.Repaint
End Sub
Private Sub Form_AfterInsert()
If IsNull(Me![frmReceptionGuests]) Then
intGuests = 0
Else
intGuests = Me![frmReceptionGuests]
End If
blnCoveringCharge = False
If IsNull(Me![frmLayers]) Then
intLayers = 0
Else
intLayers = Me![frmLayers]
End If
If IsNull(Me![frmTierSets]) _
Or Me![frmTierSets] < 1 Then
blnRaised = False
Else
blnRaised = True
End If
intLayer = 1
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_AfterInsert" _
& vbCr & vbLf & "Order=" & Me![frmOrder] _
& vbCr & vbLf & "Guests=" & Me![frmReceptionGuests] _
& vbCr & vbLf & "intLayers=" & intLayers _
& vbCr & vbLf & "blnRaised=" & blnRaised _
& vbCr & vbLf & "intLayer=" & intLayer
Else
End If
End Sub
Private Sub Form_BeforeInsert(Cancel As Integer)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_BeforeInsert" _
& vbCr & vbLf & "Order=" & Me![Order]
Else
End If
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_BeforeUpdate"
Else
End If
End Sub
Private Sub Form_CommandExecute(ByVal Command As Variant)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_CommandExecute"
Else
End If
End Sub
Private Sub Form_Current()
' MsgBox Me.Name & "Form_Current Order=" & Me.frmOrder
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Current" _
& vbCr & vbLf & "Order=" & Me![Order] _
& vbCr & vbLf & "NewRecord=" & Me.NewRecord _
& vbCr & vbLf & "DataEntry=" & Me.DataEntry _
& vbCr & vbLf & "AllowAdditions=" & Me.AllowAdditions
Else
End If
If Form.DataEntry Then ' New Order
Me![dspMode] = "New Order"
'Me.dspFilter.Visible = False
Me.cmdAdd.Visible = True
Me.cmdDelete.Visible = True
Me.cmdUndelete.Visible = False
Me.cmdFilter.Visible = False
Me.cmdMoney.Visible = False
Me.cmdAdditionalPayment.Visible = False
Else ' Order Inquiry
Me![dspMode] = "Order Inquiry/Edit"
Me.AllowAdditions = False
Me.cmdAdd.Visible = False
'Me![dspFilter] = Me.Filter
'Me.dspFilter.Visible = True
Me.cmdFilter.Visible = True
If IsNull(Me.frmRecordStatus) _
Or IsEmpty(Me.frmRecordStatus) _
Or Me.frmRecordStatus = " " Then
Me.cmdDelete.Visible = True
Me.cmdUndelete.Visible = False
Me.dspRecordStatus = " "
Me.dspRecordStatus.Visible = False
Else
Me.cmdDelete.Visible = False
Me.cmdUndelete.Visible = True
Me.dspRecordStatus = "DELETED"
Me.dspRecordStatus.Visible = True
End If
End If
Me![frmHotelPackage] = Me![dspHotelPackage]
If IsNull(Me![frmHotelPackage]) Then
Me.cmdMoney.Visible = False
Me.cmdAdditionalPayment.Visible = False
Else
Me.cmdMoney.Caption = "Show Upgrades"
Me.cmdMoney.Visible = True
End If
Me![frmReceptionLocation] = Me![dspReceptionLocation]
Me![frmCakeType] = Me![dspCakeType]
If IsNull(Me![frmReceptionGuests]) Then
intGuests = 0
Else
intGuests = Me![frmReceptionGuests]
End If
Me![dspTotalCharges] = Me![frmCakePrice] _
+ Me![frmCoveringCharge] _
+ Me![frmFlowersCharge] _
+ Me![frmTieringCharge] _
+ Me![frmFlatCharge] _
+ Me![frmDeliveryCharge]
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalPayments]
If Me![frmCoveringCharge] > 0 Then
blnCoveringCharge = True
Else
blnCoveringCharge = False
End If
If IsNull(Me.TierSets) Or Me.TierSets < 1 Then
blnRaised = False
Else
blnRaised = True
End If
'MsgBox "Trap 3 blnRaised=" & blnRaised, vbInformation
intLayer = 0
End Sub
Private Sub Form_DataChange(ByVal Reason As Long)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_DataChange" _
& vbCr & vbLf & "Reason=" & Reason
Else
End If
End Sub
Private Sub Form_Deactivate()
If gTrace Then
'gSequence = gSequence + 1
'MsgBox Me.Name & " " & gSequence & " Form_Deactivate"
Else
End If
End Sub
Private Sub Form_Delete(Cancel As Integer)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Delete"
Else
End If
End Sub
Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Filter" _
& vbCr & vbLf & "FilterType=" & FilterType
Else
End If
End Sub
Private Sub Form_GotFocus()
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_GotFocus"
Else
End If
End Sub
Private Sub Form_Load()
If gStartup Then
Else
gTrace = True
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Load"
End If
End Sub
Private Sub Form_LostFocus()
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_LostFocus"
Else
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
Dim myFilter As String
Dim myBride As String, myCakeType As String, myPackage As String
' MsgBox Me.Name & "Form_Open Current Order=" & Me.frmOrder
If Form.DataEntry Then ' New Order
Else ' Order Inquiry
If gTrace Then
MsgBox ">>>Filter Values" _
& vbCr & vbLf & "Order=" & Forms![OrderFilter]![frmOrder] _
& vbCr & vbLf & "OrderDate=" & Forms![OrderFilter]![frmOrderDate] _
& vbCr & vbLf & "Bride=" & Forms![OrderFilter]![frmBridesLastName] _
& vbCr & vbLf & "Package=" & Forms![OrderFilter]![frmPackage] _
& vbCr & vbLf & "CakeType=" & Forms![OrderFilter]![frmCakeType] _
& vbCr & vbLf & "ReceptionDates=" & Forms![OrderFilter]![rptReceptionDateBegin] _
& "-" & Forms![OrderFilter]![rptReceptionDateEnd]
Else
End If
If Not IsNull(Forms![OrderFilter]![rptReceptionDateBegin]) Then
myFilter = "OrderHead.ReceptionDate >= #" _
& Forms!OrderFilter!rptReceptionDateBegin _
& "# And OrderHead.ReceptionDate <= #" _
& Forms!OrderFilter!rptReceptionDateEnd & "#"
Else
End If
If Not IsNull(Forms![OrderFilter]![frmOrder]) Then
If IsNumeric(Forms![OrderFilter]![frmOrder]) Then
'Me.Filter = "Order = " & Forms![OrderFilter]![frmOrder]
myFilter = "Order = " & Forms![OrderFilter]![frmOrder]
Else
'Me.Filter = "Order > 0"
myFilter = "Order > 0"
End If
Else
If IsNull(Forms![OrderFilter]![frmBridesLastName]) Then
myBride = "*"
Else
myBride = Forms![OrderFilter]![frmBridesLastName] & "*"
End If
If myFilter = "" Then
If myBride = "*" Then
myFilter = "(IsEmpty(BridesLastName) or IsNull(BridesLastName) or BridesLastName like '" & myBride & "')"
Else
myFilter = "BridesLastName like '" & myBride & "'"
End If
Else
If myBride = "*" Then
myFilter = myFilter & " and (IsEmpty(BridesLastName) or IsNull(BridesLastName) or BridesLastName like '" & myBride & "')"
Else
myFilter = myFilter & " and BridesLastName like '" & myBride & "'"
End If
End If
If IsNull(Forms![OrderFilter]![frmPackage]) Then
myPackage = "*"
Else
myPackage = Forms![OrderFilter]![frmPackage] & "*"
End If
If myFilter = "" Then
If myPackage = "*" Then
myFilter = "(IsEmpty(HotelPackage) or IsNull(HotelPackage) or HotelPackage like '" & myPackage & "')"
Else
myFilter = "HotelPackage like '" & myPackage & "'"
End If
Else
If myPackage = "*" Then
myFilter = myFilter & " and (IsEmpty(HotelPackage) or IsNull(HotelPackage) or HotelPackage like '" & myPackage & "')"
Else
myFilter = myFilter & " and HotelPackage like '" & myPackage & "'"
End If
End If
If IsNull(Forms![OrderFilter]![frmCakeType]) Then
myCakeType = "*"
Else
myCakeType = Forms![OrderFilter]![frmCakeType] & "*"
End If
If myFilter = "" Then
If myCakeType = "*" Then
myFilter = "(IsEmpty(CakeType) or IsNull(CakeType) or CakeType like '" & myCakeType & "')"
Else
myFilter = "CakeType like '" & myCakeType & "'"
End If
Else
If myCakeType = "*" Then
myFilter = myFilter & " and (IsEmpty(CakeType) or IsNull(CakeType) or CakeType like '" & myCakeType & "')"
Else
myFilter = myFilter & " and CakeType like '" & myCakeType & "'"
End If
End If
End If
Me.Filter = myFilter
Me.FilterOn = True
'Me![dspFilter] = Me.Filter
Me.OrderBy = "Order DESC"
Me.OrderByOn = True
Form.Repaint
End If
Exit_Form_Open:
Exit Sub
Err_Form_Open:
MsgBox Err.Description
Resume Exit_Form_Open
End Sub
Private Sub Form_Undo(Cancel As Integer)
If gTrace Then
gSequence = gSequence + 1
MsgBox Me.Name & " " & gSequence & " Form_Undo"
Else
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
If gTrace Then
'gSequence = gSequence + 1
'MsgBox Me.Name & " " & gSequence & " Form_Unload"
Else
End If
End Sub
Private Sub frmReceptionLocation_AfterUpdate()
Dim CurConn As New ADODB.Connection, objRSLocation As New ADODB.Recordset
Dim myReceptionLocation As String
'MsgBox Me.Name &" frmReceptionLocation_AfterUpdate", vbInformation
If IsNull(Me![frmReceptionLocation]) Then
myReceptionLocation = " "
Else
myReceptionLocation = Me![frmReceptionLocation]
End If
Me![dspReceptionLocation] = myReceptionLocation
CurConn.Open CurrentProject.Connection
objRSLocation.Open "Select * from [Location] where [Location] = '" & myReceptionLocation & "'", CurConn, adOpenKeyset, adLockOptimistic
If objRSLocation.RecordCount = 1 Then
Me![dspReceptionLocationID] = objRSLocation("LocationID")
Me![frmReceptionContact] = objRSLocation("Contact")
Me![frmReceptionContactTelephone] = objRSLocation("Telephone")
Me![frmReceptionStreetAddr1] = objRSLocation("StreetAddr1")
Me![frmReceptionStreetAddr2] = objRSLocation("StreetAddr2")
Me![frmReceptionTown] = objRSLocation("Town")
Me![frmReceptionState] = objRSLocation("State")
Me![frmReceptionZipcode] = objRSLocation("Zipcode")
Me![frmDeliveryContact] = objRSLocation("Contact")
Me![frmDeliveryContactTelephone] = objRSLocation("Telephone")
If blnPackage Then
Me![frmDeliveryCharge] = 0
Else
Me![frmDeliveryCharge] = objRSLocation("DeliveryCharge")
End If
Else
Me![frmReceptionContact] = " "
Me![frmReceptionContactTelephone] = " "
Me![frmReceptionStreetAddr1] = " "
Me![frmReceptionStreetAddr2] = " "
Me![frmReceptionTown] = " "
Me![frmReceptionState] = " "
Me![frmReceptionZipcode] = " "
Me![frmDeliveryContact] = " "
Me![frmDeliveryContactTelephone] = " "
Me![frmDeliveryCharge] = 0
End If
objRSLocation.Close
Set objRSLocation = Nothing
CurConn.Close
Set CurConn = Nothing
Me![dspTotalCharges] = Me![frmCakePrice] _
+ Me![frmCoveringCharge] _
+ Me![frmFlowersCharge] _
+ Me![frmTieringCharge] _
+ Me![frmFlatCharge] _
+ Me![frmDeliveryCharge]
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalPayments]
Form.Repaint
End Sub
Private Sub frmReceptionLocation_BeforeUpdate(Cancel As Integer)
Dim CurConn As New ADODB.Connection, objRSLocation As New ADODB.Recordset
Dim myReceptionLocation As String
'MsgBox Me.Name &" frmReceptionLocation_BeforeUpdate", vbInformation
If IsNull(Me![frmReceptionLocation]) Then
myReceptionLocation = " "
Else
myReceptionLocation = Me![frmReceptionLocation]
End If
Me![dspReceptionLocation] = myReceptionLocation
CurConn.Open CurrentProject.Connection
objRSLocation.Open "Select * from [Location] where [Location] = '" & myReceptionLocation & "'", CurConn, adOpenKeyset, adLockOptimistic
If objRSLocation.RecordCount = 1 Then
Me![dspReceptionLocationID] = objRSLocation("LocationID")
Me![frmReceptionContact] = objRSLocation("Contact")
Me![frmReceptionContactTelephone] = objRSLocation("Telephone")
Me![frmReceptionStreetAddr1] = objRSLocation("StreetAddr1")
Me![frmReceptionStreetAddr2] = objRSLocation("StreetAddr2")
Me![frmReceptionTown] = objRSLocation("Town")
Me![frmReceptionState] = objRSLocation("State")
Me![frmReceptionZipcode] = objRSLocation("Zipcode")
Me![frmDeliveryContact] = objRSLocation("Contact")
Me![frmDeliveryContactTelephone] = objRSLocation("Telephone")
If blnPackage Then
Me![frmDeliveryCharge] = 0
Else
Me![frmDeliveryCharge] = objRSLocation("DeliveryCharge")
End If
Else
Me![frmReceptionContact] = " "
Me![frmReceptionContactTelephone] = " "
Me![frmReceptionStreetAddr1] = " "
Me![frmReceptionStreetAddr2] = " "
Me![frmReceptionTown] = " "
Me![frmReceptionState] = " "
Me![frmReceptionZipcode] = " "
Me![frmDeliveryContact] = " "
Me![frmDeliveryContactTelephone] = " "
Me![frmDeliveryCharge] = 0
End If
objRSLocation.Close
Set objRSLocation = Nothing
CurConn.Close
Set CurConn = Nothing
Me![dspTotalCharges] = Me![frmCakePrice] _
+ Me![frmCoveringCharge] _
+ Me![frmFlowersCharge] _
+ Me![frmTieringCharge] _
+ Me![frmFlatCharge] _
+ Me![frmDeliveryCharge]
Me![dspBalanceDue] = Me![dspTotalCharges] - Me![frmTotalPayments]
Form.Repaint
End Sub
Private Sub frmStacked_AfterUpdate()
If IsNull(Me![frmTierSets]) _
Or Me![frmTierSets] < 1 Then
blnRaised = False
Else
blnRaised = True
End If
End Sub
Private Sub frmStacked_BeforeUpdate(Cancel As Integer)
If IsNull(Me![frmTierSets]) _
Or Me![frmTierSets] < 1 Then
blnRaised = False
Else
blnRaised = True
End If
End Sub
Private Sub cmdLocations_Click()
On Error GoTo Err_cmdLocations_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Location"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.Refresh
Exit_cmdLocations_Click:
Exit Sub
Err_cmdLocations_Click:
MsgBox Err.Description
Resume Exit_cmdLocations_Click
End Sub
Switchboard Code
ption Compare Database ' Use database order for string comparisons.
Option Explicit ' Requires variables to be declared before they are used.
Function OpenForms(strFormName As String) As Integer
' This function is used in the onClick event of command buttons that
' open forms on the Main Switchboard. Using a function is more efficient
' than repeating the same code in multiple event procedures.
On Error GoTo Err_OpenForms
' Open specified form.
DoCmd.OpenForm strFormName
Exit_OpenForms:
Exit Function
Err_OpenForms:
MsgBox Err.Description
Resume Exit_OpenForms
End Function
Private Sub cmdNewOrder_Click()
DoCmd.OpenForm "OrderHead", , , , acFormAdd
End Sub
Private Sub cmdOrderInquiry_Click()
DoCmd.OpenForm "OrderFilter"
End Sub
Private Sub cmdReports_Click()
DoCmd.OpenForm "ReportFilter"
End Sub
Sub DisplayDatabaseWindow_Click()
On Error GoTo Err_DisplayDatabaseWindow_Click
Dim strDocName As String
' Close Main Switchboard form.
DoCmd.Close
gStartup = False
gTrace = False
gSequence = 0
' Give focus to Database window.
strDocName = "OrderHead"
DoCmd.SelectObject acTable, strDocName, True
Exit_DisplayDatabaseWindow_Click:
Exit Sub
Err_DisplayDatabaseWindow_Click:
MsgBox Err.Description
Resume Exit_DisplayDatabaseWindow_Click
End Sub
Erika