Previous Topic

Next Topic

Manage

The manage step provides data management functionality for your application and/or process.

Below is the code for Manage():

/*
 * Manage()
 *
 * This function performs simple record functions of add, delete and gets
 */
void Manage(void)
{
   os_printf(DH_STRING_LITERAL("MANAGE\n"));

   /* delete any existing records */
   Delete_Records();

   /* populate the table with data */
   Add_CustomerMaster_Records();

   /* display contents of table */
   Display_Records();

   /* update a record under locking control */
   Update_CustomerMaster_Record();

   /* display again after update and effects of lock */
   Display_Records();
}

/*
 * Delete_Records()
 *
 * This function deletes all the records in the table
 */
void Delete_Records(void)
{
   os_printf(DH_STRING_LITERAL("\tDelete records...\n"));

   EXEC SQL DELETE FROM custmast ;
   if (sqlca.sqlcode < 0)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);

   EXEC SQL COMMIT WORK ;
}


/*
 * Add_CustomerMaster_Records()
 *
 * This function adds records to table CustomerMaster from an
 * array of strings
 */
void Add_CustomerMaster_Records(void)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char  sCommand[512];
EXEC SQL END DECLARE SECTION ;
   dh_char_t	*data[] = {
      DH_STRING_LITERAL("('1000','92867','CA','1','Bryan Williams','2999 Regency','Orange')"),
      DH_STRING_LITERAL("('1001','61434','CT','1','Michael Jordan','13 Main','Harford')"),
      DH_STRING_LITERAL("('1002','73677','GA','1','Joshua Brown','4356 Cambridge','Atlanta')"),
      DH_STRING_LITERAL("('1003','10034','MO','1','Keyon Dooling','19771 Park Avenue','Columbia')")
   };
   int		i;
   int		nRecords = sizeof(data) / sizeof(data[0]);

   Delete_Records();

   os_printf(DH_STRING_LITERAL("\tAdd records...\n"));

   /* add one record at time to table */
   for (i = 0; i < nRecords; i++)
   {
      os_sprintf (sCommand, DH_STRING_LITERAL("INSERT INTO custmast VALUES %s"), data[i]);

      EXEC SQL EXECUTE IMMEDIATE :sCommand ;
      if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
   }

   EXEC SQL COMMIT WORK;
}


/*
 * Display_Records()
 *
 * This function displays the contents of a table.
 */
void Display_Records(void)
{
   EXEC SQL BEGIN DECLARE SECTION ;
   CHAR  custnumb[5+1];
   CHAR  custname[47+1];
   EXEC SQL END DECLARE SECTION ;

   os_printf(DH_STRING_LITERAL("\tDisplay records..."));

   EXEC SQL DECLARE curs CURSOR FOR
      SELECT custmast.cm_custnumb, custmast.cm_custname FROM custmast;
   if (sqlca.sqlcode)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);

   EXEC SQL OPEN curs;
   if (sqlca.sqlcode)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);

   EXEC SQL FETCH curs INTO :custnumb, :custname;

   /* fetch and display each individual record */
   while (!sqlca.sqlcode)
   {
      os_printf(DH_STRING_LITERAL("\n\t\t%-8s%10s\n"),custnumb, custname);

      EXEC SQL FETCH curs INTO :custnumb, :custname;
   }

   EXEC SQL CLOSE curs ;
}


/*
 * Update_CustomerMaster_Records()
 *
 * Update one record under locking control to demonstrate the effects
 * of locking
 */
void Update_CustomerMaster_Record(void)
{
   os_printf(DH_STRING_LITERAL("\tUpdate record...\n"));

   EXEC SQL UPDATE custmast SET cm_custname = 'KEYON DOOLING' WHERE cm_custnumb = '1003';
   if (sqlca.sqlcode)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);

   os_printf(DH_STRING_LITERAL("\tPress <ENTER> key to unlock\n"));
   getchar();


   EXEC SQL COMMIT WORK;
}