// BDE - (C) Copyright 1995 by Borland International // search.c #include "snipit.h" static const char szTblName[] = "customer"; static const char szTblType[] = szPARADOX; //======================================================================== // Function: // SearchTable(); // // Description: // This sample code will open a customer table and search it // for a key value. //======================================================================== void TableSearch (void) { DBIResult rslt; // Value returned from IDAPI // functions hDBIDb hDb; // Handle to the database hDBICur hCur; // Handle to the table CURProps TblProps; // Table properties pBYTE pBuf = NULL; // Pointer to the record buffer FLOAT fCustNum = 3052.00; // FLOAT value to seach for CHAR szKey[] = "Sarasota"; // CHAR value to search for Screen("*** Locating A Key Value In A Table ***\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, "SetDirectorry"); Screen(" Opening the Customer table..."); rslt = DbiOpenTable(hDb, (pCHAR) szTblName, (pCHAR) szTblType, NULL, NULL, NULL, dbiREADWRITE, dbiOPENSHARED, xltFIELD, FALSE, NULL, &hCur); if (ChkRslt(rslt, "OpenTable") != DBIERR_NONE) { CloseDbAndExit(&hDb); Screen("\r\n*** End of Example ***"); return; } // Allocate a record buffer. rslt = DbiGetCursorProps(hCur,&TblProps); ChkRslt(rslt, "GetCursorProps"); pBuf = (pBYTE) malloc(TblProps.iRecBufSize); if (pBuf == NULL) { Screen(" Error - Out of memory"); CloseDbAndExit(&hDb); Screen("\r\n*** End of Example ***"); return; } rslt = DbiPutField(hCur, 1, pBuf, (pBYTE) &fCustNum); ChkRslt(rslt, "PutField"); // Example 1: Search for full key value using a record buffer. Screen(" Searching for the record where the 'Customer Number' field" " = %f...", fCustNum); rslt = DbiSetToKey(hCur, keySEARCHEQ, FALSE, 0, 0, pBuf); if (rslt == DBIERR_NONE) { // Cursor is left on the crack before the record. Screen("\r\n Record was found:"); DisplayNextRecord(hCur); } else { Screen("\r\n Record was not found..."); ChkRslt(rslt, "SetToKey"); } // Example 2: Search on a partial key value using a direct buffer. Screen("\r\n Switching to the \"Place\" index..."); rslt = DbiSwitchToIndex(&hCur, "Place", NULL, NULL, FALSE); ChkRslt(rslt, "SwitchToIndex"); Screen(" Searching for the record using the \"Place\" index" " where\r\n the 'City' field = %s...",szKey); rslt = DbiGetRecordForKey(hCur, TRUE, 0, strlen(szKey), (pBYTE) szKey, NULL); if (rslt == DBIERR_NONE) { // Cursor is left on the record. Screen("\r\n Record was found:"); DisplayCurrentRecord(hCur); } else { Screen("\r\n Record was not found... "); ChkRslt(rslt, "GetRecordForKey"); } Screen("\r\n Close the table..."); rslt = DbiCloseCursor(&hCur); ChkRslt(rslt, "CloseCursor"); free(pBuf); Screen(" Close the database and exit IDAPI..."); CloseDbAndExit(&hDb); Screen("\r\n*** End of Example ***"); }