| **Navigation:**  [[introduction.htm|Language Reference]] > 13 - Built-in Functions >====== LOGOUT (begin transaction) ====== | [[loge return natural logarithm .htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[longpath return long filename .htm|{{btn_next_n.gif|Next page}}]] | | || **LOGOUT(**//timeout// [,// file, ... , file //] **)** {{blk2blue.jpg|blk2blue.jpg}} | **LOGOUT** | Initiates transaction processing. | | //timeout// | A numeric constant or variable specifying the number of seconds to attempt to begin the transaction for a //file// before aborting the transaction and posting an error. | | //file// | The label of a FILE declaration. There may be multiple //file// parameters, separated by commas, in the parameter list (up to 100). If no //file// is specified, all //files// in the transaction must have been previously named using PROP:Logout. | The **LOGOUT** statement initiates transaction processing for a specified set of //files//. All //files// in the transaction set must have the same file driver and must already be open. LOGOUT informs the file driver that a transaction is beginning. The file driver then performs the actions necessary to that file system to initiate transaction processing for the specified set of //files//. For example, if the file system requires that the //files// be locked for transaction processing, LOGOUT automatically locks the //files//. Only one LOGOUT transaction may be active at a time. A second LOGOUT statement without a prior COMMIT or ROLLBACK generates errorcode 56. The behavior of LOGOUT is file driver dependent, especially with SQL based drivers. Please see the Supported Commands and Attributes section for more information on each driver. In general, a LOGOUT on SQL based files affects all files on a connection that is associated with a file in the logout list, If you do not want a particular table logged out, you must open it on a different connection by using a different OWNER string. **Errors Posted:** | 32 | File Is Already Locked | | 37 | File Not Open | | 48 | Unable to Log Transaction | | 56 | LOGOUT Already Active | | 80 | Function Not Supported | **Example:** ** ****LOGOUT****(1,OrderHeader,OrderDetail) !Begin Transaction** ** DO ErrHandler                     !always check for errors** ** ADD(OrderHeader)                  !Add Parent record** ** DO ErrHandler                     !always check for errors** ** LOOP X# = 1 TO RECORDS(DetailQue) !Process stored detail records** **  GET(DetailQue,X#)                !Get one from the QUEUE** **  DO ErrHandler                    !always check for errors** **  Det:Record = DetailQue           !Assign to record buffer** **  ADD(OrderDetail)                 !and add it to the file** **  DO ErrHandler                    !always check for errors** ** END** ** COMMIT                            !Terminate successful transaction** ** ASSERT(~ERRORCODE())** **ErrHandler ROUTINE                 !Error routine** ** IF NOT ERRORCODE() THEN EXIT.     !Exit here if no error** ** Err" = ERROR()                    !else save the error message** ** ROLLBACK                          !Rollback the transaction** ** ASSERT(~ERRORCODE())** ** BEEP                              !Alert the user** ** MESSAGE('Transaction Error - ' & Err")** ** EXIT                              !and exit** **See Also:** [[commit terminate successful transaction .htm|COMMIT]] [[rollback terminate unsuccessful transaction .htm|ROLLBACK]] [[prop logout.htm|PROP:Logout]]