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

  1. // BDE32 3.x - (C) Copyright 1996 by Borland International
  2.  
  3. // DBLogin.C
  4. #include "snipit.h"
  5.  
  6. static const DBIPATH szTblName      = "security";
  7. static const char szTblType[]       = szDBASE;
  8. pCHAR  CallBackData3;
  9.  
  10. CBRType DBIFN _export CallBackFunc3(CBType ecbType, UINT32 iClientData,
  11.                                     pVOID pCbInfo);
  12.                                   
  13. //=====================================================================
  14. //  Function:
  15. //          LoginCallback();
  16. //
  17. //  Description:
  18. //          This example shows how to access a dBASE table which is missing
  19. //          it's .MDX file. This is accomplished with the use of the
  20. //          cbINPUTREQ callback. Note that this method can also be used
  21. //          to access FOX and CLIPPER tables.
  22. //=====================================================================
  23. void
  24. LoginCallback (void)
  25. {
  26.  
  27.     hDBIDb      hDb;                        // Handle to the database
  28.     hDBICur     hCur;                       // Handle to the table
  29.     UINT16      uNumOfRecs = 5;             // No. of records to display
  30.     CBLoginDesc CbInfo;                     // Variable which is used within
  31.                                             //   the callback
  32.     DBIResult   rslt;                       // Return value from IDAPI
  33.                                             //   functions
  34.  
  35.     Screen("*** Open Table CallBack Example ***\r\n");
  36.  
  37.     BREAK_IN_DEBUGGER();
  38.  
  39.     Screen("    Initializing IDAPI...");
  40.     if (InitAndConnect(&hDb) != DBIERR_NONE)
  41.     {
  42.         Screen("*** End of Example ***");
  43.         return;
  44.     }
  45.  
  46.     Screen("    Setting the database directory...");
  47.     rslt = DbiSetDirectory(hDb, (pCHAR) szTblDirectory);
  48.     ChkRslt(rslt, "SetDirectory");
  49.  
  50.     Screen("    Attempt to open the %s table: \r\n"
  51.            "        Error Expected: 'Encrypted dBASE tables not supported'...",
  52.            szTblName);
  53.     rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
  54.                         NULL, NULL, 0, dbiREADONLY, dbiOPENSHARED,
  55.                         xltFIELD, FALSE, NULL, &hCur);
  56.     ChkRslt(rslt, "OpenTable");
  57.  
  58.     if (hCur)
  59.     {
  60.         Screen("    Display the %s table...", szTblName);
  61.         DisplayTable(hCur, uNumOfRecs);
  62.  
  63.         Screen("\r\n    Close the %s table...", szTblName);
  64.         DbiCloseCursor(&hCur);
  65.     }
  66.  
  67.     Screen("\r\n    Register the Login Callback...");
  68.  
  69.     // Allocate enough space for the data passed to the callback function.
  70.     CallBackData3 = (pCHAR)malloc(100 * sizeof(CHAR));
  71.     if (CallBackData3 == NULL)
  72.     {
  73.         CloseDbAndExit(&hDb);
  74.         Screen("\r\n*** End of Example ***");
  75.         return;
  76.     }
  77.  
  78.     // Register the callback.
  79.     rslt = DbiRegisterCallBack(NULL, cbDBASELOGIN, (UINT32) CallBackData3,
  80.                                sizeof(CBLoginDesc), &CbInfo, CallBackFunc3);
  81.     if(ChkRslt(rslt, "RegisterCallback") != DBIERR_NONE)
  82.     {
  83.         free(CallBackData3);
  84.         CloseDbAndExit(&hDb);
  85.         Screen("\r\n*** End of Example ***");
  86.         return;
  87.     }
  88.  
  89.     Screen("\r\n    Open the %s table...", szTblName);
  90.     rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
  91.                         NULL, NULL, 0, dbiREADONLY, dbiOPENSHARED,
  92.                         xltFIELD, FALSE, NULL, &hCur);
  93.     ChkRslt(rslt, "OpenTable");
  94.  
  95.     if (hCur)
  96.     {
  97.         Screen("    Display the Table...");
  98.         DisplayTable(hCur, uNumOfRecs);
  99.  
  100.         Screen("\r\n    Close the %s table...", szTblName);
  101.         rslt = DbiCloseCursor(&hCur);
  102.         ChkRslt(rslt, "CloseCursor");
  103.     }
  104.  
  105.     // Unregister the callback by passing in NULL for the function.
  106.     rslt = DbiRegisterCallBack(NULL, cbINPUTREQ, NULL, 0, NULL, NULL);
  107.     if (ChkRslt(rslt, "RegisterCallBack") != DBIERR_NONE)
  108.     {
  109.         free(CallBackData3);
  110.         CloseDbAndExit(&hDb);
  111.         Screen("\r\n*** End of Example ***");
  112.         return;
  113.     }
  114.  
  115.     free(CallBackData3);
  116.  
  117.     Screen("\r\n    Close the database and exit IDAPI...");
  118.     CloseDbAndExit(&hDb);
  119.  
  120.     Screen("\r\n*** End of Example ***");
  121.  
  122. }
  123.  
  124. //======================================================================
  125. //  Name:   CallBackFunc3(ecbType, iClientData, pCbInfo)
  126. //
  127. //  Input:  ecbType     - Callback type
  128. //          iClientData - Pointer to client information that is passed into
  129. //                        the callback function
  130. //          pCbInfo     - The callback structure that holds the information
  131. //                        about the current state
  132. //
  133. //  Return: The action that should be taken
  134. //
  135. //  Description:
  136. //          This function will be called from the BDE during the process
  137. //          of opening the table.
  138. //======================================================================
  139. #ifdef __BORLANDC__
  140. #pragma argsused
  141. #endif
  142. CBRType DBIFN
  143. CallBackFunc3 (CBType ecbType, UINT32 iClientData, pVOID pCbInfo)
  144. {
  145.     CBLoginDesc *eCBInputDesc; // Variable to contain passed-in
  146.                                //   information
  147.  
  148.     switch (ecbType)
  149.     {
  150.         // In case this is a restructure progress callback, display the
  151.         //   information.
  152.         case cbDBASELOGIN:
  153.  
  154.             eCBInputDesc = (CBLoginDesc far *)pCbInfo;
  155.  
  156.             strcpy(eCBInputDesc->szUserName, "TEST");
  157.             strcpy(eCBInputDesc->szGroupName, "TEST");
  158.             strcpy(eCBInputDesc->szUserPassword, "TEST");
  159.             break;
  160.  
  161.         default:
  162.             Screen("### In the callback function");
  163.     }
  164.  
  165.     return cbrCHKINPUT;
  166.  
  167. }
  168.