home *** CD-ROM | disk | FTP | other *** search
- // BDE - (C) Copyright 1995 by Borland International
-
- // BookMark.c
- #include "snipit.h"
-
- static const char szTblName[] = "customer";
- static const char szTblType[] = szPARADOX;
-
- //=====================================================================
- // Function:
- // BookMark();
- //
- // Description:
- // This example shows how to save the current position within
- // a cursor (the current record). The position within the
- // cursor will then be changed and reset to that location.
- //
- // Note: A bookmark only works with the current cursor. If the
- // cursor is changed - for example, when you change the active
- // index, the bookmark may become corrupt or invalid.
- // Therefore, if you switch indexes you will need to
- // regenerate any bookmarks.
- //=====================================================================
- void
- BookMark (void)
- {
- hDBIDb hDb; // Handle to the database
- hDBICur hCur; // Handle to the table
- CURProps TblProps; // Table properties
- pBYTE pBookBuf = NULL; // Pointer to the bookmark
- DBIResult rslt; // Return value from IDAPI functions
-
- Screen("*** BookMark Example ***\r\n");
-
- BREAK_IN_DEBUGGER();
-
- Screen(" Initializing IDAPI... ");
- if (InitAndConnect(&hDb) != DBIERR_NONE)
- {
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- Screen(" Setting the database directory... ");
- rslt = DbiSetDirectory(hDb, (pCHAR) szTblDirectory);
- ChkRslt(rslt, "SetDirectory");
-
- Screen(" Opening the %s table... ", szTblName);
- rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
- NULL, NULL, 0, dbiREADWRITE, dbiOPENSHARED,
- xltFIELD, FALSE, NULL, &hCur);
- if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE)
- {
- CloseDbAndExit(&hDb);
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- // Get the properties of the table so that we can create the correct
- // bookmark size for the present condition of the table. Since the
- // bookmark is cursor-related it can change with any change to the
- // cursor, such as a change to the index or filters.
- rslt = DbiGetCursorProps(hCur, &TblProps);
- ChkRslt(rslt, "GetCursorProperties");
-
- rslt = DbiGetNextRecord(hCur, dbiNOLOCK, NULL, NULL);
- ChkRslt(rslt, "GetNextRecord");
-
- Screen(" Displaying the first record in the table...");
- DisplayNextRecord(hCur);
-
- Screen("\r\n Jumping to the third record in the table... ");
- rslt = DbiGetRelativeRecord(hCur, 2, dbiNOLOCK, NULL, 0);
- ChkRslt(rslt, "GetRelativeRecord");
-
- // Create the bookmark buffer. The size comes from the table property
- // iBookMarkSize.
- pBookBuf = (pBYTE) malloc(TblProps.iBookMarkSize);
- if (pBookBuf == NULL)
- {
- Screen(" Error: Out of memory");
- rslt = DbiCloseCursor(&hCur);
- ChkRslt(rslt, "CloseCursor");
- CloseDbAndExit(&hDb);
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- // Display the record that we will set a bookmark on.
- Screen(" Getting a bookmark on this record...");
- rslt = DbiGetBookMark(hCur, pBookBuf);
- ChkRslt(rslt, "GetBookMark");
-
- DisplayNextRecord(hCur);
-
- Screen("\r\n Jumping to the end of the table...");
- rslt = DbiSetToEnd(hCur);
- ChkRslt(rslt, "SetToEnd");
-
- // Set to end moves past the last record....
- rslt = DbiGetPriorRecord(hCur, dbiNOLOCK, NULL, NULL);
- Screen(" Display the record...");
- DisplayCurrentRecord(hCur);
-
- Screen("\r\n Going back to the bookmarked record...");
- rslt = DbiSetToBookMark(hCur, pBookBuf);
- ChkRslt(rslt, "SetToBookMark");
-
- Screen(" Displaying the bookmarked record...");
- DisplayNextRecord(hCur);
-
- Screen("\r\n Close the table...");
- rslt = DbiCloseCursor(&hCur);
- ChkRslt(rslt, "CloseCursor");
-
- free(pBookBuf);
-
- Screen(" Close the database and exit IDAPI...");
- CloseDbAndExit(&hDb);
-
- Screen("\r\n*** End of Example ***");
- }
-