AppendTransaction

AppendTransaction allows transactions to be directly inputted into a backup database.
unsigned __int64 AppendTransaction (
	unsigned int logNumber,
	unsigned int transactionID,
	__int64 length,
	const void* buffer
);

Parameters

logNumbera value between 0-65,535 that tells the system which cyclical log file this tranaction should be appended to.
transactionIDthe Transaction ID for the appending transaction. This has internal use and should not be changed.
lengththe length on the transaction buffer.
buffera buffer containing a correctly formatted buffer.

Return Values

If the method succeeds, the return value is zero else see error codes for more details.

Remarks

Example Use
CODBPP database, backup;
unsigned int logFile, transactionID;
__int64 length = 0, size, position;
BYTE *buffer = NULL;
char16_t *message;
if((error = database.OpenDatabase(u"YourDatabase")) == NO_ERROR){//production database is read only
   if((error = backup.OpenDatabase(u"YourBackupDatabase")) == NO_ERROR){
      if((error = backup.BeginTransaction(CODBPP::EXCLUSIVE)) == NO_ERROR{//lock backup database from other transactions
         if ((error = backup.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) {//get last transaction from backup log file
            while (error == NO_ERROR) {
               if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) {//gets next after the the inputted commit
                  if (length < size || (size << 4) < length) {
                     if(buffer != NULL) delete[] buffer;
                     buffer = new BYTE[(length = (size + 0x3f)&~0x3f)];
                  }
                  size = length;//resets length to maximum size
                  if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size, buffer)) == NO_ERROR)//reads the next commit
                     error = backup.AppendTransaction(logFile, transactionID, size, buffer);//append the previous transaction to the backup database
               }
               else if (ERROR_MASK(error) == WAIT_TIMEOUT) error = NO_ERROR;
            }
         }
      }
      backup.EndTransaction();
   }
   backup.CloseDatabase();
}
if(error && database.GetErrorMessage(&message) == NO_ERROR)
  MessageBox(message);
database.CloseDatabase();

Since

Version 4.5

Also See

WaitNextCommit
Comments (0)Listen All
Characters left: 2500
 
Ekky Software Homepage Ekky Software Homepage ObjectDatabase++ TScript Ekky Software Homepage Ekky Software Homepage ObjectDatabase++ TScript