home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bde / snipit.pak / BOOKMARK.C < prev    next >
C/C++ Source or Header  |  1997-07-23  |  4KB  |  123 lines

  1. // BDE - (C) Copyright 1995 by Borland International
  2.  
  3. // BookMark.c
  4. #include "snipit.h"
  5.  
  6. static const char szTblName[] = "customer";
  7. static const char szTblType[] = szPARADOX;
  8.  
  9. //=====================================================================
  10. //  Function:
  11. //          BookMark();
  12. //
  13. //  Description:
  14. //          This example shows how to save the current position within
  15. //          a cursor (the current record). The position within the
  16. //          cursor will then be changed and reset to that location.
  17. //
  18. //  Note:   A bookmark only works with the current cursor.  If the
  19. //          cursor is changed - for example, when you change the active
  20. //          index, the bookmark may become corrupt or invalid.
  21. //          Therefore, if you switch indexes you will need to
  22. //          regenerate any bookmarks.
  23. //=====================================================================
  24. void
  25. BookMark (void)
  26. {
  27.     hDBIDb      hDb;                // Handle to the database
  28.     hDBICur     hCur;               // Handle to the table
  29.     CURProps    TblProps;           // Table properties
  30.     pBYTE       pBookBuf = NULL;    // Pointer to the bookmark 
  31.     DBIResult   rslt;               // Return value from IDAPI functions
  32.  
  33.     Screen("*** BookMark Example ***\r\n");
  34.  
  35.     BREAK_IN_DEBUGGER();
  36.  
  37.     Screen("    Initializing IDAPI... ");
  38.     if (InitAndConnect(&hDb) != DBIERR_NONE)
  39.     {                                        
  40.         Screen("\r\n*** End of Example ***");
  41.         return;
  42.     }
  43.  
  44.     Screen("    Setting the database directory... ");
  45.     rslt = DbiSetDirectory(hDb, (pCHAR) szTblDirectory);
  46.     ChkRslt(rslt, "SetDirectory");
  47.  
  48.     Screen("    Opening the %s table... ", szTblName);
  49.     rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
  50.                         NULL, NULL, 0, dbiREADWRITE, dbiOPENSHARED,
  51.                         xltFIELD, FALSE, NULL, &hCur);
  52.     if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE)
  53.     {
  54.         CloseDbAndExit(&hDb);
  55.         Screen("\r\n*** End of Example ***");
  56.         return;
  57.     }
  58.  
  59.     // Get the properties of the table so that we can create the correct
  60.     //   bookmark size for the present condition of the table.  Since the
  61.     //   bookmark is cursor-related it can change with any change to the
  62.     //   cursor, such as a change to the index or filters.
  63.     rslt = DbiGetCursorProps(hCur, &TblProps);
  64.     ChkRslt(rslt, "GetCursorProperties");
  65.  
  66.     rslt = DbiGetNextRecord(hCur, dbiNOLOCK, NULL, NULL);
  67.     ChkRslt(rslt, "GetNextRecord");
  68.  
  69.     Screen("    Displaying the first record in the table...");
  70.     DisplayNextRecord(hCur);
  71.  
  72.     Screen("\r\n    Jumping to the third record in the table... ");
  73.     rslt = DbiGetRelativeRecord(hCur, 2, dbiNOLOCK, NULL, 0);
  74.     ChkRslt(rslt, "GetRelativeRecord");
  75.  
  76.     // Create the bookmark buffer.  The size comes from the table property
  77.     //   iBookMarkSize.
  78.     pBookBuf = (pBYTE) malloc(TblProps.iBookMarkSize);
  79.     if (pBookBuf == NULL)
  80.     {
  81.         Screen("    Error: Out of memory");
  82.         rslt = DbiCloseCursor(&hCur);
  83.         ChkRslt(rslt, "CloseCursor");
  84.         CloseDbAndExit(&hDb);
  85.         Screen("\r\n*** End of Example ***");
  86.         return;
  87.      }
  88.  
  89.     // Display the record that we will set a bookmark on.
  90.     Screen("    Getting a bookmark on this record...");
  91.     rslt = DbiGetBookMark(hCur, pBookBuf);
  92.     ChkRslt(rslt, "GetBookMark");
  93.  
  94.     DisplayNextRecord(hCur);
  95.  
  96.     Screen("\r\n    Jumping to the end of the table...");
  97.     rslt = DbiSetToEnd(hCur);
  98.     ChkRslt(rslt, "SetToEnd");
  99.  
  100.     // Set to end moves past the last record....
  101.     rslt = DbiGetPriorRecord(hCur, dbiNOLOCK, NULL, NULL);
  102.     Screen("    Display the record...");
  103.     DisplayCurrentRecord(hCur);
  104.  
  105.     Screen("\r\n    Going back to the bookmarked record...");
  106.     rslt = DbiSetToBookMark(hCur, pBookBuf);
  107.     ChkRslt(rslt, "SetToBookMark");
  108.  
  109.     Screen("    Displaying the bookmarked record...");
  110.     DisplayNextRecord(hCur);
  111.  
  112.     Screen("\r\n    Close the table...");
  113.     rslt = DbiCloseCursor(&hCur);
  114.     ChkRslt(rslt, "CloseCursor");
  115.  
  116.     free(pBookBuf);
  117.  
  118.     Screen("    Close the database and exit IDAPI...");
  119.     CloseDbAndExit(&hDb);
  120.  
  121.     Screen("\r\n*** End of Example ***");
  122. }
  123.