// BDE - (C) Copyright 1995 by Borland International // Range.c #include "snipit.h" static const char szTblName[] = "stock"; static const char szTblType[] = szPARADOX; //===================================================================== // Function: // Range(); // // Description: // This example shows how to limit the accessible records // within a table using ranges. //===================================================================== void Range (void) { DBIResult rslt; // Return value from IDAPI functions hDBIDb hDb; // Handle to the database hDBICur hCur; // Handle to the table CURProps TblProps; // Table properties pBYTE pRecBufLow; // Record buffer pBYTE pRecBufHigh; // Record buffer UINT32 uNumRecs = 0; // Number of records to display DFLOAT fLowRange; // Low value for the range DFLOAT fHighRange; // High value for the range Screen("*** Range Operations 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(" Open 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; } // Allocate space for the record buffer. rslt = DbiGetCursorProps(hCur, &TblProps); ChkRslt(rslt, "GetCursorProps"); pRecBufLow = (pBYTE) malloc(TblProps.iRecBufSize * sizeof(BYTE)); pRecBufHigh = (pBYTE) malloc(TblProps.iRecBufSize * sizeof(BYTE)); if ((pRecBufHigh == NULL) || (pRecBufLow == NULL)) { if (pRecBufHigh) free(pRecBufHigh); if (pRecBufLow) free(pRecBufLow); Screen(" Error - Could not allocate memory."); CloseDbAndExit(&hDb); Screen("\r\n*** End of example ***"); return; } fLowRange = 2315.0; // Lowest stock number to display. fHighRange = 5313.0; // Highest stock number to display. Screen("\r\n Change the range of the table: only display" " records\r\n which have a 'Stock No' between %.1f" " and %.1f", fLowRange, fHighRange); rslt = DbiPutField(hCur, 1, pRecBufLow, (pBYTE) &fLowRange); ChkRslt(rslt, "PutField"); rslt = DbiPutField(hCur, 1, pRecBufHigh, (pBYTE) &fHighRange); ChkRslt(rslt, "PutField"); rslt = DbiSetRange(hCur, FALSE, 0, 0, pRecBufLow, FALSE, 0, 0, pRecBufHigh, TRUE); ChkRslt(rslt, "SetRange"); Screen("\r\n Display the %s table...", szTblName); rslt = DbiSetToBegin(hCur); ChkRslt(rslt, "SetToBegin"); DisplayInMemoryTable(hCur, uNumRecs); Screen("\r\n Change the range of the table: no range set"); rslt = DbiResetRange(hCur); ChkRslt(rslt, "SetRange"); rslt = DbiSetToBegin(hCur); ChkRslt(rslt, "SetToBegin"); Screen(" Display the %s table...", szTblName); DisplayInMemoryTable(hCur, uNumRecs); Screen("\r\n Change to the secondary index on field two..."); rslt = DbiSwitchToIndex(&hCur, NULL, NULL, 2, FALSE); ChkRslt(rslt, "SwitchToIndex"); fLowRange = 4000.0; // Lowest vendor number to display. fHighRange = 6000.0; // Highest vendor number to display. Screen("\r\n Change the range of the table: only display records\r\n" " which have a Vendor No between %.1f and" " %.1f...", fLowRange, fHighRange); rslt = DbiPutField(hCur, 2, pRecBufLow, (pBYTE) &fLowRange); ChkRslt(rslt, "PutField"); rslt = DbiPutField(hCur, 2, pRecBufHigh, (pBYTE) &fHighRange); ChkRslt(rslt, "PutField"); rslt = DbiSetRange(hCur, FALSE, 0, 0, pRecBufLow, FALSE, 0, 0, pRecBufHigh, FALSE); ChkRslt(rslt, "SetRange"); Screen("\r\n Display the %s table...", szTblName); rslt = DbiSetToBegin(hCur); ChkRslt(rslt, "SetToBegin"); DisplayInMemoryTable(hCur, uNumRecs); free(pRecBufLow); free(pRecBufHigh); Screen("\r\n Close the %s table...", szTblName); rslt = DbiCloseCursor(&hCur); ChkRslt(rslt, "CloseCursor"); Screen(" Close the Database and exit IDAPI..."); CloseDbAndExit(&hDb); Screen("\r\n*** End of Example ***"); }