Approach User Support homepage Approach User Support
Answers to Frequently Asked Questions about Lotus Approach
Examples LotusScripts
Example databases
Links to other Lotus Approach support services

[Return to contents]

Example LotusScript: Error trapping and data manipulation script

Last updated: before December, 1998

I wasn't aware of the

   %INCLUDE "C:\LOTUS\APPROACH\APRLSERR.LSS"

   ... detailed by Jerry Sikes (see article 'Example LotusScript: Handling Approach Object Errors') but the following script will trap the same error whilst also containing examples of SQL commands and references to databases that are both on and off the current view

Sub Click(Source As Button, X As Long, Y As Long, Flags As Long)
        Dim TRANID As String, NOTES As String
        Dim DDATE As Variant, CDATE As Variant, RDATE As Variant
        Dim AREF As Integer, ANUMBER As Integer, STDREF As Integer, NUMCURR As Integer
        If source.transacspanel.Action~ Reference.text="" Then 'ie there is no CURRENT record
                Messagebox "To enter a new action, just choose a STD Action Reference",65,"CCS Message"
                End
        Else 'this section sets all values that will be required throughout the script
                Currentwindow.redraw=False 'prevents the screen from re-drawing
                TRANID=source.transacspanel.Transaction~ Reference.text
                DDATE=source.transacspanel.Diary~ Date.text
                CDATE=Today()
                RDATE=source.transacspanel.Raised~ Date.text
                AREF=source.transacspanel.Action~ Reference.text
                ANUMBER=currentview.body.Account~ Number.text
                STDREF=source.transacspanel.STDAction.text
' This section is purely used to work out how many transactions (records in CURRENT.DBF) have the same action reference
' therefore whether to remove the note or not
                Dim con As New Connection
                Dim qry As New Query
                Dim rs As New ResultSet
                If (con.connectto ("dbase IV")<>False) Then
                        Set qry.connection = con
                        qry.tablename = "m:\group\ba\ccs\current.dbf"
                        Qry.SQL="SELECT * FROM"""& qry.tablename &"""Current WHERE (Current.""Action Reference"" = "& AREF & ")"
                        Set rs.query = qry
                        If ((rs.execute)<>False) Then
                                NUMCURR = (rs.numrows) 'number of records in current with the same action reference
                        End If
                End If
                con.disconnect
'End of section for counting transactions
'This section will delete the record from current
                If (con.connectto ("dbase IV")<>False) Then
                        Set qry.connection = con
                        qry.tablename = "m:\group\ba\ccs\current.dbf"
                        Qry.SQL="SELECT * FROM"""& qry.tablename &"""Current WHERE (Current.""Unique Transaction Reference"" = '" & TRANID & "')" 'Note the syntax for TE
                        Set rs.query = qry
                        If ((rs.execute)<>False) Then
                                rs.deleterow
                                rs.updaterow
                        End If
                        con.disconnect
                        Dim newdata(1 To 7) As Variant
                        newdata(1)=AREF
                        newdata(2)=ANUMBER
                        newdata(3)=TRANID
                        newdata(4)=DDATE
                        newdata(5)=RDATE
                        newdata(6)=CDATE
                        newdata(7)=STDREF
'And now to add a new record in actions
                        If (con.connectto ("dbase IV")<>False) Then
                                Set qry.connection = con
                                qry.tablename="m:\group\ba\ccs\actions.dbf"
                                Set rs.query = qry
                                If ((rs.execute)<>False) Then
                                        rs.addrow
                                        For i=1 To Ubound(newdata) 'Used to enter value in each
                                                                FIELD NewVAlue=rs.setvalue(i,newdata(i))
                                        Next
                                        rs.updaterow
                                End If
                        End If
                        con.disconnect
                End If
'This section creates a new record in the NOTES database and removes
from currnote if required
                If (con.connectto ("dbase IV")<>False) Then
                        Set qry.connection = con
                        qry.tablename = "m:\group\ba\ccs\currnote.dbf"
                        Qry.SQL="SELECT * FROM"""& qry.tablename &"""currnote WHERE (currnote.""Action Reference"" =" & AREF &")"
                        Set rs.query = qry
                        On Error Goto Skip 'An error will occur when there are no notes against a transaction
                        If ((rs.execute)<>False) Then
                                NOTES=rs.getvalue(rs.fieldid("Notes"))
                                RDATE=rs.getvalue(rs.fieldid("Date")) ' DDATE is Date of the NOTE
                                If NUMCURR = 1Then
                                        rs.deleterow
                                        rs.updaterow
                                Else
                                End If
                        End If
                        con.disconnect
                        Dim newdata2(1 To 5) As Variant
                        newdata2(1)=ANUMBER
                        newdata2(2)=TRANID
                        newdata2(3)=RDATE
                        newdata2(4)=NOTES
                        newdata2(5)=AREF
                        If (con.connectto ("dbase IV")<>False) Then
                                Set qry.connection = con
                                qry.tablename="m:\group\ba\ccs\notes.dbf"
                                Set rs.query = qry
                                If ((rs.execute)<>False) Then
                                        rs.addrow
                                        For i=1 To Ubound(newdata2)
                                                                NewVAlue=rs.setvalue(i,newdata2(i))
                                        Next
                                        rs.updaterow
                                End If
                        End If
                        con.disconnect
                End If
        End If
Skip : 'If there are no notes the script will continue from here
        'This little section is purely to make the screen update and NOT
SHOW deleted records !
        currentwindow.redraw=True
        CurrentApplication.ApplicationWindow.DoMenuCommand(IDM_REFRESH)
        End 'I needed this to prevent a "No Resume" error when there were no
NOTES
End Sub

I have a large application, the main screen is based on the ACCOUNTS
database and contains 2 panels : TRANSACATIONS and CURRNOTES.
Against each transaction, the user can enter ACTIONS which can be
repeated for more than one transaction. Notes can be entered which
refer to a particular action OR transaction.

When a new action is required, the current action is transfered to
ACTNSOLD alongwith any CURRNOTES being transferred into NOTES so that
a history is maintained.

---------------------------------------------------------------------
(c) 1997 Ian Curry - Jist, All rights reserved, permission is granted
for this document to be distributed in electronic form (such as
email, newsgroups, and the WWW) as long as it is posted in its
entirety including this copyright statement, and is not distributed
for financial gain.

[Return to contents]

© Copyright, JohnBrown, Trademarks, Disclaimer, Acknowledgements.