Microsoft Visual FoxPro 8.0 Service Pack 1 Readme

This Service Pack is an update for the released version of Microsoft Visual FoxPro 8.0. It addresses a number of known product issues.

This Readme contains last minute notes from the Visual FoxPro product team. For more information about Visual FoxPro, see the Visual FoxPro Home Page at http://msdn.microsoft.com/vfoxpro.


Installing Visual FoxPro 8.0 Service Pack 1

Note  You must have Visual FoxPro 8.0 installed before installing Visual FoxPro 8.0 Service Pack 1. The Service Pack will install only with the final release version of Visual FoxPro 8.0. You cannot update an existing Beta version.

To install the Service Pack

1.      For reference during installation, print this Readme.

2.      On the Microsoft Visual FoxPro 8.0 Service Pack 1 download page, click the Download icon.

3.      Accept the license agreement. This step is required for downloading the Service Pack.

4.      Choose to run or save the package of compressed files on your computer.

If you choose Run this program from its current location (run), Setup is launched automatically.

If you choose Save this program to disk (save), locate the VFP80SP1.EXE file where you saved it, and double-click it to launch the Service Pack setup.

5.      Follow the instructions on your screen to complete the installation.

 


Files Modified and Added in Visual FoxPro 8.0 Service Pack 1

The following files have been updated for Service Pack 1:

VFP8.EXE     
VFP8R.DLL
VFP8T.DLL
VFPOLEDB.DLL
RIBUILDR.APP
REDIST.TXT
TASKPANE.APP
VFP8ENU.DLL
VFP8CHT.DLL
VFP8CHS.DLL
VFP8KOR.DLL
VFP8RENU.DLL
VFP8RCHS.DLL
VFP8RCHT.DLL
VFP8RCSY.DLL
VFP8RDEU.DLL
VFP8RESN.DLL
VFP8RFRA.DLL
VFP8RKOR.DLL
VFP8RRUS.DLL
VFP8Runtime.MSM
VFPOLEDB.MSM
VFP8RCHS.MSM
VFP8RCHT.MSM
VFP8RCSY.MSM
VFP8RDEU.MSM
VFP8RESN.MSM
VFP8RFRA.MSM
VFP8RKOR.MSM
VFP8RRUS.MSM


Issues Addressed in Service Pack 1

The following list contains issues in Visual FoxPro 8.0 that are fixed in Service Pack 1:

COM

·         Automation - Passing array by reference to ADO RecordSet AddNew produces the error, "The class file () associated with this field cannot be found - class association cleared".

·         Servers - When calling a method from a second server instantiated in single MTDLL under COM+, "Unknown name" error occurs.

·         Servers - Error with COM Codebook application in COM+ package.

·         Servers - Returning an untyped member array fails.

Classes

·         Collection - Calling AddProperty method of an item added to a collection causes procedure to return an object reference.

·         Combobox - Selection does not work correctly with a row source exceeding approximately 512 items.

·         Combobox - Value with an ampersand (&) adds a second ampersand to the displayed value.

·         Editbox - C5 fatal exception error occurs when refreshing an edit box with a character field as the control source.

·         Form - Error occurs at design time and run time if a property value references the method of an object not in scope.

·         Form - F5 does not trigger a form's KeyPress event if the form's Closable Property is set to .F.

·         Form - Control menu has incorrect hotkeys under Windows NT 4.0.

·         Grid – Fatal exception occurs when a Column contains a Container object.

·         Grid - Columns display improperly when RightToLeft property is set to .T. at design time and run time.

·         Grid - HighlightForeColor property appears white when set to black.

·         Grid - AllowCellSelection property set to .F. disables command button's Cancel property.

·         Grid – With a CursorAdapter object, an error is shown twice and the form closes unexpectedly.

·         Grid - Fatal exception occurs when showing a grid with a few text columns if Active Accessibility is enabled (OBJ_SHOW).

·         Grid - Not refreshed if on a nonactive page of a page frame.

·         Grid - Inconsistent MouseUp event behavior with click or double-click on header separator line with AllowAutoColumnFit property setting.

·         Header - A programmatically defined header class in an .EXE file is not found unless the .PRG file containing the definition is in the same folder with .EXE.

·         Label - Setting Caption property to a built-in property with a blank value, for example, .Caption = '=thisform.tag', produces error "There is not enough memory to complete this operation".

