FIX: DBF() & RECCOUNT() Return Wrong Info About SQL CursorID: Q117265 2.5x 2.6x | 2.5x 2.6x WINDOWS | MS-DOS kbprg kbfixlist kbbuglist The information in this article applies to:
SYMPTOMSUsing the RECCOUNT() or DBF() functions against a cursor returns information pertinent to the source data file instead of the currently selected cursor. CAUSEIf a WHERE clause is used that references a field that is used as a key field in a .CDX index tag, the DBF() and RECCOUNT() functions will return data about the source data file instead of the cursor. This is because, in this case, the SQL-SELECT performs a SET FILTER on the current table, and returns the filtered information. Use the _TALLY variable to return the number of records processed by the SQL-SELECT command. STATUSMicrosoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual FoxPro 3.0 for Windows. MORE INFORMATIONThis behavior will occur regardless of the status of the SET ORDER command. However, this behavior does NOT occur under Microsoft Windows NT. Steps to Reproduce ProblemIn the steps below, you will be using the CUSTOMER database (which contains 500 records) in the TUTORIAL subdirectory. Make certain that the .CDX file is active, and that it includes a tag built on CNO. 1. In the Command window, issue the following commands: CLEAR ALL USE <FoxPro_directory>\tutorial\customer.dbf SELECT * FROM customer WHERE customer.cno = 'A' Note that 29 records are selected. 2. In the Command window, issue the following command: ? DBF() Note that it returns the name of the source file, not the temporary cursor name. 3. In the Command window, issue the following command: ? RECCOUNT() Note that the RECCOUNT() of the source file, not the cursor, is returned. Note also that the status bar shows 500 records in the cursor even though the SELECT command reported that only 29 records were selected. For comparison, do the following: 1. In the Command window, issue the following command: CLEAR ALL 2. Remove the tag on the CNO field. 3. Repeat steps 1-3 above, but change the SELECT statement to: SELECT * FROM customer WHERE customer.cno = 'A' Note that the SELECT statement returns 29 records, ? DBF() returns the name of the temporary file (cursor), and ? RECCOUNT() returns 29. Additional reference words: VFoxWin fixlist3.00 FoxDos FoxWin 2.50 2.50a 2.50b 2.60 2.60a buglist2.50 buglist2.50a buglist2.50b buglist2.60 buglist2.60a KBCategory: kbprg kbbuglist KBSubcategory: FxprgGeneral Keywords : FxprgGeneral kbbuglist Version : 2.5x 2.6x | 2.5x 2.6x Platform : MS-DOS WINDOWS Solution Type : kbfix |
Last Reviewed: October 22, 1997 |