Library and Tool Change List
(January - December 2004 releases)


        

Version released at this point: 6.30.0003

December 17, 2004

   1)   Entry Title: Access violations
      Area Affected: Ada
             Status: Complete

        Description: Sage users report that the last build is throwing access
                     violations.

         Correction: Found that a last minute change to try and improve
                     compatibility between StonyBrook and ObjectAda had broken
                     the StonyBrook code.  The error is not visible until at
                     run time when certain routines are called.  A parameter
                     type mismatch between the dll and the ada code causes the
                     access violation.


December 15, 2004

   1)   Entry Title: Field Checks - Found and corrected a Field Check bug
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Found that a form did not refresh correctly after doing a
                     PutField on one of the fields from inside of a Field
                     Check routine.

         Correction: Found that the dll code had one flag that was not set the
                     same way that the old Ada code used to be.  This caused
                     the form to not get repainted properly after an action
                     was taken inside of a Field Check routine.


   2)   Entry Title: Sage.PutFieldF - Found a rounding error
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: If a value such as 2.045 is used in PutFieldF to a field
                     that is a one decimal digit format the algorithm that
                     tries to round ends up doing a double rounding of the
                     value so that the final value in the field is 2.1.

         Correction: Corrected the algorithm to correctly truncate/round.


Version released at this point: 6.30.0002

December 10, 2004

   1)   Entry Title: Files.FilePosition - Changed to be a record structure
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: The Files.FilePosition should not be a 64 bit numeric
                     type since not all compilers will support that.

         Correction: Changed to a record structure with two double words
                     representing the two parts of the 64 bit integer.  Added
                     routines to the Files package to support all necessary
                     arithmetic operations on the type.  New routines such as
                     Files.ComparePositions, Files.AddToPosition and
                     Files.SetToValue should handle all the tasks that
                     previous were done with direct arithmetic operations in
                     the code.  This will make the type more portable between
                     compilers and yet still retain the 64 bits necessary to
                     work with file positions and sizes in Windows.


December 08, 2004

   1)   Entry Title: DisplayW - Added two routines that use the DefaultProc
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Need to add routines that use the DefaultProc instead of
                     making the user supply it.

         Correction: Added DisplayFormDefaultProc and
                     DisplayFormContinueDefaultProc routines that do not need
                     to have an action proc supplied.  They just use the
                     DefaultProc.


   2)   Entry Title: MultSage - Removed routines use type 'natural' that were
                     overloaded.
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Need to remove the routines that use the type 'natural'
                     that are overloaded.  This is causing problems in the
                     ObjectAda compiler.

         Correction: Removed the routines FindRecordI and ReadRecordI that
                     used the type 'natural' as an argument.  This caused
                     problems in the ObjectAda compiler.  Check all code under
                     our control and nothing used these routines so removed
                     them.


   3)   Entry Title: EditLib - Corrected the parameters on the routines
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Changed params slightly in the M2, Ada and Delphi
                     libraries to bring all of them into alignment.

         Correction: The affected routine was RecordEditH.


Version released at this point: 6.30.0001

December 06, 2004

   1)   Entry Title: SageST release number incremented
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Because of changing the entire Ada side over to be a dll
                     only interface (instead of some of it being native code)
                     the SageST designation has been incremented.

         Correction: The new release designation for SageST is now 6.3.0 (was
                     6.2.3).


December 01, 2004

   1)   Entry Title: Sage.DefineFormFieldEntryProc and Sage.DefineFormIntercept
                     moved to Display
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: The routines Sage.DefineFormFieldEntryProc and
                     Sage.DefineFormIntercept moved to the Display package.

         Correction: These routines fit better in the Display package since
                     they are only doing things affected by forms.


   2)   Entry Title: StringsX.MaskAccept - Added new routine
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Added a new routine to StringsX called MaskAccept.

         Correction: This routine takes a string and a mask.  The mask
                     contains special characters representing such things as
                     numbers, upper case, lower case, etc.  The routine
                     evaluates the string against the mask and returns a
                     boolean value representing if the string is acceptable
                     against the mask requirement.


November 30, 2004

   1)   Entry Title: TermX - New key processing routines added
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Added new routines to TermX to assist applications
                     process key and mouse strokes.

         Correction: Added WaitForAnyKey which will cause the SageTerm to wait
                     for any keystroke from the user.  Added
                     WaitForAndReturnKey which will wait for any key and then
                     return its value to the calling routine.  Added
                     CleanKeyboardBuffer which will throw away any pending
                     keystrokes from the user.  Added CleanMouseBuffer which
                     will throw away any pending mouse clicks from the user.
                     NOTE - These routines are intended for use with the
                     SageTerm, not with dialogs.  Also take note that these
                     are the correct and safe way of handling key presses in a
                     SageTerm.  I have quite often seen people looking for
                     keystrokes that only check for the first character and
                     not any of the two stroke key presses such as the F1 ..
                     F12 keys.


   2)   Entry Title: Files.DirQuery - Conversion to dll use requires param change
      Area Affected: Ada
             Status: Complete

        Description: Change to full dll use by Ada required some changes in
                     the parameters of the DirQuery routine.

         Correction: There were two changes required in this routine.  The
                     first change is that the State parameter and the callback
                     routine switch places.  The callback routine name
                     becomes the second parameter and the State variable
                     becomes the third parameter.  The second change is in the
                     callback routine.  The FileName parameter because of
                     being a string need to be split into an address-high
                     parameter pass.


   3)   Entry Title: Sage.AddressToString - Need this new routine for the
                     address-high callback routine parameters
      Area Affected: Ada, M2, Delphi
             Status: Complete

        Description: Because of the need to split the string params of any
                     callback routines (in Ada only) into an address and a
                     high a routine was needed to convert that back to a local
                     string for use in the callback routines.

         Correction: Added the routine Sage.AddressToString which converts the
                     value of a string parameter in a callback routine
                     represented as an address and a high value back to a
                     local string.  Also because some of the callback params
                     are 'in out' type a second routine called
                     Sage.StringToAddress was added to send string values back
                     from the callbacks to the dll.  NOTE - All local strings
                     that are going to be receiving the value MUST be
                     declared to be a size equivalent to (1 .. param_High + 1)
                     in size or the Sage.AddressToString routine will throw a
                     SageError of SageErrs.ArrayTooSmall.


   4)   Entry Title: All string params in callback routines in Ada split into
                     Address and High components.
      Area Affected: Ada
             Status: Complete

        Description: In order for the Ada side of SageST to make full use of
                     the dll, a new requirement is in effect that all string
                     parameters in callback routines cannot be of the base
                     type string.  They will be split into two components.  An
                     address value which represents the location of the first
                     character of the string and a High value which
                     represents the size of the string in a zero relative
                     system.  That means that all local strings which need to
                     receive this value MUST be declared to be 'High + 1' in
                     size.   i.e. in the callback for Files.DirQuery the
                     params are now FileName (an address) and FileName_High
                     (the high value, zero relative) and Continue.  So a local
                     string that needs to hold this value (that is
                     accomplished by calling Sage.AddressToString) will need
                     to be declared as MyFileName : string (1 .. FileName_High
                     + 1) := (others => Ascii.Nul);  in order to be the
                     correct length.

         Correction: Declare all local copies of the string value as (1 ..
                     Param_High + 1).