·         Label - When a label is resized, error "There is not enough memory to complete this operation" occurs and Visual FoxPro disappears.

·         Listbox - Memory leak occurs when RowsourceType property is set to 8.

·         Pageframe - Fatal exception occurs when closing a form after clicking page with PageOrder property set.

·         Pageframe - When a page frame's TabOrientation property is set to 2, pressing the arrow keys to move between page tabs on a Themed form causes a memory leak, and Visual FoxPro ultimately crashes.

·         Textbox - "Not a character expression" error occurs when changing a text box value where an array element is set as the control source.

·         XMLAdapter - Ignores XMLNamespace property unless XMLName property is not empty and fails to parse XML properly.

·         Misc - AddProperty method sets the value of the existing property to .F. when a new value is not passed.

·         Misc - "Variable not found" or "data type is invalid for this property" error occurs when Caption property references a variable that is not in scope.

·         Misc - A caption set to an empty string, for example, ="", shows the object name as the caption rather than a blank caption.

·         Misc - Fatal exception occurs when dimensioning an object array property to more than 32,767 elements.

·         Misc - Fatal exception occurs when adding custom FontBold and FontItalic properties and then setting them in the Properties window.

·         Misc - Fatal exception occurs when redefining a released variable in the Destroy method.

·         Misc - Fatal exception (buffer overrun) error occurs when editing a subclassed method with a parameter list over 256 characters.

Data/Engine

·         Auto Increment - Not working properly with APPEND FROM.

·         CursorAdapter – Add functionality to handle update conflict in CursorAdapter.

·         CursorAdapter - If ODBC driver or OLE DB Provider does not support batched execution, non-batched update fails when UpdateType property is set to 2.

·         CursorAdapter – For ADO, fails to update .MDB with zero-length, null, or longer than 255 memo fields.

·         CursorAdapter – For ADO, a failure to update backend table in a TABLEUPDATE( ) function call causes subsequent TABLEUPDATE( ) function to fail.

·         CursorAdapter - When OLE DB Provider fails to populate Parameters collection, fails to pass an empty string as a parameter for ADODB.Command object.

·         CursorAdapter - It is possible to call TABLEREVERT( ) function while TABLEUPDATE( ) function is being executed.

·         CursorAdapter - TABLEUPDATE( ) function does not commit insert into local cursor if Buffering is set to 5 and record is changed in AfterInsert event.

·         CursorAdapter - Fatal error <ErrorNumber> while attempting to report error <ErrorNumber> with error, or issuing ERROR command in CursorAdapter method in a runtime application.

·         CursorAdapter – ADO fetch process puts table buffer into incorrect state.

·         Engine - "Index does not match the table" error occurs on a table-buffered cursor with GO TOP after BEGIN TRANS and ROLLBACK.

·         Engine - "Record is not in index" error occurs using SCAN, or while skipping through records.

·         Engine - "Table has no index order set" error occurs with an opened table-buffered cursor containing a record whose fields have been altered.

·         Engine - SEEK command with ORDER DESCENDING clause does not navigate to correct record with SET NEAR ON.

·         Engine - SEEK command finds old and new data with optimistic table buffering.

·         Engine - "Index does not match the table...(Error 114)" occurs when calling TABLEUPDATE( ) function on a table-buffered cursor with buffered changes and using REINDEX command.

·         Engine - Memory leak occurs when passing parameters by reference with SQLEXEC( ) function.

·         Engine - Memory leak occurs after SQL INSERT or SQL UPDATE causes errors.

·         Engine - SQLGETPROP( ) function has memory leak.

·         Engine - Fatal exception occurs when calling SQL INSERT in the middle of a transaction.

·         Engine - Calling SQLSTRINGCONNECT( ) function without parameters reports an error instead of showing a connection dialog box as it does in Visual FoxPro 7.0.

·         Engine - SQL Pass-Through Asynchronous Batch mode fetches all result sets at once.

·         Engine - COPY TO command with more than 255 fields causes fatal exception to occur or reports misleading error.

·         Engine - REQUERY( ) function on parameterized view fails when preceded by equal sign (=).

·         Engine - After calling TABLEUPDATE( ) and ROLLBACK command in local view, "Index does not match the table" error occurs on GOTO TOP command.

