Events for cDbUpdateHandler

Name

Description

OnPreUpdate

Event called before any update of the database is started. This is a programmer's hook event. Can be used to create an SQL database (not table).

OnPostUpdate

Event that is called after all database updates have finished. This is a programmer's hook event.

OnFindVersionRecord

Hook message for custom DbVersion record find. The programmer can use this event for putting code that needs to be executed to find a *custom* DbVersion table record - aka when another table should be used in place of the standard DbVersion table. By default the DbVersion table is used but this can be customized by adding this line to the code;

"Define DUF_Use_Custom_DbVersion"

above the line;

"Use cDbUpdateHandler.pkg"

OnErrorWriteHeader_DataTable

Hook event for writing header error text (pre-update) to a data table, instead of the default text-log file. Only called if the pbUseDataTable property = True. Don't forget to Open the table first (!) as all tables have been closed at this stage. The start date & time is passed.

OnErrorWriteRow_DataTable

Hook event to log errors to a database table. Only called if the pbUseDataTable = True. Don't forget to Open the table first (!) as all tables have been closed at this stage. If pbQuickWrite = True the passed DbUpdateErrorArray will contain just one row, as it is called for each error that occurred. Else it is called once at the end after all updates have run and contains all errors.


Sample Code


Object oDbUpdateHandler is an cDbUpdateHandler
   Set Data_File_Field to File_Field DbVersion.DatabaseVersion


   // You can create a database prior making any updates in case it doesn't exist:

   // Note: This option is only available for MS-SQL.

   Procedure OnPreUpdate

       Boolean bOK

       Get SqlDatabaseCreate MSSQLDRV_ID "OrderEntry" True True to bOK

       If (bOK = False) Begin

           Send Info_Box "Nope, that didn't work. Program will now exit."

           Send Exit_Application

       End

   End_Procedure        


   // To find a database version record if the standard DbVersion table

   // should *not* be used. You can here use your own table logic.

   Procedure OnFindVersionRecord

       Open MyTable

       Move xx to MyTable.Column1

       Move yy to MyTable.Column2

       Find LE MyTable by Index.1

   End_Procedure        

   // Called once when the update begins.

   Procedure OnErrorWriteHeader_DataTable DateTime dtUpdateStart

       Open MyLogTable

       Move dtUpdateStart to MyLogTable.UpdateStart

       Saverecord MyLogTable

   End_Procedure


   // Called once after all updates have finished if pbQuickWrite=False. If pbQuickWrite=True it is called once for each error.

   Procedure OnErrorWriteRow_DataTable tDbUpdateError[] DbUpdateErrorArray

       Integer iSize iCount

       Open MyLogTable

       Move (SizeOfArray(DbUpdateErrorArray)) to iSize

       Decrement iSize

       For iCount from 0 to iSize

           Clear MyLogTable

           Move DbUpdateErrorArray[iCount].iError to MyLogTable.ErrorNo

           Move DbUpdateErrorArray[iCount].sErrorText to MyLogTable.ErrorText

           SaveRecord MyLogTable

       Loop

   End_Procedure


...


NOTE:

Struct tDbUpdateError

   Number  nUpdateVersion

   Integer iError

   String  sErrorText

   Integer iErrorLine

   Boolean bError

End_Struct