November 11, 2004

   1)   Entry Title: Sage.GetFieldI - Tightened checks and added error 18
      Area Affected: Ada
             Status: Complete

        Description: Found that if a variable of type natural (or
                     ModSys.S_Natural or any variation) is used in
                     Sage.GetFieldI but the field contains a negative value
                     SageST was not catching that.  Also apparently that is a
                     StonyBrook Ada bug because it assigns the value to the
                     variable (if you look at the natural variable in the
                     debugger it happily reports that the value is -999 or
                     whatever it was)

         Correction: Added changes to ensure that the field is within the
                     range of the receiving variable.  If it is not then
                     SageErrs.TypeConflict (18) is set.  This is a fatal error
                     so will cause a popup message before returning from the
                     GetField call.  The value returned will be 0.  NOTE -
                     This is strictly a data driven check so it will not
                     always pop the error until it happens to hit a negative
                     value in the field.


November 08, 2004

   1)   Entry Title: Sage/Display - Moved the DefineFormIntercept routine.
      Area Affected: M2, Delphi
             Status: Complete

        Description: Moved the DefineFormIntercept routine from the Sage
                     package to the Display package.

         Correction: This is preparation for the Ada side moving to the dll.


   2)   Entry Title: Files.DirQuery - Changed the order of the parameters to
                     match the dll.
      Area Affected: Ada
             Status: Complete

        Description: Changed the order of the parameters in the Files.DirQuery
                     routine to match the dll.

         Correction: Switched the params to match the dll.  This is
                     preparation for the Ada side moving to the dll.


   3)   Entry Title: Reports.WrDirect - Changed order of the parameters
      Area Affected: Ada
             Status: Complete

        Description: The order of the params in the WrDirect routine does not
                     match the order the dll is expecting.

         Correction: Switched the params to match the dll.  This is
                     preparation for the Ada side moving to the dll.


October 07, 2004

   1)   Entry Title: GDIPrint - Font is not correct when doing ASCIIToGdl
                     conversion in landscape mode
      Area Affected: Ada, M2
             Status: Complete

        Description: When using the ASCIIToGdl routine and sending a job that
                     is in landscape mode the output is using a font that
                     seems to be too large.

         Correction: Found that a calculation for the font size was not taking
                     into account the use of landscape mode.  Added code to
                     perform the correct calculation for that mode.


Version released at this point: 6.23.0013

October 04, 2004

   1)   Entry Title: STSecurity - Getting an access violation
      Area Affected: Ada, M2
             Status: Complete

        Description: Getting an access violation when using the Checks Off
                     version of SageST in this routine.  The error occurs in
                     the Policy editing routine.

         Correction: Found where an uninitialized pointer was being used.


September 30, 2004

   1)   Entry Title: Strings.Insert - Found that a request to insert a character
                     past the null causes problems
      Area Affected: Ada, M2
             Status: Complete

        Description: If a request to insert a character ends up being past the
                     first null character a range error is thrown.

         Correction: Added code to check that the insert request is not beyond
                     the first null (which makes it an invalid position).  If
                     detected the routine now simply returns with a success
                     value of false.


   2)   Entry Title: SageOpt - Getting a range error when processing data.
      Area Affected: Ada, M2
             Status: Complete

        Description: Getting a range error thrown when processing data.

         Correction: SageOpt.UnloadLine was processing a line looking for
                     delimiter characters when doing delimited format.  When
                     found it called Strings.Insert to do some manipulation.
                     Found that the UnloadLine routine did not properly stop
                     when it hit the first null character in the string but
                     instead kept looking.  This later caused an invalid
                     request for an insert to be sent to the Strings.Insert
                     routine.  Added a check to watch for the null character
                     and to stop processing the line at that point.


Version released at this point: 6.23.0012

September 29, 2004

   1)   Entry Title: STSecurity - Some minor corrections concerning messages
      Area Affected: Ada, M2
             Status: Complete

        Description: Some of the error messages are being displayed when it
                     appears that there really isn't an error.

         Correction: Corrected to put messages up and appropriate times.


Version released at this point: 6.23.0011

September 15, 2004

   1)   Entry Title: STSecurity - Found that Administrator lockout of an account
                     was not working
      Area Affected: Ada, M2
             Status: Complete

        Description: If an Administrator locks out an account it is being
                     overridden by the local account lockout time.

         Correction: Corrected the problem by adding an additional flag to
                     catch that the account is administratively locked out.


September 08, 2004

   1)   Entry Title: Rebuild - Would like to not stop when a relation file
                     doesn't not exist
      Area Affected: Rebuild
             Status: Complete

        Description: Would like to keep processing when a relation file does
                     not exist.  That is not really a problem, the relation
                     just does not contain data yet so the user should not
                     have to acknowledge that fact on every rebuild.

         Correction: Added a modification so that particular error is logged
                     but does not stop the process with a pop up message.


September 07, 2004

   1)   Entry Title: Thor - Getting an error 57 message when editting some DOS
                     forms
      Area Affected: Thor
             Status: Complete

        Description: Getting an error 57 message when EDITING some DOS forms.

         Correction: Found and corrected where a value that was too long was
                     being put into one of the internal Thor fields.


Version released at this point: 6.23.0010