·         ODBC - Invalid error message appears when trying to set an invalid property in SQL Server.

·         ODBC - Connection is not disconnected when idle timeout has elapsed.

·         ODBC - Passing large variable to SQL Server ODBC Driver can cause a fatal exception.

·         ODBC - Shared connection fails to pass parameter or fails to execute in asynchronous mode.

·         SET TABLEVALIDATE - SET TABLEVALIDATE TO sets TABLEVALIDATE setting to incorrect value.

·         SET TABLEVALIDATE - Add new bit to suppress error "File is in use" error for nLevel set to 1.

·         SET TABLEVALIDATE - No error occurs when adding a record with SET TABLEVALIDATE set to 2 and record count is less than it should be. New record overrides existing data.

·         SQL - UPDATE and DELETE are not Rushmore-optimized if target table has table buffered changes.

·         SQL - Error "Fields are incompatible" occurs using SELECT ... UNION with Fox 2.x table.

·         SQL - JOIN syntax can sometimes return incorrect results.

·         SQL - INSERT INTO ... SELECT ... FROM ... WHERE ... does not respect WHERE clause.

·         SQL - CREATE/REMOVE TABLE in DBC fails in multi-user scenario.

·         SQL - Changes in error message and number with unbalanced INSERT INTO ... SELECT FROM statements.

IDE

·         _SCREEN - Fatal exception occurs when minimizing then restoring IDE after adding and releasing hook on _SCREEN.Resize event.

·         Debugger - Fatal exception occurs after changing value in Locals window for the property of a closed modal form.

·         Debugger - If Call Stack or Locals window is not open, fatal exception occurs after resuming in the Trace window.

·         Debugger - Fatal exception occurs after resuming with a large array in the Watch window.

·         Debugger - Fatal exception occurs when pasting expression into Watch window.

·         Editor - Fatal exception occurs when choosing View Definition or Look Up Reference from the context menu when editing a stored procedure.

·         Editor - Fatal exception occurs when commenting code from the context menu.

·         Menus - Fatal exception occurs on PUSH MENU, POP MENU, or SET SYSMENU TO DEFAULT command after modifying report.

·         Menus - Fatal exception occurs when calling SET SYSMENU TO DEFAULT after closing debugger.

·         Menus - Fatal exception occurs when calling SET SYSMENU SAVE with Report Designer open.

·         Options Dialog - Search path set on the Files Tab in the Options dialog box and saved as the default is not persisted in later Visual FoxPro sessions.

·         Report Designer - Close box does not appear under Windows NT 4.0 when preview window is maximized.

·         RI Builder - Generates a "Missing expression" error.

·         Task Pane - Fatal exception occurs when Community pane cannot connect to a Web service when using a startup program.

·         Task Pane - Community pane fails to connect if IE is configured to use proxy.

·         Toolbars - Black and white toolbars can cause a fatal exception to occur.

OLE DB Provider

·         Command execution is serialized across all processes.

·         IDBCreateSessionImpl::CreateSession does not check return value from IID_IObjectWithSite::SetSite and causes a fatal exception to occur.

·         InterlockedCompareExchange and InterlockedExchangeAdd do not use multithreaded protection.

·         CFGInitFailed() in Visual FoxPro OLE DB Provider (VFPOLEDB.dll) shows MessageBox.

·         Thread safe improvements for the Visual FoxPro OLE DB Provider.

·         Make OLE DB Provider read ENGINEBEHAVIOR and TABLEVALIDATE settings from CONFIG.FPW.

·         Memory leak in VFPOLEDB.dll.

·         SET ENGINEBEHAVIOR affects all connections for the same client.

Other

·         Fatal exception error occurs when program cache is filled.

·         Fatal exception dialog box can appear multiple times with some crashes.

·         SET NOTIFY CURSOR OFF makes _TALLY behave as if additive.

·         If InstallShield Express setup project contains both Visual FoxPro 7.0 and 8.0 Merge Modules (MSM), error message occurs when building setup.

·         "Array dimensions are invalid" error occurs when accessing array row greater than 4,906.


Improvements in Service Pack 1

Visual FoxPro 8.0 Service Pack 1 includes improvements in the following areas:

·         New properties to better handle update conflicts in the CursorAdapter Class.

·         Additional options for the SET TABLEVALIDATE command.

