home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / 32snipit.pak / RECUPDAT.C < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  152 lines

  1. // BDE32 3.x - (C) Copyright 1996 by Borland International
  2.  
  3. // recupdat.c
  4. #include "snipit.h"
  5.  
  6. static const char szTblName[] = "contacts";
  7. static const char szTblType[] = szPARADOX;
  8.  
  9. //=====================================================================
  10. //  Function:
  11. //          RecordUpdate();
  12. //
  13. //  Description:
  14. //          This example shows how to update records in a table.
  15. //=====================================================================
  16. void
  17. RecordUpdate(void)
  18. {
  19.     DBIResult   rslt;               // Value returned from IDAPI functions
  20.     hDBIDb      hDb;                // Handle to the database
  21.     hDBICur     hCur;               // Handle to the table
  22.     pBYTE       pRecBuf;            // Pointer to the record buffer
  23.     CURProps    curProps;           // Properties of the table
  24.     CHAR        szLastName[20];     // Last Name
  25.     CHAR        szFirstName[20];    // First Name
  26.     CHAR        szCompany[30];      // Company Name
  27.     CHAR        szPhone[16];        // Phone Number
  28.  
  29.     Screen("*** Updating Records ***\r\n");
  30.  
  31.     BREAK_IN_DEBUGGER();
  32.  
  33.     Screen("    Initializing IDAPI...\r\n");
  34.     if (InitAndConnect(&hDb) != DBIERR_NONE) 
  35.     {
  36.         Screen("\r\n*** End of Example ***");
  37.         return;
  38.     }
  39.  
  40.     Screen("    Setting the database directory...");
  41.     rslt = DbiSetDirectory(hDb, (pCHAR) szTblDirectory);
  42.     ChkRslt(rslt, "SetDirectory");
  43.  
  44.     Screen("    Opening the \"%s\" table...", szTblName);
  45.  
  46.     rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
  47.                         NULL, NULL, NULL, dbiREADWRITE, dbiOPENSHARED,
  48.                         xltFIELD, FALSE, NULL, &hCur);
  49.     if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE)
  50.     {
  51.         CloseDbAndExit(&hDb);
  52.         Screen("\r\n*** End of Example ***");
  53.         return;
  54.     }
  55.  
  56.     // Add a record. 
  57.     Screen(" \r\n    Determine the size of the record and allocate a"
  58.            " buffer to hold records...");
  59.  
  60.     // Allocate memory for the record buffer
  61.     rslt = DbiGetCursorProps(hCur, &curProps);
  62.     ChkRslt(rslt, "GetCursorProps");
  63.  
  64.     pRecBuf = (pBYTE) malloc(curProps.iRecBufSize);
  65.     if (pRecBuf == NULL)
  66.     {
  67.         Screen("    Error - Out of memory");
  68.         rslt = DbiCloseCursor(&hCur);
  69.         ChkRslt(rslt, "CloseCursor");
  70.         CloseDbAndExit(&hDb);
  71.         Screen("\r\n*** End of Example ***");
  72.         return;
  73.     }
  74.  
  75.     // Set the data to add.
  76.     strcpy(szLastName, "Smith");
  77.     strcpy(szFirstName, "John");
  78.     strcpy(szCompany, "Kauai Dive Shoppe");
  79.     strcpy(szPhone, "(304) 113-2244");
  80.  
  81.     Screen("    Initialize the record buffer...");
  82.     rslt = DbiInitRecord(hCur, pRecBuf);
  83.     ChkRslt(rslt, "InitRecord");
  84.  
  85.     Screen("    Add the fields to the record buffer...");
  86.     rslt = DbiPutField(hCur, 1, pRecBuf, (pBYTE) szLastName);
  87.     ChkRslt(rslt, "PutField");
  88.  
  89.     rslt = DbiPutField(hCur, 2, pRecBuf, (pBYTE) szFirstName);
  90.     ChkRslt(rslt, "PutField");
  91.  
  92.     rslt = DbiPutField(hCur, 3, pRecBuf, (pBYTE) szCompany);
  93.     ChkRslt(rslt, "PutField");
  94.  
  95.     rslt = DbiPutField(hCur, 4, pRecBuf, (pBYTE) szPhone);
  96.     ChkRslt(rslt, "PutField");
  97.  
  98.  
  99.     Screen("    Add the record to the table...\r\n");
  100.  
  101.     rslt = DbiInsertRecord(hCur, dbiNOLOCK, pRecBuf);
  102.     if (ChkRslt(rslt, "InsertRecord") != DBIERR_NONE)
  103.     {
  104.         if (rslt == DBIERR_KEYVIOL)
  105.         {
  106.             Screen("        Expected error - Continue...");
  107.         }
  108.         else
  109.         {
  110.             rslt = DbiCloseCursor(&hCur);
  111.             ChkRslt(rslt, "CloseCursor");
  112.             CloseDbAndExit(&hDb);           
  113.             Screen("\r\n*** End of Example ***");
  114.             return;
  115.         }
  116.     }
  117.  
  118.     Screen("    Search for the value in the table...\r\n");
  119.     rslt = DbiSetToKey(hCur, keySEARCHEQ, FALSE, 0, 0, pRecBuf);
  120.     ChkRslt(rslt, "SetToKey");
  121.  
  122.     Screen("    Change the phone number of the just added record...\r\n");
  123.  
  124.     Screen("    Get the record from the table...");
  125.     rslt = DbiGetNextRecord(hCur, dbiWRITELOCK, pRecBuf, NULL);
  126.     ChkRslt(rslt, "GetNextRecord");
  127.  
  128.     Screen("    Change the value in the \"Phone\" field...");
  129.     strcpy(szPhone, "(304) 222-9876");
  130.     rslt = DbiPutField(hCur, 4, pRecBuf, (pBYTE) szPhone);
  131.     ChkRslt(rslt, "PutField");
  132.  
  133.     Screen("    Write the changes to the table...");
  134.     rslt = DbiModifyRecord(hCur, pRecBuf, TRUE);
  135.     ChkRslt(rslt, "ModifyRecord");
  136.  
  137.     Screen("\r\n    Delete the record which was added...");
  138.     rslt = DbiDeleteRecord(hCur, NULL);
  139.     ChkRslt(rslt, "DeleteRecord");
  140.  
  141.     free(pRecBuf);
  142.  
  143.     Screen("    Close the %s table...", szTblName);
  144.     rslt = DbiCloseCursor(&hCur);
  145.     ChkRslt(rslt, "CloseCursor");
  146.  
  147.     Screen("    Close the database and exit IDAPI...");
  148.     CloseDbAndExit(&hDb);
  149.  
  150.     Screen("\r\n*** End of Example ***");
  151. }
  152.