August 30, 2004

   1)   Entry Title: Sage.ProcessRecords - Errors if relation files do not exist
                     and relation opened with modify equal false
      Area Affected: Ada, M2
             Status: Complete

        Description: If a relation's files do not exist, the relation is
                     opened with Modify equals false and then ProcessRecords
                     is run on that relation it will throw a handle not opened
                     error.

         Correction: Added code to detect this situation and return from
                     ProcessRecords correctly.  No records will be processed
                     since none exist.


August 26, 2004

   1)   Entry Title: Ctrl-B Color toggle disabled in all of SageST
      Area Affected: Ada, M2
             Status: Complete

        Description: If the Ctrl-B toggle is used when a form has been
                     dynamically changed then the form is reloaded and those
                     changes are lost.

         Correction: The Ctrl-B toggle to change between color and black and
                     white screens was introduced a long time back when
                     monochrome screens were around.  Changed the colors
                     sometimes made the forms more visible on those monochrome
                     screens.  Since those are now a thing of the past the
                     toggle has been disabled as a simple way to also fix the
                     dynamically changed screens problem.


August 03, 2004

   1)   Entry Title: Thor - Concat fields cannot have the fields changed while
                     doing modify
      Area Affected: Thor
             Status: Complete

        Description: Found that concat fields could not have the fields
                     changed while doing modify.

         Correction: Added code to allow the Concatenation button to be active
                     if 1) the field is being modified, not added and 2) it
                     was of type 0 when the modify operation started.  Also
                     added warning messages if you change the type to 0 that
                     you must also take the step of using the Concatenation
                     button or modify the field again to actually define which
                     fields will be used.  The same is true if you add a new
                     field of type 0 you will see the warning.


Version released at this point: 6.23.0009

July 22, 2004

   1)   Entry Title: STSecurity - Added success parameter
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a success parameter to know if the file was saved.

         Correction: Added the param to the appropriate routine.   Also
                     corrected a couple of logic errors.


Version released at this point: 6.23.0008

July 19, 2004

   1)   Entry Title: Thor - Field names when modified so that order is affected
                     causes descriptions to disappear
      Area Affected: Thor
             Status: Complete

        Description: If field names are modified so that the order of fields
                     is switched the description on one of the fields
                     disappears.

         Correction: Found a logic problem where the description was being
                     chopped from the field.  Corrected the logic to retain
                     the description also.


July 14, 2004

   1)   Entry Title: BinLib - Added a routine that takes a handle type
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine that takes a handle for the data instead
                     of a particular data type.  This way the callback routine
                     will be able to process data of any type.

         Correction: Added the new routine BinLib.BinaryLocateHandle which
                     takes as a parameter the address of something as a
                     handle.  This allows for any type of array to be used in
                     the routine instead of the currently defined data types.


   2)   Entry Title: CtrlEdit - Need routines to set an Upper Case or Lower Case
                     style for the control
      Area Affected: Ada, M2
             Status: Complete

        Description: Need routines to set the edit control's style to be an
                     Upper Case or Lower Case field.  This would cause the
                     data to appear that way as it is entered by the user.

         Correction: Added the new routines CtrlEdit.SetUpperCaseOnly and
                     CtrlEdit.SetLowerCaseOnly to allow the requested
                     functionality.


July 02, 2004

   1)   Entry Title: Configure - Special identifiers only accept seven
                     characters of identifier name
      Area Affected: Configure
             Status: Complete

        Description: If a special identifier name of the maximum length is
                     entered only the first seven characters of the name are
                     recognized, the eight character is ignored.

         Correction: An internal string needed to be one additional character
                     in length in order to contain an ending null character in
                     the string.


July 01, 2004

   1)   Entry Title: STSecurity - New routine added called UpdateSecureFile
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a way to at any time force the updating of the
                     security file.

         Correction: Added a new routine called STSecurity.UpdateSecureFile.


June 30, 2004

   1)   Entry Title: SDI - Needs option to print on cardstock
      Area Affected: SDI
             Status: Complete

        Description: Would like an option in SDI to print on cardstock size
                     media (8.5" x 7.5")

         Correction: Added cardstock size as an option when defining the
                     output media.


   2)   Entry Title: GDIW - Would like to sort on any field and also do reverse
                     sorting of data
      Area Affected: GDIW
             Status: Complete

        Description: There is a Next Field button to set the sort field but it
                     does not appear to work.  Also would like the ability to
                     click on the header of a column and have it become the
                     sort field.  Also if the sort field column is clicked a
                     second time would like to have it sort the data in
                     reverse order.

         Correction: Corrected the Next Field button so that it does make the
                     next field the sort field (with the exception of block
                     data fields).  Enabled a column header to be clicked
                     which makes that field become the sort field.   If the
                     sort field column header is clicked after that it acts as
                     a toggle to shift the sort Ascending/Descending.  If the
                     sort field is changed to another field the sort order
                     will default back to Ascending until changed.


   3)   Entry Title: Display.LastExitFunction returning incorrect value after
                     system has been closed.
      Area Affected: Ada, M2
             Status: Complete

        Description: The function Display.LastExitFunction still returns a
                     value even after CloseSystem has been called.  The value
                     should be reset to the default when the CloseSystem
                     happens.

         Correction: Added code to reset the value to 0 when the system is
                     closed.


June 29, 2004

   1)   Entry Title: Sage X Routines - Need to be consistent in use of X handle
      Area Affected: Ada, M2
             Status: Complete

        Description: The X routines of Sage (ReadRecordNX, GetFieldX) need to
                     consistently use the XHandle parameter.  Currently
                     sometimes it is returned as a function value and
                     sometimes its passed as a parameter.

         Correction: Modified so that all routines use the XHandle as a
                     parameter and are more like the original ReadRecord type
                     routines to use.


June 24, 2004

   1)   Entry Title: SageKey - Getting an array overrun error when using a
                     boolean field
      Area Affected: Ada, M2
             Status: Complete

        Description: Found that if a boolean field is used it causes an array
                     overrun error.

         Correction: Found and corrected code that did not handle the size of
                     the field correctly.


   2)   Entry Title: SageKey - Using a field of type Date causes the index to be
                     corrupted
      Area Affected: Ada, M2
             Status: Complete

        Description: If a field of type Date is used then the index cannot be
                     accessed later.

         Correction: Found a place where the use of a Date field causes
                     Sage.SageError to get set to error 44.  Later the error
                     was still set and would not let the position of the
                     current entry to be returned.  Simply resetting
                     Sage.SageError immediately after the point where it is
                     set solved the problem.