New CursorAdapter Functionality

Visual FoxPro 8.0 Service Pack 1 contains additional properties for the CursorAdapter class to better handle update conflicts. These include the ConflictCheckType and ConflictCheckCmd properties.

ConflictCheckType Property

The ConflictCheckType property specifies how the conflict checks are handled during an update or delete operation. Read/write at design time and run time.

CursorAdapter.ConflictCheckType [ = nValue]

Parameters

nValue

Specifies a value for determining how conflict checks are handled. The following table lists the values for nValue.

 

nValue

Description

0

Do not perform check. (Default)

1

In a single row update mode, check for update conflicts during a SQL UPDATE or DELETE operation. If conflict occurs, specifically, when less than one record is affected by any command specified by UpdateCmd or DeleteCmd property, return error "Update conflict (Error 1585)".

2

In a single row update mode, check for key uniqueness during a SQL UPDATE or DELETE operation. If more than one record is affected by any command specified by the UpdateCmd or DeleteCmd property, return message "Warning: The key defined by the KeyField property for table "alias" is not unique. (Error 1495)"

3

Perform checks as specified by setting 1 and 2.

4

Append custom command specified by ConflectCheckCmd property to the commands in the UpdateCmd and DeleteCmd properties.

 

Remarks

·         ConflictCheckType and ConflictCheckCmd are used for native, ODBC, and ADO data sources. When using ADO, the CursorAdapter should use an ADO Command object for the SQL UPDATE or DELETE operation. Otherwise, Visual FoxPro disregards ConflictCheckType and ConflictCheckCmd.

·         When performing a batched TABLEUPDATE( ) operation, Visual FoxPro disregards settings 1, 2, and 3 for ConflictCheckType.

·         It is recommended that you do not use settings 1, 2, and 3 if the UpdateCmd and DeleteCmd properties contain more than one command. In this scenario, the CursorAdapter behavior depends on the ODBC driver or OLE DB Provider and might yield unexpected results.

·         Settings 1, 2, and 3 for ConflictCheckType might fail if the ODBC driver or OLE DB Provider is unable to provide required functionality or if the functionality is disabled due to driver, provider, or backend configuration. For example, SET NOCOUNT ON in SQL Server disables the functionality and prevents the CursorAdapter from performing updates if ConflictCheckType is set to 1, 2, or 3.

ConflictCheckCmd Property

The ConflictCheckCmd property specifies a string reference for a custom command when ConflictCheckType property is set to 4. Read/write at design time and run time.

CursorAdapter.ConflictCheckCmd [ = cValue]

Parameters

cValue

Specifies a custom command string reference to append to the commands specified by the UpdateCmd and DeleteCmd properties for checking update or delete conflicts. The default value for cValue is an empty string ("").

Remarks

See the Remarks section for ConflictCheckType.

Example

SQL Server: ConflictCheckCmd="IF @@ERROR=0 AND @@ROWCOUNT!=1 RAISERROR (' Update conflict or non-unique key.', 16, 1)"

Native: ConflictCheckCmd="CheckConflict()"

FUNCTION CheckConflict()

   IF _tally<1

      ERROR(1585)

   ELSE

      IF _tally>1

         ERROR(1495)

      ENDIF

   ENDIF

ENDFUNC

Improved SET TABLEVALIDATE Functionality

Visual FoxPro 8.0 Service Pack 1 contains additional options for the SET TABLEVALIDATE command to better allow you to control table validation during certain data operations. Updates to this command that are new to Service Pack 1 are detailed in red.

SET TABLEVALIDATE TO [nLevel]

Parameters

nLevel

Specifies the table validation level as a sum of the specified bit values described in the following table. If you omit nLevel, table validation is set to level 3 (default).

 

Bit

Bit values (additive)

Description

0

1

When a table is opened, the record count is validated.

Note   The table (.dbf) header is locked during validation. This can result in decreased scalability when tables are opened as shared, for example, by calling USE TableName SHARED, or when calling a SQL SELECT, UPDATE, INSERT, or DELETE command for an unopened table, and SET EXCLUSIVE is set to OFF.

1

2

When records are appended (or inserted) and written to disk, the record count is validated.

2

4

Suppress "File is in use (Error 3)" error if header cannot be locked for an open table operation. Requires the first bit to be set (perform record count validation when table is opened).

