home *** CD-ROM | disk | FTP | other *** search
- // BDE - (C) Copyright 1995 by Borland International
-
- // secdesc.c
- #include "snipit.h"
-
- static DBIResult AddRecord(hDBICur hCur, DFLOAT fStatus, DFLOAT fOrder,
- CHAR *szDateSent, CHAR *szDateDelivered);
-
- static const char szTblName[] = "SecDesc";
- static const char szTblType[] = szPARADOX;
-
- // Field descriptor used in creating a table.
- static SNIPFAR FLDDesc fldDesc[] = {
- { // Field 1 - AUTOINC
- 1, // Field number
- "Status ID", // Field name
- fldFLOAT, // Field type
- fldUNKNOWN, // Field subtype
- 0, // Field size
- 0, // Decimal places ( 0 )
- // computed
- 0, // Offset in record ( 0 )
- 0, // Length in bytes ( 0 )
- 0, // For NULL bits ( 0 )
- fldvNOCHECKS, // Validity checks ( 0 )
- fldrREADWRITE // Rights
- },
- { // Field 2 - ALPHA
- 2, "Order No", fldFLOAT, fldUNKNOWN,
- 0, 0, 0, 0, 0,
- fldvNOCHECKS, fldrREADWRITE
- },
- { // Field 4 - DATE
- 3, "Date Sent", fldDATE, fldUNKNOWN,
- 0, 0, 0, 0, 0, fldvNOCHECKS, fldrREADWRITE
- },
- { // Field 4 - DATE
- 4, "Date Received", fldDATE, fldUNKNOWN,
- 0, 0, 0, 0, 0, fldvNOCHECKS, fldrREADWRITE
- }
- }; // Array of field descriptors.
-
- // The number of fields in the table.
- static const UINT16 uNumFields = sizeof(fldDesc) / sizeof(fldDesc[0]);
-
- static SNIPFAR SECDesc secDesc[] = {
- {
- 1, // Number to identify descriptor
- prvREADONLY, // Table privileges
- NOFAMRIGHTS, // Family rights
- "test", // Password
- { prvNONE, prvREADONLY, prvREADONLY, prvREADONLY } // Field Level Priviledges
- }
- };
-
- // Define the operation on the table: add the security descriptor to the
- // table.
- static CROpType crOpType[] = { crADD };
-
- // The number of security descriptors in the table.
- static const UINT16 uNumDescs = sizeof(secDesc) / sizeof(secDesc[0]);
-
- //=====================================================================
- // Function:
- // SecDesc();
- //
- // Desccription:
- // This function shows how to use auxiliary passwords with a
- // Paradox table.
- //=====================================================================
- void
- SecDesc (void)
- {
- DBIResult rslt; // Return value from IDAPI functions
- hDBIDb hDb; // Handle to the database
- hDBICur hCur; // Handle to the table
- CRTblDesc TblDesc; // Create table descriptor
- UINT16 uDispNumRecs = 10; // Number of records to add and
- // display
- CHAR szPassword[] = "MyPass"; // Password for the table
-
- Screen("*** Security Descriptor 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(" Initializing the table descriptor...");
- memset((void *)&TblDesc, 0, sizeof(CRTblDesc));
- lstrcpy(TblDesc.szTblName, szTblName);
- lstrcpy(TblDesc.szTblType, szTblType);
- TblDesc.iFldCount = uNumFields;
- TblDesc.pfldDesc = fldDesc;
- TblDesc.bProtected = TRUE;
- strcpy(TblDesc.szPassword, szPassword);
- TblDesc.iSecRecCount = uNumDescs;
- TblDesc.pecrSecOp = crOpType;
- TblDesc.psecDesc = (SECDesc *)secDesc;
-
- // Add the master password to the session. This is needed
- // before the create in case the table needs to be overwritten.
- // The master password is also required in order to open the table.
- rslt = DbiAddPassword(szPassword);
- ChkRslt(rslt, "AddPassword");
-
- Screen(" Creating the %s table...", szTblName);
- rslt = DbiCreateTable(hDb, TRUE, &TblDesc);
- if (ChkRslt(rslt, "CreateTable") != DBIERR_NONE)
- {
- CloseDbAndExit(&hDb);
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- Screen(" Open the %s table with the master password...",
- szTblName);
- rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
- NULL, NULL, 0, dbiREADWRITE, dbiOPENSHARED,
- xltFIELD, FALSE, NULL, &hCur);
- if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE)
- {
- rslt = DbiDeleteTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType);
- ChkRslt(rslt, "DeleteTable");
- CloseDbAndExit(&hDb);
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- Screen("\r\n Add five records to the table...");
- AddRecord(hCur, 1, 1004, "07/28/1994", "08/12/1994");
- AddRecord(hCur, 2, 1005, "08/02/1994", "08/12/1994");
- AddRecord(hCur, 3, 1006, "08/04/1994", "08/12/1994");
- AddRecord(hCur, 4, 1007, "09/28/1994", "11/12/1994");
- AddRecord(hCur, 5, 1008, "10/28/1994", "11/12/1994");
-
- Screen("\r\n Close the table...");
- rslt = DbiCloseCursor(&hCur);
- ChkRslt(rslt, "CloseCursor");
-
- // Remove the master password from the session.
- rslt = DbiDropPassword(szPassword);
- ChkRslt(rslt, "DropPassword");
-
- // Add the auxiliary password to the session.
- rslt = DbiAddPassword("test");
- ChkRslt(rslt, "AddPassword");
-
- // Open the table.
- // Note that the table has to be opened read-only as the
- // security descriptor only supports read operations.
- Screen("\r\n Open the %s table with the auxiliary password...",
- szTblName);
- rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType,
- NULL, NULL, 0, dbiREADONLY, dbiOPENSHARED,
- xltFIELD, FALSE, NULL, &hCur);
- if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE)
- {
- rslt = DbiDeleteTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType);
- ChkRslt(rslt, "DeleteTable");
- CloseDbAndExit(&hDb);
- Screen("\r\n*** End of Example ***");
- return;
- }
-
- // Go to the beginning of the table.
- rslt = DbiSetToBegin(hCur);
- ChkRslt(rslt, "SetToBegin");
-
- Screen(" Display the \"%s\" table...", szTblName);
- Screen(" Notice that the \"Status ID\" field is blank:"
- " the auxiliary password does\r\n not have access to"
- " the \"Status ID\" field");
- DisplayTable(hCur, uDispNumRecs);
-
- Screen("\r\n Close the table...");
- rslt = DbiCloseCursor(&hCur);
- ChkRslt(rslt, "CloseCursor");
-
- Screen(" Need to add the master password in order to delete"
- " the table.\r\n The auxiliary password does not have"
- " sufficient rights");
- rslt = DbiAddPassword(szPassword);
- ChkRslt(rslt, "AddPassword");
-
- Screen(" Deleting the table...");
- rslt = DbiDeleteTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType);
- ChkRslt(rslt, "DeleteTable");
-
- Screen(" Close the database and exit IDAPI...");
- CloseDbAndExit(&hDb);
-
- Screen("\r\n*** End of Example ***");
- }
-
- //=====================================================================
- // Function:
- // AddRecord(hCur, fStatus, fOrder, *DateOrdered, *DateDelivered)
- //
- // Input: hCur - Cursor to the table
- // fStatus - Value to write to the Status ID field
- // fOrder - Value to write to the Order ID field
- // DateSent - Value to write to the Date Sent field
- // DateDelivered - Value to write to the Date Received field
- //
- // Return: Success of the function
- //
- // Description:
- // This function is used to add a record to the table.
- //=====================================================================
- DBIResult
- AddRecord (hDBICur hCur, DFLOAT fStatus, DFLOAT fOrder, CHAR *szDateSent,
- CHAR *szDateDelivered)
- {
- DBIResult rslt; // Return value from IDAPI functions
- pBYTE pRecBuf; // Record buffer
- CURProps TblProps; // The properties of the table
- UINT16 uMonth; // Contains the month portion of the
- // date
- UINT16 uDay; // Contains the day portion of the
- // date
- INT16 iYear; // Contains the year portion of the
- // date
- CHAR szDate[30]; // Pointer to be allocated from the
- // heap
- CHAR *pszTemp; // Temporary string used in parsing
- // the date
- DBIDATE Date; // Date structure, used in
- // DbiPutField
-
- // Allocate a record buffer.
- rslt = DbiGetCursorProps(hCur, &TblProps);
- ChkRslt(rslt, "GetCursorProps");
-
- pRecBuf = (pBYTE) malloc(TblProps.iRecBufSize * sizeof(pBYTE));
- if (pRecBuf == NULL)
- {
- Screen(" Error - Out of memory!");
- return DBIERR_NOMEMORY;
- }
-
- // Make sure we're starting with a clean record buffer.
- rslt = DbiInitRecord(hCur, pRecBuf);
- ChkRslt(rslt, "InitRecord");
-
- // Add the Status ID to the record buffer.
- rslt = DbiPutField(hCur, 1, pRecBuf, (pBYTE) &fStatus);
- ChkRslt(rslt, "PutField");
-
- // Add the Order ID to the record buffer.
- rslt = DbiPutField(hCur, 2, pRecBuf, (pBYTE) &fOrder);
- ChkRslt(rslt, "PutField");
-
- strcpy(szDate, szDateSent);
- pszTemp = strtok(szDate, "/");
- if (pszTemp)
- {
- uMonth = atoi(pszTemp); // uMonth set to 0 if invalid date.
- pszTemp = strtok(NULL, "/");
- if (pszTemp)
- {
- uDay = atoi(pszTemp); // uDay set to 0 if invalid date.
- pszTemp = strtok(NULL, "/");
- if (pszTemp)
- {
- iYear = atoi(pszTemp); // iYear set to 0 if
- // invalid date.
- }
- }
- }
-
- // Encode the date.
- rslt = DbiDateEncode(uMonth, uDay, iYear, &Date);
- ChkRslt(rslt, "DateEncode");
-
- // Put the data into the record buffer.
- rslt = DbiPutField(hCur, 3, pRecBuf, (pBYTE) &Date);
- ChkRslt(rslt, "PutField");
-
- // Need to convert the string to a Date structure.
- strcpy(szDate, szDateDelivered);
- pszTemp = strtok(szDate, "/");
- if (pszTemp)
- {
- uMonth = atoi(pszTemp); // uMonth set to 0 if invalid date.
- pszTemp = strtok(NULL, "/");
- if (pszTemp)
- {
- uDay = atoi(pszTemp); // uDay set to 0 if invalid date.
- pszTemp = strtok(NULL, "/");
- if (pszTemp)
- {
- iYear = atoi(pszTemp); // iYear set to 0 if
- // invalid date.
- }
- }
- }
-
- // Encode the date.
- rslt = DbiDateEncode(uMonth, uDay, iYear, &Date);
- ChkRslt(rslt, "DateEncode");
-
- // Put the data into the record buffer.
- rslt = DbiPutField(hCur, 4, pRecBuf, (pBYTE) &Date);
- ChkRslt(rslt,"PutField");
-
- // Insert the record into the table.
- rslt = DbiInsertRecord(hCur, dbiNOLOCK, pRecBuf);
- ChkRslt(rslt, "InsertRecord");
-
- free(pRecBuf);
-
- return rslt;
- }
-