June 23, 2004

   1)   Entry Title: SDI - Repeat fields not correctly position in the output
      Area Affected: SDI
             Status: Complete

        Description: Found that if repeat fields are used then starting with
                     field #2 the rest of the data is shifted one character to
                     the left, covering the last character of field #1.

         Correction: Corrected a logic error when calculating the position in
                     the output line for repeat field data.


June 18, 2004

   1)   Entry Title: Field names using repeats can cause a 'Field not defined'
                     error
      Area Affected: Ada, MS
             Status: Complete

        Description: Found that in some cases when using a field name with the
                     repeat value the error 'Field not defined' can be
                     generated.  The combination that triggers this is when a
                     space is used between the end of the field name and the
                     field name is less than eight characters in length.  For
                     example "PMOS [1]" would trigger the error.

         Correction: Modified the internal routine that parses field names so
                     that it now correctly handles if a space is used in the
                     name.


Version released at this point: 6.23.0007

June 09, 2004

   1)   Entry Title: GDIView - Using SageTerm in combination with GDIView can
                     cause a lockup
      Area Affected: Ada, M2
             Status: Complete

        Description: Normally if a SageTerm is up and then GDIView is called
                     and then you exit the viewer using the Exit button
                     everything is fine.  However if you have allowed the
                     system menu to be on the viewer and they click the Close
                     button (upper right corner) then the viewer exists fine
                     but control is never returned to the SageTerm.  So the
                     SageTerm just appears as a dead window even though the
                     Viewer is gone.

         Correction: Added code to correctly handle the SysCommand message
                     coming from the button click.  The code was in place for
                     the Exit button but code for this button had not been put
                     into place.


   2)   Entry Title: STSecurity - An endless loop can be encountered while
                     modifying a users groups
      Area Affected: Ada, M2
             Status: Complete

        Description: While moving a users group assignments an endless loop
                     can be encountered.

         Correction: Found and corrected a logic problem resulting in an
                     endless loop.


   3)   Entry Title: GDIPrint - An error can be encountered trying to get the
                     default printer name
      Area Affected: Ada, M2
             Status: Complete

        Description: Found that an error can be encountered while trying to
                     get the default printer name.

         Correction: The structure of the GDIHandle type needed to be altered
                     so that the device error could be set in the handle even
                     without having the handle open.  This also required a
                     change to the NumPapersAvailable routine, changing it
                     from a function to a procedure.


Version released at this point: 6.23.0006

June 08, 2004

   1)   Entry Title: Thor - Copy of Forms can get a corrupted list of names
      Area Affected: Thor
             Status: Complete

        Description: Found that when doing Form copies the names and
                     information about the forms could end up getting
                     corrupted.

         Correction: Modified code that was not correctly reading the
                     information about the form from the file.  This was a
                     logic error exactly like one found recently that when
                     doing the relation copy that would present the same
                     corrupted list of names.


June 03, 2004

   1)   Entry Title: Sage.CopyField - Sometimes did not catch that field sizes
                     were different
      Area Affected: Ada, M2
             Status: Complete

        Description: Found that Sage.CopyField did not always catch when a
                     difference in the fields was going to cause the copy to
                     fail.  The particular example that caught the problem
                     copied a field of Integer length 6 to a field of Integer
                     length 5.  If the value was 100,000 or greater (used all
                     six digits) then when the copy completed the value in the
                     target field would be just the left five digits.

         Correction: Internally the routine used two different methods in
                     order to accomplish the copy on the various field types.
                     Found that it needed to detect the condition described
                     above and simply use the other method in that case.  When
                     that is done then a copy between the fields will succeed
                     up to the point where the value is too large for the
                     target field.  When that happens a SageError is generated
                     showing that the maximum range of the target field has
                     been exceeded.  The SageError is a Minor error and will
                     cause an error popup if allowed.


May 27, 2004

   1)   Entry Title: Thor - Getting array subscript error when cancel hit during
                     field modify
      Area Affected: Thor
             Status: Complete

        Description: Add a new relation.  Click on the new field entry.  Click
                     modify.  Click cancel to exit the modify process.  An
                     array subscript error will be thrown.

         Correction: Added a check that detects this condition and does not
                     access the array causing the error.


   2)   Entry Title: SageLib and MSageLib - Getting 113 errors when hitting
                     first and last records
      Area Affected: Ada, M2
             Status: Complete

        Description: Getting the 113 error when the first and last records are
                     hit while doing Next and Previous operations.

         Correction: Found that the internal code as doing .Next and .Previous
                     reads even when it did not have a record position
                     established.  In addition found that the Previous error
                     was caused in both SageLib and MSageLib operations.
                     However the Next error only happened in MSageLib.


Version released at this point: 6.23.0005

May 25, 2004

   1)   Entry Title: STSecurity - The package WinSecureLib was renamed to
                     STSecurity
      Area Affected: Ada, M2
             Status: Complete

        Description: The package currently called WinSecureLib may be needed
                     in X32 mode also.  Rename it to get rid of the Win
                     designation.

         Correction: The package was renamed to STSecurity.  The package has
                     also had a number of corrections and additional
                     capability added since it was first introduced.


May 24, 2004

   1)   Entry Title: RTF - Added capability to define Left Page, Right Page and
                     First Page style headers and footers.
      Area Affected: Ada, M2
             Status: Not Looked At

        Description: Need the capability to define Left Page, Right Page and
                     First Page style headers and footers.

         Correction: Added an enumerated type to describe what type of header
                     or footer is desired.  Added a parameter to the routines
                     DefineHeader, DefineFooter, SetHeaderTabs,
                     ClearHeaderTabs, SetFooterTabs and ClearFooterTabs.  With
                     this extra parameter the different types of headers and
                     footers are now available to use.


   2)   Entry Title: DiskLib - Need a routine to handle formatting floppies
                     under Win32
      Area Affected: Ada, M2
             Status: Complete

        Description: Would like a way of calling to have a floppy formatted.

         Correction: Added the routine DiskLib.FormatFloppyDrive which when
                     called will perform a format of a floppy if one is
                     inserted.  Note that this routine requires Windows 2000
                     or greater to run.