The USE command, which opens the table, attempts to lock the header only once.  If the header is locked, Visual FoxPro performs a strict header check, similar to setting the SET TABLEVALIDATE command to 1. Otherwise, Visual FoxPro suppresses reporting the "File is in use" error and performs an older Visual FoxPro 7.0-style header check.

3

8

Check table (.dbf) header before append operation is saved to disk and the header is modified. This affects insert operations.

 

Remarks

·         If SET TABLEVALIDATE is set to 0, no table validation is performed.

·         SET TABLEVALIDATE does not have any repair functionality. It performs only integrity checks as specified by nLevel.

·         SET TABLEVALIDATE does not affect temporary files or cursors.

·         If a table is opened exclusively, Visual FoxPro disregards the 4th bit setting (Check table (.dbf) header before append operation …).

IntelliSense Updates

To update your IntelliSense file, you can use the following script by pasting the code into a new program (.prg) file and running the file:

* Script for updating IntelliSense FoxCode table with new SET

* TABLEVALIDATE settings. Make sure the script appears in your PRG file as

* it does below. Copying the text from your Web browser might add extra

* empty lines (spacing within TEXT...ENDTEXT is critical).

LOCAL lcSaveArea,lcTipStr

lcSaveArea=SELECT()

SELECT 0

USE (_FOXCODE) SHARED

TEXT TO lcTipStr NOSHOW

SET TABLEVALIDATE TO [nLevel]

 

nLevel Values (additive):

 

1 - When a table is opened, the record count is validated. *

2 - When records are appended (or inserted) and written to disk, the record count is validated.

4 - Suppress “File is in use” error (Error 3) if header cannot be locked for table open operation. **

8 - Check DBF header before append is saved to disk and the header is modified. This affects insert operations.

 

Note: No table validation is performed for value of 0.

 

* The table (dbf) header is locked during validation, which can impact scalability for shared/multi-user scenarios.

** Requires nLevel value of 1 to also be set.

 

ENDTEXT

 

UPDATE (_FOXCODE) SET tip = lcTipStr WHERE UPPER(ALLTRIM(Expanded))=="SET TABLEVALIDATE"

USE

SELECT (lcSaveArea)

New Task Pane Proxy Server Functionality

The Task Pane Manager now contains options to control Proxy Server settings needed by Task Panes that access content through XML Web services. If you click on the Options button and select the Task Pane Manager item, you will see a new Proxy Server options page. This page contains the following options:

·         Do not use a proxy server   Do not set explicit proxy server settings for XML Web service calls made to retrieve content for certain Task Panes, for example, the Community Task Pane.

·         Use browser proxy settings   Use proxy server settings specified by your browser. With Internet Explorer, this setting is available by clicking on the LAN Settings button on the Connections tab of the Internet Options dialog.

·         Use the following proxy settings   When selected, the following options for controlling proxy server settings manually are available:

·         Address   Specifies the address of the proxy server, for example, http://myproxyserver, used to connect to the Internet.

·         Port   Specifies the port of proxy server, for example, 80, used to connect to the Internet, for example, 80.

·         User   Specifies an optional user name setting, if you are required to log in.

·         Password   Specifies an optional password setting, if you are required to log in.

Miscellaneous Behavior Changes

·         Using the APPEND FROM command with an autoincrementing field now generates new values for this field. New values are automatically generated in sequential order based on the last generated value. This occurs regardless of whether the APPEND FROM or APPEND FROM ARRAY command includes values specified for the Auto Increment field.

·         A SEEK command with an ORDER parameter now uses the default ASC or DESC keyword for the index tag. The prior behavior was unpredictable and depended on the prior setting of the SEEK command's DESCENDING or ASCENDING keyword.

·         When a DBC table field that has a Caption expression is dragged onto a form, the resulting Label caption now contains the following expression:

=Iif(Used(<tablename>) and !Empty(Field(<fieldname>, <tablename>, 1)),Field(<fieldname>, <tablename>, 1), <fieldname>)

In the Visual FoxPro 8.0 RTM release, the generated expression was:

=FIELD( <tablename>, <fieldname>, 1)


For additional information about Visual FoxPro, see the original product readme on your Visual FoxPro 8.0 product CD or visit the Visual FoxPro Web site at http://msdn.microsoft.com/vfoxpro.