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

  1. // BDE - (C) Copyright 1995 by Borland International
  2.  
  3. // dbio.c
  4. #include "snipit.h"
  5.  
  6. #define iNUMDB 5
  7.  
  8. //=====================================================================
  9. //  Function:
  10. //          DatabaseIOSample();
  11. //
  12. //  Description:
  13. //          This example shows how to open a number of databases and get
  14. //          information about those databases.
  15. //=====================================================================
  16. void
  17. DatabaseIOSample (void)
  18. {
  19.     DBIResult   rslt;             // Value returned from IDAPI functions
  20.     hDBIDb      hDb[iNUMDB];      // Array of handles to databases
  21.     hDBICur     hCur;             // Handle to the table
  22.     DBIPATH     szDir;            // String to hold the directory
  23.     CHAR        szMessage[20];    // String to hold messages
  24.                                   //   (expected size <20)
  25.     UINT16      iOpenedDatabases; // Count of the opened databases
  26.     UINT16      iLoop;            // Loop variable
  27.     DBDesc      DbDesc;           // Information about the databases
  28.     
  29.     Screen("*** Database Manipulation Example ***\r\n");
  30.  
  31.     BREAK_IN_DEBUGGER();
  32.  
  33.     Screen("   Initializing IDAPI...\r\n");
  34.     rslt = DbiInit(NULL);
  35.     if (ChkRslt(rslt, "Init") != DBIERR_NONE)
  36.     {
  37.         Screen("\r\n*** End of Example ***");
  38.         return;
  39.     }
  40.  
  41.     // Turn on trace information if the debug layer is anabled (DLLSWAP.EXE).
  42.     DbiDebugLayerOptions(DEBUGON | OUTPUTTOFILE, "SNIPIT.INF");
  43.  
  44.     // Specify where temporary files are placed.
  45.     rslt = DbiSetPrivateDir(szPrivDirectory);
  46.     ChkRslt(rslt, "SetPrivateDir");
  47.  
  48.     // Open up to iNUMDB databases.
  49.     for (iOpenedDatabases=0; iOpenedDatabases < iNUMDB; iOpenedDatabases++)
  50.     {
  51.         Screen("   Open database #%i", iOpenedDatabases + 1);
  52.         rslt = DbiOpenDatabase("", 0, dbiREADWRITE, dbiOPENSHARED,
  53.                                NULL, NULL, NULL, NULL,
  54.                                &hDb[iOpenedDatabases]);
  55.         if (rslt != DBIERR_NONE)
  56.         {
  57.             // Know how to deal with running out of database handles.
  58.             if (rslt == DBIERR_DBLIMIT)
  59.             {
  60.                 break;
  61.             }
  62.  
  63.             ChkRslt(rslt, "OpenDatabase");
  64.  
  65.             DbiDebugLayerOptions(0, NULL);
  66.             rslt = DbiExit();
  67.             ChkRslt(rslt, "Exit");
  68.  
  69.             Screen("\r\n*** End of Example ***");
  70.             return;
  71.         }
  72.     }
  73.  
  74.     Screen("\r\n   Get the default directory for the first database...");
  75.     rslt = DbiGetDirectory(hDb[0], FALSE, szDir);
  76.     ChkRslt(rslt, "GetDirectory");
  77.  
  78.     Screen("   The working directory: %s", szDir);
  79.  
  80.     Screen("   Change the directory which the first database uses...");
  81.     rslt = DbiSetDirectory(hDb[0], (pCHAR) szTblDirectory);
  82.     ChkRslt(rslt, "SetDirectory");
  83.  
  84.     // Display information about the available databases.
  85.     //   Note that this example reads the data from the schema table
  86.     //   directly into a structure defined in IDAPI.H.  This should
  87.     //   only be done with schema tables.
  88.     rslt = DbiOpenDatabaseList(&hCur);
  89.     if (ChkRslt(rslt, "OpenDatabaseList") == DBIERR_NONE)
  90.     {
  91.         Screen("\r\n   Display information about the available databases:");
  92.         while ((rslt = DbiGetNextRecord(hCur, dbiNOLOCK, (pBYTE)&DbDesc,
  93.                NULL)) == DBIERR_NONE)
  94.         {
  95.             Screen("\r\n   Logical Name: %s", DbDesc.szName);
  96.             Screen("   Description: %s", DbDesc.szText);
  97.             Screen("   Physical name/path: %s", DbDesc.szPhyName);
  98.             Screen("   Database type: %s", DbDesc.szDbType);
  99.         }
  100.  
  101.         // Trap for unexpected errors.
  102.         if (rslt != DBIERR_EOF)
  103.         {
  104.             ChkRslt(rslt, "GetNextRecord");
  105.         }
  106.     }
  107.  
  108.     // Place an empty line in the output edit control.
  109.     Screen("");
  110.  
  111.     // Clean up and return.
  112.     for (iLoop = 0; iLoop < iOpenedDatabases; iLoop++)
  113.     {
  114.         Screen("   Close database #%i", iLoop + 1);
  115.         wsprintf(szMessage, "CloseDatabase #%i", iLoop + 1);
  116.  
  117.         rslt = DbiCloseDatabase(&hDb[iLoop]);
  118.         ChkRslt(rslt, szMessage);
  119.     }
  120.  
  121.     // Turn off trace information.
  122.     DbiDebugLayerOptions(0, NULL);
  123.  
  124.     Screen("\r\n   Clean up IDAPI");
  125.     rslt = DbiExit();
  126.     ChkRslt(rslt, "Exit");
  127.  
  128.     Screen("\r\n*** End of Example ***");
  129. }
  130.