May 19, 2004

   1)   Entry Title: Strings.FormatNumberString - Returns bad value if all zeros
                     passed in
      Area Affected: Ada, M2
             Status: Complete

        Description: If a string of all zeros is passed in it returns an
                     incorrect value.

         Correction: Corrected to return a string containing a single zero.


May 18, 2004

   1)   Entry Title: FixLib - If not completed due to errors a file handle is
                     left open
      Area Affected: Ada, M2
             Status: Complete

        Description: Under certain conditions an error may be encountered in
                     the process that causes it to exit.  When that happens a
                     file handle is left open.

         Correction: Added code to close the file handle when that error
                     occurs.


   2)   Entry Title: Thor - DOS toolbar buttons now on by default
      Area Affected: Thor
             Status: Complete

        Description: Thor should default on the DOS toolbar buttons if there
                     are DOS objects in the schema.  Then once the user has
                     turned off the option it should stay off.

         Correction: Changed the default to turn on the DOS toolbar buttons if
                     DOS objects are present in the SRC.  However once once
                     turned off by the user the buttons are no longer visible
                     unless turned back on by the user.


May 13, 2004

   1)   Entry Title: Logger - If a path used with the dfl then the log file is
                     not found
      Area Affected: Logger
             Status: Complete

        Description: If a path is typed in with the dfl name then the log file
                     is not correctly located.

         Correction: Added code to detect this combination and to corrrectly
                     use the path to the dfl file to locate the log file.


   2)   Entry Title: Reports - Header of report sometimes shows part of first
                     data line
      Area Affected: M2
             Status: Complete

        Description: Found that in Modula-2 only if the first data line of a
                     report was longer than the header line then the part of
                     the first data line longer than the header was printed in
                     the header area following the header text.

         Correction: Added code to correctly print only the header text.


   3)   Entry Title: Sage.DeleteRelation - An entry is not being put into the
                     log file for this operation
      Area Affected: Ada, M2
             Status: Complete

        Description: When a Sage.DeleteRelation is performed an entry is not
                     put into the log file.

         Correction: Added an enumeration type of RelationDelete and added an
                     entry that is written to the log file when the operation
                     is performed.  If you are calling the routines from
                     LogLib in which you are called back and you are doing the
                     record manipulation yourself then you should add code to
                     handle the RelationDelete type being passed back to you.
                     In that case you would do a Sage.DeleteRelation and
                     then Sage.OpenRelation to prepare the database for
                     processing the rest of the file.


May 05, 2004

   1)   Entry Title: Additional 113 error detection added
      Area Affected: Ada, M2
             Status: Complete

        Description: Additional detection of the 113 error situation has been
                     added.

         Correction: Found that when a record was written or rewritten some
                     information was left in a record structure that should
                     not have been.  Later when Sage.GetKeyPosition was called
                     would cause an erroneous index position to be returned
                     if using a keyed field that had not been used again for
                     positioning since the Write/Rewrite operation (it
                     reported the position of where it last was before the
                     record was written/rewritten).  Now when GetKeyPosition
                     is used on that unused key field the 113 error is
                     detected and shown.


May 04, 2004

   1)   Entry Title: FindRecord routines - 113 error flag being set incorrectly
                     in FindRecord routines.
      Area Affected: Ada, M2
             Status: Complete

        Description: After calling FindRecord the GetKeyPosition routine trips
                     the 113 error check.

         Correction: Found that the internal flags that track the status and
                     detect the 113 error situation were being set incorrectly
                     when the FindRecord routines were called.


April 29, 2004

   1)   Entry Title: SageErr - Some errors upgraded from Other to Minor status
      Area Affected: Ada, M2
             Status: Complete

        Description: Upgraded some SageErrors from being just OtherError
                     status to being MinorError status.

         Correction: The affected SageErrors are ObjectNotAvailable (93),
                     DialogOrControlNotAvailable (94),
                     InvalidControlTypeFunction (95),
                     InvalidControlCommandFunction (96), InvalidObjectName
                     (97) and InvalidInstanceName (98).  Prior to this with a
                     status of OtherError they would set Sage.SageError but
                     would not pop up messages.  By upgrading those to status
                     of MinorError if Minor Error checking is turned on they
                     would create a pop up message.  These errors are only
                     encountered only when working with Win32 and using the
                     Sage Dialogs and custom controls.


   2)   Entry Title: CtrlEdit - The routine GetValidateCharData should return
                     the entire string
      Area Affected: Ada, M2
             Status: Complete

        Description: The routine CtrlEdit.GetValidateCharData should return
                     the entire current string contained in the control
                     instead of just the single character.  We already know
                     the offset into the string where the character is at so
                     seeing the entire string would allow more flexibility in
                     doing validation.

         Correction: The parameter called value in the routine
                     CtrlEdit.GetValidateCharData now returns the entire
                     string from the control.  Also the string does contain
                     the character just pressed in the proper position.  Using
                     the offset parameter the calling routine will know which
                     character was just pressed.  Prior to this the calling
                     routine only received the single character in the
                     parameter.


   3)   Entry Title: STBackup - Need a routine to do simple backup of various
                     files
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine which will allow the simple backup of any
                     type of file.

         Correction: Added the routine STBackup.BackupCustomFiles which allows
                     for doing the simple backup structure of creating a
                     backup directory and copying the file on any type of
                     file.


   4)   Entry Title: CtrlEdit - Need string size checking on the
                     GetValidateCharData and GetValidateValueData routines
      Area Affected: Ada, M2
             Status: Complete

        Description: Need to check that the target string is large enough to
                     receive the value in the routines GetValidateCharData and
                     GetValidateValueData.

         Correction: Added a check and SageError.ArrayTooSmall assignment if
                     the target string is not large enough to hold the value.


April 28, 2004

   1)   Entry Title: Edit control - User type edit control not calling back to
                     validation routines
      Area Affected: Ada, M2
             Status: Complete

        Description: If a Sage Edit control is set to be a Sage linked field
                     then the validate char and validate value routines work
                     fine.  However if a User type is selected then even
                     though validation can be set the validation message is
                     never returned.

         Correction: Corrected some internal logic so that for either Sage or
                     User type links to a Sage Edit control the validate char
                     and validate value messages are returned.  NOTE - It is
                     possible that previously you may have had a User link
                     defined and the validation checks where on but you just
                     never received the callback to do the validation.  If you
                     have any Sage Edit controls like that this change will
                     cause you to start receiving the messages and it will
                     expect a return value.  The validation check would not
                     have been on by default, the default is off, but if you
                     did change that at some point in the past it will now
                     call you.


April 27, 2004

   1)   Entry Title: Thor - Adding relations/fields and then editing objects
                     gets rid of relation/field changes
      Area Affected: Thor
             Status: Complete

        Description: Found that doing any relation or field edits and then
                     editing an object would get rid of the relation or field
                     changes.

         Correction: Added code to save the current src changes before
                     allowing object editing.


April 22, 2004

   1)   Entry Title: GDIPrint - Will detect and handle additional printer strings
      Area Affected: Ada, M2
             Status: Complete

        Description: GdiPrint.ASCIIToGDL needs to handle some additional
                     printer strings.

         Correction: Added code to handle the ASCII.esc and ASCII.si
                     combination (in addition to just the single ASCII.si) and
                     also to detect the printer init string of ASCII.esc and
                     '@'.


   2)   Entry Title: SDI - Need to search for dfl's when not found
      Area Affected: SDI
             Status: Complete

        Description: Need to be able to search for the folder containing dfl's
                     if they are not found in the current directory.

         Correction: Added a pop up dialog to browse for a folder if no dfl's
                     are detected in the current folder.  This is active only
                     in the Win32 compile of SDI.


   3)   Entry Title: SDI - Not compressing print when lines are long in Win32
      Area Affected: SDI
             Status: Complete

        Description: In the Win32 compile of SDI when report lines extend
                     beyond 80 characters the print is not changing to
                     compressed.

         Correction: Found that the printer strings that control
                     initialization and compressed print were not being
                     written into the report in the Win32 compile of SDI.
                     Also found that one of the strings was not being handled
                     inside of the GDIPrint.ASCIIToGDL routine so updated that
                     also.


April 21, 2004

   1)   Entry Title: WinTools.BrowseForFolder - Need routine that allows
                     browsing/creating new folders
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine that not only puts up a dialog to select a
                     folder but will also allow creating folders.

         Correction: Added a new routine called WinTools.BrowseForFolder.
                     This routine provides the full capability of Windows when
                     selecting a new folder including creating folders if
                     desired.  Right clicking while a folder is highlighted
                     brings up a menu of operations allowed.  By passing the
                     value of False to AllFunctions the user can be restricted
                     to simply selecting an existing folder.  The other
                     difference besides creating folders between this routine
                     and a similar one in SageDialogs is that this routine
                     gives you the option of showing the files or if not, then
                     only the folders.  NOTE - If files are showing they can
                     also be selected by the user.  In that case the return
                     value will also contain the file name.


Version released at this point: 6.23.0004

April 20, 2004

   1)   Entry Title: Files.ConcatFiles - EOF characters getting embedded within
                     the final file
      Area Affected: Ada, M2
             Status: Complete

        Description: When files are concatted together if the file which is
                     being added to ends in an EOF character it gets left
                     within the file.  So the final file ends up with embedded
                     EOF characters.

         Correction: Added code to check for this and to overwrite those
                     characters.  The final file, if it has an EOF character,
                     will only have one and it will be at the end of the file.


   2)   Entry Title: Sdi.dfl file missing from install
      Area Affected: Sdi
             Status: Complete

        Description: The Sdi.dfl file is not included in the SageST
                     installation.

         Correction: Added the file to the install.


Version released at this point: 6.23.0003

April 14, 2004

   1)   Entry Title: Need a simple routine to provide data backup capability
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine that would provide some type of simple
                     capability to backup data files by making copies on the
                     hard drives.

         Correction: Added a package called STBackup with a routine called
                     BackupDataFiles.  This routine is very specific to
                     backing up the *.idx, *.dat and *.blk files that contain
                     SageST data.   Along with those files it can also store a
                     copy of the .dfl file that is compatible with them.  The
                     routine uses a registry entry to store a trigger point
                     (the number of times the routine is called before
                     performing the actual backup function) so this is
                     available in the Win32 library only.  The routine will
                     create up to ten archive folders and copy the data into
                     them.  Each time the backup is performed the data files
                     are rotated in the folders from folder number 1 up
                     through folder number 10 (or whatever max you tell the
                     routine).  This routine currently does not copy any other
                     type of files and simply makes copies in folders on the
                     local machine.  It does NOT do any type of backup to
                     other media.  This was designed to be a simple mechanism
                     to have a copy of the files when needing to recover.


April 06, 2004

   1)   Entry Title: Convert - Need a routine to handle percentages
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine to handle what percentage a number is of
                     another number and also returning that in a string value.
                     This is often needed for reports in applications.

         Correction: Added the routine CardToPercent in Modula 2 and
                     NatToPercent in Ada.  This routine takes in two numbers,
                     calculates what percent one number is of the other and
                     returns the percentage in a number and in a nicely
                     formatted string (i.e. 1,234%).


March 04, 2004

   1)   Entry Title: GdiPrint - Need a routine to test for a default printer
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a routine to help with detecting if there is a
                     default printer for the machine.

         Correction: Added the routine GdiPrint.GetDefaultPrinterDeviceName.


   2)   Entry Title: Thor - Should show form modification info on the form list
      Area Affected: Thor
             Status: Complete

        Description: Thor should show the form modification information such
                     as date, time and user id of when a form was modified on
                     the same screen which has the list of forms in the SRC.

         Correction: Added the mod date, mod time and the user id to the form
                     list screen.


March 03, 2004

   1)   Entry Title: Configure - Not all paths get updated when using the
                     Replicate function
      Area Affected: Configure
             Status: Complete

        Description: When the Replicate button is used not all paths get
                     updated.

         Correction: Found some internal counters that did not properly update
                     if relations that did not have a path no gained a path
                     from the Replicate function.


March 02, 2004

   1)   Entry Title: TimeLib - In Ada if the same string passed as both params
                     returns blank
      Area Affected: Ada
             Status: Complete

        Description: Found that if the same string is used as both the in and
                     the return parameter to calls such as Date1ToDate0 it
                     returns a blank string.

         Correction: Added code to protect against this condition and to
                     return correct values.


Version released at this point: 6.23.0002

February 26, 2004

   1)   Entry Title: Thor - Not showing relation list correctly when doing Copy
                     function
      Area Affected: Thor
             Status: Complete

        Description: The list of relations available to copy is not being
                     shown correctly.

         Correction: Found a error where it was looking at the target SRC
                     relation list instead of the source SRC list.


   2)   Entry Title: Rebuild/FixLib - Rebuilding a field with new repeats added
                     does not clear field properly
      Area Affected: Ada, M2, Rebuild
             Status: Complete

        Description: When a field has repeats added to it the additional
                     repeat fields appear to not be cleared properly.

         Correction: Found that the original problem exists only in the Ada
                     library so it happens only when doing a
                     FixLib.Restructure from within an Ada program.  It
                     occured because of errant code that tried to copy the
                     contents of the old field over but didn't stop when it
                     hit the number of repeats of the old field (the M2
                     library did have the check to stop).  By continuing
                     beyond the number of old repeats it copied junk from some
                     unknown area of memory to the new repeats of the field.
                     Besides the direct fix for that problem code was also
                     added in the Ada library, the M2 library and in Rebuild
                     to ensure that the new repeats of the field will
                     definately be initialized to nulls.


   3)   Entry Title: WinSecureLib - Added a new package to support user login
                     capability
      Area Affected: Ada, M2
             Status: Complete

        Description: Need a new library to support a more standard and more
                     secure method of authenticating user logins.

         Correction: Added a new package called WinSecureLib that provides
                     functions for defining users and groups.  This package
                     utilizes DES (128 bit) encryption to store user
                     information, a much more secure method than storing data
                     in relations.  This will provide a uniform method for any
                     application to handle their user logins without each
                     application reinventing the wheel.


February 24, 2004

   1)   Entry Title: Sage.FindRecord - Not setting 113 error flags correctly
      Area Affected: Ada, M2
             Status: Complete

        Description: If Sage.FindRecord is called the 113 error check flags to
                     not get set correctly.  Doing Sage.GetKeyPosition
                     following a Sage.FindRecord ends up triggering the error.

         Correction: Added code to set the flags so that Sage.FindRecord does
                     establish position in the file.


   2)   Entry Title: GdiPrint.ViewLog - Needs callback routine to intercept
                     printing
      Area Affected: Ada, M2
             Status: Complete

        Description: The routine GdiPrint.ViewLog puts up a viewer and while
                     there the user can click a print button to print the
                     document.  That could be a callback routine at that point
                     to let the calling routine have some control over the
                     printing process.

         Correction: Added a parameter to the call so that a callback routine
                     can be passed in.  When the Print function is selected
                     this routine is called back and passed the necessary
                     parameters so that it could just call the
                     GdiPrint.PrintLog routine (the same method the viewer is
                     using) or it could do anything else that would be needed.


   3)   Entry Title: Sage - Error checking for 113 error temporarily disabled
      Area Affected: Ada, M2
             Status: Complete

        Description: The tightening of the 113 error checking which typically
                     is used to catch errors in the use of Sage.Next and
                     Sage.Previous when reading records is disabled in this
                     release only in order to support a particular projects
                     software release.

         Correction: The check will be re-enabled in the next release of
                     SageST.


February 03, 2004

   1)   Entry Title: Thor - Need to confirm creating SRC made from the command
                     line
      Area Affected: Thor
             Status: Complete

        Description: Thor should confirm before creating a new SRC file just
                     because the name is sent in on the command line.

         Correction: Added confirmation before creating a new SRC if it does
                     not exist and it came from the command line or from the
                     history list.  This will stop the accidental creation of
                     files caused by a typo.  Also found that Thor was not
                     cleaning up empty SRC files that are a header only.
                     These are typically created from this accidental typo of
                     a name which created a new file.  Turned that check back
                     on, however the only down side could be if you create a
                     new file on purpose but exit before doing any other
                     defination it could delete the file.


January 30, 2004

   1)   Entry Title: Rebuild - Passworded relation stops .old from getting
                     relation list
      Area Affected: Rebuild
             Status: Complete

        Description: When the .old file has been selected Rebuild tries to
                     build a list of the relations.  If a password protected
                     relation is hit the list is stopped.

         Correction: Added code to handle a password protected relation and
                     for it to proceed with gathering the rest of the list.


   2)   Entry Title: Thor - Getting warning messages on start
      Area Affected: Thor
             Status: Complete

        Description: Getting warning message when Thor is started.

         Correction: Changing from using the .ini file for Thor global setup
                     information to using the registry created an error.
                     Previously when requesting an entry from the .ini file
                     all that had to be checked was a success flag to know if
                     we got it.  Now when the registry is queried you have to
                     check if success was true and if the entry is larger than
                     zero length.  Added the zero length check to the
                     appropriate places.


Version released at this point: 6.23.0001

January 29, 2004

   1)   Entry Title: Thor - Can't get out of objects dialog
      Area Affected: Thor
             Status: Complete

        Description: If the following conditions are met you end up in an
                     infinite loop 1) The .res and symbol files are read only
                     2) the 'Edit Properties' button is clicked 3) the Ok
                     button is clicked.  This causes a message to pop up
                     showing that you cannot change the object however you end
                     up in an infinite loop with this message continually
                     popping up.

         Correction: Added code to detect this condition and to exit after
                     showing the message one time.


January 28, 2004

   1)   Entry Title: Thor - Should move to using registry instead of .ini files.
      Area Affected: Thor
             Status: Complete

        Description: Should move away from using .ini files and use the
                     registry for storing values.

         Correction: This has been partially completed.  The file Thor.ini is
                     converted to registry entries now instead of using the
                     file.  This is the global Thor setup information.  Local
                     SRC setup information is still stored in a local .ini
                     file for the .src.


January 21, 2004

   1)   Entry Title: Crypto - New package added
      Area Affected: Ada, M2
             Status: Complete

        Description: A new package has been added to SageST.

         Correction: Added the package called Crypto.  This package allows
                     data to be encrypted or decrypted using various
                     techniques ranging from a very weak encryption (Ceaser)
                     to stronger (Vernam) to moderately strong (Vigenere) to
                     full 128 bit very strong encryption (Des).


January 20, 2004

   1)   Entry Title: ErrorLog - LogHexBytes does not work correctly
      Area Affected: Ada, M2
             Status: Complete

        Description: The routine ErrorLog.LogHexBytes does not print out
                     correctly.

         Correction: Corrected to put out information in the correct format.


   2)   Entry Title: SageST version changed
      Area Affected: Ada, M2
             Status: Complete

        Description: The SageST version should be changed due to updating the
                     Modula-2 compiler.

         Correction: Due to the Modula-2 compiler update to Version 4 build 28
                     the version of SageST is now changed to 6.23.


January 15, 2004

   1)   Entry Title: Sage.CompareFieldR - Does not work if integer subtypes
                     different
      Area Affected: Ada, M2
             Status: Complete

        Description: If an integer type field is used for each but the subtype
                     of the field is different the comparison will fail.

         Correction: The comparison is done using two different techniques
                     internally based on what type of field is being used.
                     Switched integer fields to the other type of comparison
                     and the subtype difference is no longer a factor.


January 12, 2004

   1)   Entry Title: GdiPrint - Double counting converted pages under some
                     conditions
      Area Affected: Ada, M2
             Status: Complete

        Description: Sometimes when a text to GDL conversion is processing the
                     routine reports double the number of pages that it
                     should.

         Correction: Found that if the number of lines just before the Form
                     Feed line was also the value you passed to the routine as
                     max lines it would double count.  It processed the
                     number of lines you had specified for max, incremented
                     the page count, then upon reading the very next line
                     encountered a Form Feed character and so it incremented
                     the page count again.  Added code to detect this and to
                     correctly increment the page count.


   2)   Entry Title: Thor - When generating second and third reports still shows
                     content of first report
      Area Affected: Thor
             Status: Complete

        Description: When a second and third report is generated it still
                     shows the content of the first report when the view
                     button is pressed.

         Correction: Found that an error in UpdLib.CompareFileTimes (listed in
                     a seperate bug report) was causing Thor to not convert
                     the current text file into GDL format and show it.  It
                     just showed the existing .gdl file which was actually the
                     content of the first report.


   3)   Entry Title: DiskLib Backup/Restore not working
      Area Affected: Ada, M2
             Status: Complete

        Description: DiskLib.Backup and DiskLib.Restore are not working
                     properly.

         Correction: Found that a compiler optimization uncovered a logic bug
                     in the code.  A parameter that should have been of type
                     'in out' was declared to be of type 'in'.


   4)   Entry Title: UpdLib.CompareFileTimes - Does not return correct value
      Area Affected: M2
             Status: Complete

        Description: The routine UpdLib.CompareFileTimes does not return the
                     correct values.

         Correction: Found a recent change to handle UNC type names had
                     introduced an error only in the M2 version so that it
                     would not function correctly.


December 18, 2003

   1)   Entry Title: Strings.FormatNumberString - Not returning formatted values
      Area Affected: Ada
             Status: Complete

        Description: The routine Strings.FormatNumberString is not returning
                     values correctly.

         Correction: Found that if the value passed in was longer than the
                     final string was supposed to be it had a problem that
                     resulted in the string being returned as null.


December 17, 2003

   1)   Entry Title: Rebuild - Needs some way to view and manage the log file
      Area Affected: Rebuild
             Status: Complete

        Description: Rebuild should have a button to allow the user to view
                     the log file.

         Correction: Added a button that will bring up the log file to view
                     and to print if the user desires.  After viewing the user
                     is asked if they want to reset the log file by deleting
                     it.


December 10, 2003

   1)   Entry Title: MultSage.OpenRelation - Will not return SageError correctly
                     if an index problem in the relation
      Area Affected: Ada, M2
             Status: Complete

        Description: If the relation has an index problem (i.e. missing index
                     file) the MultSage.OpenRelation will not detect that
                     condition.  Instead of returning a SageError to indicate
                     the problem it returns a 0 (SageErrs.OpOk).

         Correction: Added code to correctly return the correct SageError from
                     the routine when an index problem is detected.


   2)   Entry Title: Rebuild - Will not auto repair when only an index rebuild
                     is needed
      Area Affected: Rebuild
             Status: Complete

        Description: If only an index rebuild is needed on a relation Rebuild
                     will not detect and perform the action when the Auto
                     Repair button is used.

         Correction: Found an error inside of MultSage.OpenRelation that
                     caused the SageError to be reset in this case.  So the
                     calling routine looked for SageError coming from the
                     MultSage.OpenRelation call and got a value of 0
                     (SageErrs.OpOk) back.


December 05, 2003

   1)   Entry Title: STRegistry - Type renamed to better relate to common
                     Windows terminology
      Area Affected: Ada, M2
             Status: Complete

        Description: The type RegistryBaseType should be renamed to correspond
                     with the common Windows terminology.

         Correction: The type RegistryBaseType was renamed to HiveType to
                     correspond with how that item is referred to in most
                     Windows documentation.


   2)   Entry Title: Sage.ReadRecord - Added check to not allow positional reads
                     if record not positioned.
      Area Affected: Ada, M2
             Status: Complete

        Description: Need to add checking to warn when a Sage.ReadRecord uses
                     one of the operations Sage.Next, Sage.Previous,
                     Sage.NextEq or Sage.PreviousEq and there is not currently
                     a record located.

         Correction: Added checking that will pop up SageError 113
                     (IndexNotPositioned) if a ReadRecord is attempted with
                     one of the listed operations and there is not currently a
                     record located.  Operations such as ReWriteRecord,
                     WriteRecord or DeleteRecord leave the system in a state
                     such that the record pointer is NOT positioned.
                     Attempting to do one of the listed positional operations
                     at that point is a very unsafe practice.  Added a check
                     and the popup of error 113 if this situation is detected.
                     After doing a WriteRecord, ReWriteRecord or
                     DeleteRecord you should always do a logical read
                     (Sage.Eq, Sage.First, Sage.Last, etc.) that does not
                     depend on a starting position in the records in order to
                     find a desired record.  Situations where you may have
                     been doing this and you have thought that it was working
                     correctly is only because you have been lucky that you
                     were probably using a primary key.  Doing this with an
                     Alternate key is almost sure to be not correctly
                     processing records.


        
      

 

Current Changes

 


Send mail to: warren.merrill@inl.gov with questions or comments about this web site.
Copyright © 1989-2006 Battelle Energy Alliance