_______________________________________________
Microsoft Access for Windows 95 Readme File
		September 1995
_______________________________________________
(c) Copyright Microsoft Corporation, 1995

This document provides complementary or late-breaking information as a supplement to the standard Microsoft documentation.

________________________________________________
How to Use This Document
________________________________________________

To view the Readme file on screen in Windows Wordpad, maximize the Wordpad window. To wrap the text, click Options on the View menu, click the Text tab, and then click Wrap To Ruler.

To print the Readme file, open it in Windows Wordpad, Windows Write, Microsoft Word, or another word processor. Then select the entire document and format the text in 10-point courier before printing.

________________________________________________
CONTENTS

INSTALLATION

What's Not Included in a Typical Installation
Using the Custom Installation Option to Get Additional Expert Help 
   Information
Using Setup with Windows NT 3.51 or Later
Reinstalling Microsoft Access for Windows 95
Typical Installation Option May Generate Error Under Certain Conditions

GENERAL

Using the Find Dialog Box with a Lookup Field
Running Microsoft Access for Windows 95 on a Compressed Drive
Importing Text Data Using a Macro
Help Dialog Box Occasionally Disappears Behind Microsoft Access Window
Problems Running Visual Basic for Applications Help and Microsoft Access 
   95 Help Together
Using Help with Windows NT 3.51 or Later Without Service Pack 1

JET/ISAM/DAO

Nesting Limit to BeginTrans Method
Importing Small Values from Text Files
Exceeding the Server Lock Count on a Novell NetWare Server
Opening a Remote Microsoft Access 2.0 Database on a NetWare 3.11 Server

BRIEFCASE REPLICATION

Synchronization Failure Caused by Design Change Not Being Applied
Recommendations for Compacting a Design Master Database

CONVERSION AND COMPATIBILITY

Formatting Nulls and Zero-Length Strings
Shell Function Now Returns Long Data Type
Using the CompactDatabase Method to Convert a Database
Forms and Reports Based on Parameterized Crosstab Queries
Impact of Unicode on Visual Basic String Functions and Binary Data
Using the CurrentDb Function to Return a Reference to the Current 
   Database
Closing a Database Returned from DBEngine.Workspace(0).Databases(0)
Pointers to Forms/Reports When View Mode Is Changed
Converting Macros or Code That Calls the DoMenuItem Action
Converting Code That Uses Undeclared Arrays
Microsoft Access for Windows 95 No Longer Uses /Ini Command-Line Option
Converting Large Databases to Microsoft Access for Windows 95
Using OLE Automation to Open a Read-Only Database Created in a Previous 
   Version of Microsoft Access

PROGRAMMING AND VISUAL BASIC FOR APPLICATIONS

Renaming and Compacting a Database
Microsoft Access Properties Collection
Referring to a Replication ID Field in Code
Closing an Instance of Microsoft Access in Code
Running Procedures in a Referenced Database
Passing Variables to the Run Method
New AscW and ChrW Functions
Conversion of Hexadecimal Values to Prevent Sign Extension
Array Behavior Changes
Limitation of Line, Print, Circle, and PSet Methods in a With Statement
Additional Information on the End Statement
Difference Between What Len and LenB Return with User-Defined Types
ReDim Statement Acts as a Declaration
Conversion of Byte and String Types
Use of the FileAttr Function on 32-Bit Operating Systems
Closing the Default Workspace Closes the Current Database
Referring to Fields in a Recordset Object
Calling Methods of the Application Object from a Form Module
Running Visual Basic Help Code Examples
Passing a Control to a Procedure
Using the Save Action, Save Method, CopyObject Action, and CopyObject
   Method

DOCUMENTATION

Updates to Microsoft Access Help Topics
Updates to "Building Applications with Microsoft Access for Windows 95"
Updates to "Getting Results with Microsoft Access for Windows 95"

FILE LIST
_______________________________________________


INSTALLATION

What's Not Included in a Typical Installation
---------------------------------------------

The Typical installation option does not include the following: developer tools, Microsoft Paradox Driver, Microsoft SQL Server ODBC Driver, Microsoft Desktop ODBC Drivers, Visual Basic for Applications Help, DAO Help, SQL Help, and the Solutions and Orders sample applications.

Using the Custom Installation Option 
to Get Additional Expert Help Information
-----------------------------------------

If you use Visual Basic, Microsoft Graph, or the Calendar Control, note that the Typical installation option does not include all the Language Reference Help topics nor does it include the Help topics for Microsoft Graph and the Calendar Control. To get these additional Help topics, use the Custom installation option. Make sure the following options are selected: Help Topics to get all the Language Reference Help topics, Microsoft Graph 5.0 to get Microsoft Graph Help topics, and Calendar Control to get the Calendar Control Help topics.

Using Setup with Windows NT 3.51 or Later
-----------------------------------------

If you are installing Microsoft Access on a machine running Windows NT 3.51 or later, it's recommended that you install an updated version of a Windows NT 3.51 system file named WINSRV.DLL contained in Service Pack 1 for Windows NT 3.51. This Service Pack addresses some problems with the Help system on Windows NT 3.51. You can obtain the Service Pack from the following places:

CompuServe:

1. Log on to CompuServe and type the following commands:

      go microsoft
      7 (Microsoft Support Forums and Services)
      1 (US Product Support)
      8 (Microsoft Operating Systems)
      6 (Microsoft Windows NT Service Pack Download Area)

2. Download the latest Service Pack for Windows NT 3.51.

Internet:

* Type the following commands:

      ftp ftp.microsoft.com
      logon anonymous
      cd bussys/winnt/winnt-public/fixes/nt351
      bin
      get <latest Service Pack for Windows NT 3.51>

Reinstalling Microsoft Access for Windows 95
--------------------------------------------

If you reinstall Microsoft Access for Windows 95 using Setup, Microsoft Access is not completely installed. To work around this problem, delete the Microsoft Access folder before running the Setup program.

If you are running Microsoft Access from a network server or a CD-ROM drive and you run Setup again and then choose the Reinstall option, the setup attempt fails and you will not be able to start Microsoft Access. To work around this problem, uninstall Microsoft Access and then install it again.

Typical Installation Option May Generate Error Under Certain Conditions
-----------------------------------------------------------------------

If you have installed Microsoft Excel or Microsoft Office Standard Edition and have set them up to run from either a network server or a CD-ROM and you use the Typical option in the Microsoft Access Setup program to install Microsoft Access in the same main folder (by default, C:\MSOffice), the error message "Error creating 'ACCLINK.XLA'..." may be generated and Microsoft Access may not be completely installed. This problem occurs when you do not have write permission to the folder that contains Acclink.xla. 

To work around this problem, ignore the error message and continue running Setup. When Setup is finished running, copy the Acclink.xla file to your machine and register it with Microsoft Excel as an add-in. Or, if you are a network administrator installing from a network server, put the file in the Excel/Library folder.

This problem does not occur with Microsoft Office Professional Edition.


GENERAL

Using the Find Dialog Box with a Lookup Field
---------------------------------------------

If the Find dialog box (click Find on the Edit menu in Datasheet or Form view) doesn't find records that meet the criteria you specified, and you know the records exist, check whether the field you're searching in is a Lookup field. A Lookup field looks up values from another table and stores the references to values in the main table. If it is a Lookup field and the Match box in the Find dialog box is set to Whole Field or Start Of Field, you need to select the Search Field As Formatted check box in the Find dialog box in order for Microsoft Access to find the records.

Running Microsoft Access for Windows 95 on a Compressed Drive
-------------------------------------------------------------

If you run Microsoft Access for Windows 95 on a drive compressed with DriveSpace, you may notice a significant difference in performance.  For optimum performance, run Microsoft Access for Windows 95 on an uncompressed drive.

Importing Text Data Using a Macro
---------------------------------

To import a text file that does not contain field names into a database using the TransferText action of a macro, you must first create a custom import specification that denotes the field names.  To create the import specification, point to Get External Data on the File menu, click Import, and then select the text file you want to import.  Microsoft Access launches the Text Import Wizard.  Click Advanced on the wizard screen, and enter the names for the fields you are importing in the Field Name column in the Field Information table.  Click Save As to save your new import specification.  Then open the macro in Design view and set the Specification Name action argument to the name of the import specification.

Help Dialog Box Occasionally Disappears Behind Microsoft Access Window
----------------------------------------------------------------------

Occasionally, when you click the Help Topics button at the top of a Help topic to return to the Contents, Index, or Answer Wizard, the main Help dialog box will appear for a moment and then disappear behind the Microsoft Access window. If this happens, press ALT+TAB and select the Help icon to redisplay the Help dialog box. This happens more frequently if you're using Windows NT.

Problems Running Visual Basic for 
Applications Help and Microsoft Access 95 Help Together
-------------------------------------------------------

Using Microsoft Access Help and Visual Basic Help at the same time may cause unexpected behavior. If you experience problems, close Help in both applications and then reopen the Help file you want.

Using Help with Windows NT 3.51 or Later Without Service Pack 1
---------------------------------------------------------------

If you invoke the Answer Wizard (either by clicking the Help menu command or pressing F1) when a Help topic or Help dialog box is open, Help may close. If this happens, close all the open Help windows, and restart Help. This problem only occurs when you are using Help with Windows NT 3.51 or later without Service Pack 1. This problem does not happen with Windows 95.


JET/ISAM/DAO

Nesting Limit to BeginTrans Method
----------------------------------

The BeginTrans method allows up to 5 levels of nesting.

Importing Small Values from Text Files
--------------------------------------

Attempting  to import extremely small values (less than 2.225E-308) from text files into IEEE double fields fails and generates an error message.

Exceeding the Server Lock Count on a Novell NetWare Server
----------------------------------------------------------

If you exceed the server lock count while running a Microsoft Windows 95 client that accesses a remote database on a Novell NetWare server, your application may appear not to work properly. For example, you can run out of locks when running very large bulk set operation queries or when you are using data access object (DAO) code with explicit transactions that affect large numbers of records.

To avoid this problem, open the table with exclusive access (to preventing page-level locking) or use DAO code without explicit transactions to make the updates.

You can also increase the number of locks on the server. By default, NetWare allows 500 locks per connection. You can modify this limit (up to a maximum of 10,000 locks per connection) by adding the following two entries to the server's Autoexec.ncf file:

   set maximum record locks per connection = 10000
   set maximum record locks = 200000

Opening a Remote Microsoft Access 2.0 Database on a NetWare 3.11 Server
-----------------------------------------------------------------------

When using Microsoft Access for Windows 95 to open a remote Microsoft Access 2.0 database on a NetWare 3.11 server, if there isn't an existing .ldb file and the first client to connect is a Windows 95 client, that client will have exclusive access to the database, even if shared access was specified.

To avoid this problem, create and preserve an .ldb file to allow shared connections. Either make the first Windows 95 client close and reopen the database or make a Windows NT client connect first, and then ensure that at least one client (either Windows NT or Windows 95) stays connected to the database.


BRIEFCASE REPLICATION

Synchronization Failure Caused by Design Change Not Applied
-----------------------------------------------------------

When you attempt to synchronize a Design Master database and its replica database, the synchronization may fail because of a design change that could not be applied to the replica database. For additional information regarding the synchronization failure, examine the MSysSchemaProb table in the replica database.

Recommendations for Compacting a Design Master Database
-------------------------------------------------------

Each time you change the structure of a Design Master database, those changes are stored in the MSysSchemaChg system table. If you change the same object more than once before the next synchronization, each version of the object is stored, which increases the size of the database. Compacting the Design Master after you make all design changes helps to reduce the memory overhead required for storing changes and reduces the information sent to the replicas. You might find it most efficient to compact your database daily and again just before synchronizing design changes to replicas.


CONVERSION AND COMPATIBILITY

Formatting Nulls and Zero-Length Strings
----------------------------------------

In previous versions of Microsoft Access, you could use the Format function to return one value for a zero-length string and another for a Null value, and you could similarly use the Format property to automatically format fields in table Datasheet view or controls on a form or report. For example, you could use a format expression such as the following with the Format function to return the appropriate string value from code:

   Dim var As Variant, strX As String
   ' Assign some value to strX and pass to Format function.
   var = Format(strX, "@;ZLS;Null")

In Microsoft Access for Windows 95, you must test separately for the Null case, then return the appropriate value based on the result.  For example, you could use the IIf function in an expression with the Format function such as the following.

   var = IIf(IsNull(strX),"Null", Format(strX, "@;ZLS"))

This change applies only when you use the Format function to format a string dependent on whether it is a zero-length string or a Null value.  Other format expressions used with the Format function continue to work as they did in previous versions.

You can't set the Format property of a control to display different values for Null values and zero-length strings.  To distinguish between Null values and zero-length strings in a field on a form, create a second control and set its ControlSource property to an expression that tests for the Null case.  For example, to display "Null" or "ZLS" in a control on the Orders form when the ShipRegion field contains either a Null value or a zero-length string, create an additional text box on the form, and set its ControlSource property to the following expression:

   =IIf(IsNull([ShipRegion]), "Null", Format([ShipRegion], "@;ZLS"))

If you convert a database from a previous version of Microsoft Access to Microsoft Access for Windows 95, you'll need to change any code or property settings to use these methods. You can't use the Format property in table Datasheet view to distinguish between Null values and zero-length strings.

Shell Function Now Returns Long Data Type
-----------------------------------------

In previous versions of Microsoft Access, the Shell function returns an integer for the task identification number. In Microsoft Access for Windows 95, the data type of this number is Long. If your Access Basic code assigns the value of the Shell function to an integer variable, you must change your code in Microsoft Access for Windows 95 to assign this value to a Long variable.

Using the CompactDatabase Method to Convert a Database
------------------------------------------------------

To convert a Microsoft Access 1.x or 2.0 database to Microsoft Access for Windows 95, click Convert Database on the File menu.

Avoid using the CompactDatabase method to convert a database from a previous version of Microsoft Access to Microsoft Access for Windows 95. The CompactDatabase method only converts data access objects defined by the Microsoft Jet database engine (such as tables and stored queries); it won't convert Microsoft Access objects, such as forms and reports.

Forms and Reports Based on Parameterized Crosstab Queries
---------------------------------------------------------

If a database created in a previous version of Microsoft Access contains forms or reports based on a crosstab query with parameters, you are prompted to enter a value for each parameter when you attempt either to open or convert this database to Microsoft Access for Windows 95. If you click Cancel in the Parameter Values dialog box, the database opens or is converted normally. 

To avoid viewing the Parameter Values dialog box, you can open the database in a previous version of Microsoft Access and add code to set the form's RecordSource property when the form's Open event occurs, rather than saving it with the form. If you convert the database to Microsoft Access for Windows 95, you can once again save the form's RecordSource property with the form in the converted database.

Impact of Unicode on Visual Basic String Functions and Binary Data
------------------------------------------------------------------

Unicode is a character standard developed by the International Standards Organization (ISO) to compensate for the 256-character limitation of the ANSI and Extended ASCII character standards. Unicode uses a 16-bit (2 byte) coding scheme rather than the 8-bit (1 byte) character codes used by the ANSI and Extended ASCII standards. Visual Basic uses Unicode internally. Therefore, all strings that are three characters, for example, "abc", are actually 6 bytes internally. The Len function returns the number of characters, not the number of bytes. DAO translates between ANSI and Unicode based on the type of the field that it is writing to. If DAO is writing to a long binary field, it won't translate the incoming data; otherwise, it will.

If you have code that puts binary data in strings and memo fields assuming that 1 character equals 1 byte, Unicode breaks this assumption. Visual Basic adds a new Byte data type and "byte" functions (for example, LenB, LeftB, and RightB) that you should use with binary data.

Using the CurrentDb Function to 
Return a Reference to the Current Database
------------------------------------------

When you write code that includes a reference to the current database, you should declare a variable of type Database and use the CurrentDb function once to assign to it a pointer to the current database.  You should avoid using CurrentDb to return the current database in a statement that also returns a reference to another object, such as a Set statement. It was possible to do this in some beta versions of Microsoft Access, but in Microsoft Access for Windows 95, your code may not run properly. For example, to determine the number of Document objects in the Documents collection, you should write code such as that shown in the following two examples:

   Dim dbs As Database, con As Container
   Set dbs = CurrentDb
   Set con = dbs.Containers!Forms
   Debug.Print con.Documents.Count

-or-

   Debug.Print CurrentDb.Containers!Forms.Documents.Count

Code such as the following will not work:

   Dim con As Container
   Set con = CurrentDb.Containers!Forms
   Debug.Print con.Documents.Count

Closing a Database Returned from DBEngine.Workspace(0).Databases(0)
-------------------------------------------------------------------

The database Close method does not work on the database returned from DBEngine.Workspace(0).Databases(0). It fails without generating an error. This database can't be closed using code. It can only be closed by Microsoft Access when you terminate the session or close the current database.

Pointers to Forms/Reports When View Mode Is Changed
---------------------------------------------------

When you switch a form or report from Form, Datasheet, or Print Preview view to Design view, or switch from Design view to browse view, any pointers that you have to that object will be invalid and must be reestablished. In Microsoft Access 2.0, the object pointer remains valid after the view mode is switched. For example, the following code works in Microsoft Access 2.0:

   Dim f as Form
   DoCmd OpenForm "MyForm", A_DESIGN
   set f = Forms!MyForm
   DoCmd DoMenuItem 3,2,1  'Switch to browse
   f.Caption = "Change form caption"

In Microsoft Access for Windows 95, you need to reestablish the pointer to the form after the view mode is switched. For example:

   Dim f as Form
   DoCmd.OpenForm "MyForm", A_DESIGN
   set f = Forms!MyForm
   DoCmd.DoMenuItem 3,2,1  'Switch to browse
   set f = Forms!MyForm
   f.Caption = "Change form caption"

Converting Macros or Code That Calls the DoMenuItem Action
----------------------------------------------------------

The following menu commands were available in Microsoft Access 2.0, but have been renamed, moved to a different menu, or are no longer available in Microsoft Access for Windows 95:

   View			Menu name	Menu command
   ---------------------------------------------------

   Form View		Records	Allow Editing
   Form/Report Design	View		Palette
   Form/Report Design	View		Control Wizards
   Form/Report Design	Format	Apply Default
   Form Design		File		Save As Report
   Module Design		Edit		Find Next
   Module Design		Edit 		Find Previous
   Module Design		View		Next Procedure
   Module Design		View		Previous Procedure
   Module Design		Run		Modify Command$

Converting Code That Uses Undeclared Arrays
-------------------------------------------

If a database created with Microsoft Access 2.0 includes code that redimensions an array that has not been explicitly declared and preserves the values of that array using the Preserve keyword, Microsoft Access will generate a compile-time error when you open that database or convert it to a Microsoft Access for Windows 95 database.

To avoid this error, declare the array explicitly before you open or convert the database, or remove the Preserve keyword from the statement.

Microsoft Access for Windows 95 No Longer Uses /Ini Command-Line Option
-----------------------------------------------------------------------

You can no longer use initialization files (.ini) or the /Ini command-line option to provide customized initialization settings for your application. If you use the /Ini command-line option to specify an .ini file, settings in that file will be ignored. Customized initialization settings are now specified using Database Startup properties or user profile settings. For example, settings specified in the [Run-Time Options] section of an .ini file are now specified as follows:

   1.x/2.0 .ini file setting	Microsoft Access for Windows 95 setting
   ------------------------------------------------------------------

   TitleBar		Application Title (Database Startup Property)
   Icon		Application Icon (Database Startup Property)
   HelpFile		AppHelpFile (User Profile Setting)
   StartupScreen	Copy a bitmap with the same name as your 
   			application into the folder where your 
   			application is installed. To specify a startup form, 
   			use Display Form (Database Startup property).

You can set Database Startup properties by clicking Startup on the Tools menu. A user profile is an alternative set of Windows Registry keys that can be loaded when Microsoft Access is started using the /Profile command-line option. User profiles and the /Profile command-line option replace .ini files and the /Ini command-line option used in previous versions of Microsoft Access. Information on creating and using user profiles is included in the Microsoft Access Developer's Toolkit.

Converting Large Databases to Microsoft Access for Windows 95
-------------------------------------------------------------

If you have a large database (for example, greater than 100 forms and reports) created with a previous version of Microsoft Access, you may want to import all the database objects into a new Microsoft Access for Windows 95 database, rather than converting the database.

However, when you do the import operation, do not import all the objects at once. First, import all the macros, tables, and queries. Then import all the forms, reports, and modules in increments of 20 objects at a time. Importing database objects may increase the size of your database, so once the import is complete, compact the database.

If you do choose to convert a large database, make sure that you convert it into a new file rather than replacing the original file.

Using OLE Automation to Open a Read-Only Database 
Created in a Previous Version of Microsoft Access
-------------------------------------------------

You can't use the OpenCurrentDatabase method to open a read-only database that was created in a previous version of Microsoft Access. To open such a database through OLE Automation from another application or from another instance of Microsoft Access, you must either convert the database to Microsoft Access for Windows 95 or remove the read-only attribute.


PROGRAMMING AND VISUAL BASIC FOR APPLICATIONS

Renaming and Compacting a Database
----------------------------------

When you change the name of a database file and then open it, the project is decompiled, even if the database was saved in a compiled state.  If you change the name of a database file, you should open the new file and save it in its fully compiled state.  To do this, open the database, open a module, and click Compile All Modules on the Run menu.  Then click Save All Modules on the File menu.

When you compact a database, Microsoft Access prompts you to compact it into a new file.  For example, if you compact a database Db1.mdb, Microsoft Access prompts you to compact it into a new database, Db2.mdb.  Since the name of the database is changed, the project will decompile when you open the database, and you must recompile each time you open the database until you once again save it in its fully compiled state.

To avoid recompiling the database and resaving the project, do one of the following:

* When Microsoft Access prompts you to compact into a new database,
  choose instead to compact into the existing database. For example, 
  if you are compacting Db1.mdb, choose to compact back into Db1.mdb
  rather than into Db2.mdb.

* When Microsoft Access prompts you to compact into a new database,
  compact into a new database. Before opening the new database, change
  its name to that of the original database. For example, compact 
  Db1.mdb into Db2.mdb, then rename Db2.mdb to Db1.mdb.

Microsoft Access Properties Collection
--------------------------------------

Both Microsoft Access objects and data access objects (DAO) have Properties collections. If you represent a Properties collection with an object variable of type Properties, the variable will refer to the Microsoft Access Properties collection if the Microsoft Access type library is listed in the References dialog box above the DAO type library. If you then try to use this Properties object to refer to the DAO Properties collection, Microsoft Access generates a type mismatch error.

To ensure that a Properties object refers to the DAO Properties collection, declare the Properties object variable as shown in the following example:

   Dim prps As DAO.Properties

Referring to a Replication ID Field in Code
-------------------------------------------

When using database replication, you may need to refer to a field that contains a replication ID, or GUID (globally unique identifier). To return the value of a control on a form bound to a field that contains a GUID, use the StringFromGUID function to convert the GUID to a string. The following example returns the value of the s_GUID control on an Employees form and assigns it to a variable. The s_GUID control is bound to the s_GUID field, one of the system fields added to each table in a replicated database.

   Dim ctl As Control, strGUID As String
   Set ctl = Forms!Employees!s_GUID
   strGUID = StringFromGUID(ctl)

Note that in order to bind a control to the s_GUID field, you must click Options on the Tools menu and select the System Objects check box on the View tab of the Options dialog box.

You can also use the StringFromGUID function to return a string from a GUID field in a Recordset object or in a form's recordset.

To convert a string to a GUID, use the GUIDFromString function. A GUID is an array of type Byte. The following example uses the GUIDFromString function to convert a string to a GUID and assign it to an array.

   Dim bytGUID() As Byte
   bytGUID() = _
     GuidFromString("{guid {DF8B4F63-D4DE-11CE-B7E6-00AA0044FB8B}}")

Closing an Instance of Microsoft Access in Code
-----------------------------------------------

When you open an instance of Microsoft Access from another application through OLE Automation, that instance generally closes when the object variable that represents it goes out of scope. If the object variable is a procedure-level variable, the instance of Microsoft Access will close when the procedure is exited.

However, if you open an instance of Microsoft Access from another application and then open a database object, the instance of Microsoft Access will not close until the database object has been closed. For example, if you create an instance of Microsoft Access from Microsoft Visual Basic 4.0, and then open a form in a database, you must close the form in order for the instance of the database to close when it goes out of scope. The following example explicitly closes the open form so that the instance of Microsoft Access will close when the procedure is exited.

   Sub CloseAccessInstance()
       Dim appAccess As New Access.Application
       appAccess.OpenCurrentDatabase ("Contacts.mdb")
       appAccess.DoCmd.OpenForm "Employees", acNormal
       ' Perform an action with form.
       .    
       .
       .
       appAccess.DoCmd.Close
   End Sub

Running Procedures in a Referenced Database
-------------------------------------------

If your Visual Basic for Applications code calls a procedure in a referenced database, you may want to view the code in the referenced database while debugging. A module in a referenced database will open in the current database when you step through code that calls a procedure in that module, or if you have included a Stop statement in that procedure. When a module from a referenced database is open in the current database and has the focus, you can't run a procedure in the current database from the Debug window. Move the focus to another object in the current database before you run a procedure in the current database from the Debug window.

Passing Variables to the Run Method
---------------------------------------------

To pass a variable as an argument to the Run method, you must first convert the variable to a Variant data type; otherwise you will get a run-time error. For example, suppose you have the following procedure in one database:

   Sub DisplayNumber(lng As Long)
       MsgBox lng
   End Sub

To call this procedure from another application using the Run method, use the CVar function to convert the argument to a Variant data type.

   Sub CallDisplayNumber()
       Dim appAccess As New Access.Application, lng As Long
       lng = 75000
       appAccess.OpenCurrentDatabase("SomeDb.mdb")
       appAccess.Run "DisplayNumber", CVar(lng)
   End Sub

You don't need to convert the argument to a Variant data type if you are passing a literal value rather than a variable.

New AscW and ChrW Functions
---------------------------

In addition to the Asc function and the AscB function described in the Help topic, "Asc Function," the AscW function is provided for use with Windows 95. AscW accepts a character and returns the corresponding Unicode character code. 

In addition to the Chr function and the ChrB function described in the Help topic, "Chr Function," the ChrW function is provided for use with Windows 95. ChrW accepts a character code and returns the corresponding Unicode character.

Conversion of Hexadecimal Values to Prevent Sign Extension
----------------------------------------------------------

You can use the type-declaration character (in this example, the ampersand [&] suffix) to prevent sign extension when using hexadecimal values. For example: 

   Print &H82A0	' Prints -32096
   Print &H82A0&	' Prints  33440

Array Behavior Changes
----------------------

Because arrays are reallocated differently in Microsoft Access for Windows 95, some code that worked in earlier versions of Microsoft Access may no longer work. Visual Basic now temporarily locks an array when any element of the array is passed by reference to another procedure. This means that the array can't be resized during the lifetime of the procedure that receives the element by reference. The array is unlocked when there are no further references to array elements passed by reference.

Limitation of Line, Print, Circle, and PSet Methods in a With Statement
-----------------------------------------------------------------------

The Line, Print, Circle, and PSet methods can't be used in a With statement.

To work around this limitation, use the dot-notation syntax and keep the methods outside the With...End With block as the following example shows:

   With Form1
      .Backcolor = 4
      .Forecolor = 0
      .Print "This causes error" ' Error=Method or data member not found
   End With
   Form1.Print "No error because it is outside With...End With block"

Additional Information on the End Statement
-------------------------------------------

The Help topic, "End Statement" says in the first line of the syntax table, "End -- Terminates execution. Never required by itself but may be placed anywhere in a procedure to close files opened with the Open statement and to clear variables."

Note that the End statement stops execution immediately, without executing any further Visual Basic code. Objects created from class modules are removed, files opened using the Open statement are closed, and memory used by your program is freed. Object references held by other programs become invalid. 

The End statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program will then close when there are no other programs holding references to objects created from your public class modules, and no code to execute.

Difference Between What Len and LenB Return with User-Defined Types
-------------------------------------------------------------------

The Len function returns the size of a user-defined type as it will be when written to a file. By contrast, LenB returns the in-memory size of a user-defined type, including any padding between elements.

ReDim Statement Acts as a Declaration
-------------------------------------

The ReDim statement acts as a declarative statement if the variable it declares doesn't exist at the module or procedure level. If another variable with the same name is created later, even if in a wider scope, ReDim will refer to the later variable and will not necessarily cause a compilation error, even if Option Explicit is in effect. To avoid such conflicts, ReDim should not be used as a declarative statement, but rather for redimensioning arrays.

Conversion of Byte and String Types
-----------------------------------

You can assign strings to resizable arrays of bytes. An array of bytes can also be assigned to a variable-length string.  You can also use this conversion when passing arguments to ByVal parameters. Be careful when doing this, however; you may run out of memory because this conversion causes the creation of temporary variables and arrays during the call. Similarly, be aware that the number of bytes in a string varies among platforms. On Unicode platforms, the same string contains twice as many bytes as it does on a non-Unicode platform.

Use of the FileAttr Function on 32-Bit Operating Systems
--------------------------------------------------------

On 32-bit operating systems, FileAttr can return the file mode, but causes an error if you specify the operating system file handle as the return value. Therefore, with 32-bit operating systems, the second argument can only be 1.

Explanation of the Behavior of Null String Pointers
---------------------------------------------------

Visual Basic recognizes two kinds of strings that look the same, but act very differently: one is a Null pointer string; the other is an empty string. Here's how you might code them in a public module:

   Public Const sEmpty = ""
   Public sNull As String

If you look at these two strings in the Watch pane, they look exactly the same: they are both displayed as "", and you can use them in almost the same contexts. However, internally they are very different.

Internally, sEmpty is a pointer to an empty string. It is a valid pointer to some memory location. Internally, sNull is a Null pointer. This does not point to any memory location and has a value of zero.

All Visual Basic variables are initialized to 0. In previous versions of Microsoft Access, uninitialized variable-length strings were automatically initialized to an empty string (""). Therefore, to preserve compatibility when calling DLL routines, it may be necessary to initialize variables to empty strings.

In general, for FindWindow (or any other Windows API function) to work, the Declare statement must be written to pass the string ByVal As String or ByVal As Any. If passed by reference, a pointer to a BSTR would be passed, which is equivalent to a pointer to a pointer to char. This will not work because Windows API functions expect strings that are pointers to char.

If you want to define a constant that is the exact equivalent of the Null pointer, you can define it as vbNullString or simply use the type-library-defined constant vbNullString:

   Public Const sNull = vbNullString

Closing the Default Workspace Closes the Current Database
---------------------------------------------------------

If you close the default workspace by using the Close method of the default Workspace object, the current database is also closed.  For example, in the following code, the variable dbs, which represents the current database, goes out of scope once the default workspace is closed.

   Sub CloseWorkspace()
       Dim wrk As Workspace, dbs As Database
       Set wrk = DBEngine.Workspaces(0)
       Set dbs = CurrentDb
       wrk.Close		' Variable dbs goes out of scope at this point.
       dbs.Close		' This statement generates an error.
   End Sub

In previous versions of Microsoft Access, the current database was not closed until you either closed it explicitly or the procedure finished running.  When you convert a database to Microsoft Access for Windows 95, you should modify any similar code to avoid closing the workspace if you need to work with the current database within the same procedure.

Referring to Fields in a Recordset Object
-----------------------------------------

If a Recordset object includes a field named "Parent", you must use the bang (!) operator to refer to that field, even if you have set a reference to the Microsoft DAO 2.5/3.0 Compatibility Library.  Using the dot (.) operator generates a compile-time error.  The following example shows how to refer to such a field correctly.

   Dim dbs As Database, rst As Recordset
   Set dbs = CurrentDb
   Set rst = dbs.OpenRecordset("SomeTable", dbOpenDynaset)
   Debug.Print rst!Parent

Calling Methods of the Application Object from a Form Module
------------------------------------------------------------

When you close a form from within the form's module, any subsequent reference to the Application object may generate an error.  To avoid this error, call a method of the Application object without an explicit reference to the Application object, or precede the reference to the Application object with the library name "Access". The following example shows when this error occurs and how to avoid it.

   Private Sub Form_Load()
       DoCmd.Close acForm, Me.Name
       Application.Echo True		' Generates run-time error.
       Echo True 			' Works.
       Access.Application.Echo True	' Works.
   End Sub

Running Visual Basic Help Code Examples
---------------------------------------

If a Visual Basic code example that you copy from Help fails to run, turn off the Require Variable Declaration option (click Options on the Tools menu and click the Module tab) and then run the example again. Many Visual Basic code examples assume this feature is turned off.

Passing a Control to a Procedure
--------------------------------

When you pass a Control object to a procedure, the argument within the procedure definition must have a data type of Control or Object.  Otherwise, the procedure will function as though the Control object had been passed with the ByVal keyword; that is, the procedure will not change the value of the control.  The following example shows how you should define procedures that take Control arguments.

   Sub PassControl(ctl As Control)
       ' Procedure changes the control's value
       ctl = "New Value"
   End Sub

Using the Save Action, Save Method, 
CopyObject Action, and CopyObject Method
----------------------------------------

You can't use the Save action or the Save method of the DoCmd object to save any of the following objects with a new name: a form in Form view or Datasheet view, a report in Print Preview, or a module.

Additionally, you can't use the CopyObject action or CopyObject method of the DoCmd object to copy any of these objects and give it a different name.


DOCUMENTATION

Updates to Microsoft Access Help Topics
---------------------------------------

You can use the right mouse button to click on a What's This Tip to display a pop-up menu with shortcut commands that let you copy and print the information.

***

The online Help instructions for installing Briefcase replication (in the Help topic, "Use Briefcase to create a replica") cannot be followed exactly as written. If Windows 95 Briefcase was previously installed on your computer, Windows 95 does not display the Briefcase option in the Accessories category on the Windows Setup tab. If the Briefcase program files still reside on your computer, you might be able to restore the Briefcase icon to your Windows 95 Desktop by using the New command. Move the mouse pointer to a blank area of the Desktop and click the right mouse button. Point to New and click Briefcase. If the Briefcase command doesn't appear on the cascading menu or if the My Briefcase icon doesn't appear on your Desktop after you click the Briefcase command, you must reinstall Windows 95 to install the Briefcase feature.

***

In Help topics that discuss the Lotus WK4 spreadsheet format, note that you can only import from or link to Lotus WK4 spreadsheets. Exporting to this format is not supported.

***

In the Help topic "Accessing External Databases with DAO," this line of code is not necessary in step 4:

   tdf.Attributes = dbAttachedODBC

***

In the Help topic "TableDef Object, TableDefs Collection Example," remove the second sentence, which states that the example enumerates all the TableDef objects in the current database.

***

In the Help topic "BeginTrans, CommitTrans, Rollback Methods Example," the two references to the constant YES should say vbYesNo.

Note that the BeginTrans method allows up to 5 levels of nesting.

***

In the Help topic "Working Across Applications," the reference to "Microsoft Access version 3.0" should say "Microsoft Access for Windows 95."

***

In the DAO Help topics "CreateDatabase Method" and "CompactDatabase Method," add these additional constants for the locale argument:

   Constant				Collating Order
   ----------------------------------------------
   dbLangChineseSimplified	Simplified Chinese
   dbLangChineseTraditional 	Traditional Chinese
   dbLangJapanese 		Japanese
   dbLangKorean 			Korean
   dbLangThai 			Thai

***

In the DAO Help topic "CollatingOrder Property," add these additional constants:

   Values 					Description
   -----------------------------------------------------------------
   dbSortChineseSimplified 		Use the Simplified Chinese sort 
						order.
   dbSortChineseTraditional		Use the Traditional Chinese sort 
						order.
   dbSortJapanese 			Use the Japanese sort order.
   dbSortKorean				Use the Korean sort order.
   dbSortThai				Use the Thai sort order.

***

The Help topic "Public Statement" has a tip implying that Public can be used in a procedure. This is incorrect. Public can appear only at the module level.

***

The Help topic "InStr Function" incorrectly states that this function uses named arguments as shown in the syntax picture. The InStr function uses conventional, position-dependent arguments in the order shown in the syntax picture.

***

In the Help topic "Shell Function," the second sentence in the description of the pathname argument should be deleted.

***

In the Remarks section of the Help topic "ReplicationConflictFunction Property," remove the following two sentences:

   The Conflict Resolver adopts the data from the replica in which 
   this record has been changed the greatest number of times, and 
   propagates this data to the other replicas. Any changes to the 
   record that have been made in a different replica are overwritten, 
   and those changes are recorded in the conflict table named 
   tablename_conflict.

And then add the following paragraph:

   If you write your own custom conflict resolver, it must also 
   handle replication design errors and replication data errors. 
   To see an example, open the wizard database Wzcnf70.mda in the 
   Microsoft Access program folder and examine the source code.

***

In the Help topic "Query specifications," replace the specification about the number of sorted fields in a query with the first entry below and then add the second entry as a new specification:

   Attribute		Maximum
   -------------------------------------------------------------

   Sort limit		255 characters in one or more fields
   
   Number of enforced 	32 per table minus the number of 
   relationships		indexes that are on the table for fields 
				or combinations of fields that are not 
				involved in relationships

***

In the SQL Help topic "CREATE INDEX Statement Example," replace the second sentence with the following:

   This example creates an index on the "Customers" table using the 
   "CustomerID" field. No two records can have the same data in the 
   "CustomerID" field, and no Null values are allowed.

***

In the Help topic "Connect and ReturnsRecords Properties Example (Client/Server)," the fourth line of code is not necessary:

   ConnectSource = True

***

In the Help topic "Connect Property," add the following paragraph to the Remarks section:

   When you connect to an external Jet database that is password-
   protected, you must begin the password argument string with a 
   semicolon as the following example shows:

      Set dbsExternalJet = DBEngine.OpenDatabase("C:\External.mdb", _ 
         True, False, ";pwd=SecretPassword")

***

In the Help topic "CreateTableDef, FillCache Methods and SourceTableName Property Example (Client/Server)," replace the code example with the following:

   Dim wspDefault As Workspace, dbsPubs As Database
   Dim tdfPerformanceTest As TableDef, rstRemote As Recordset
   Dim strNoCache As String, strCache As String

   Set wspDefault = DBEngine.Workspaces(0)
   Set dbsPubs = wspDefault.OpenDatabase("PUBLISH.MDB")
   Set tdfPerformanceTest = dbsPubs.CreateTableDef("TestData")
   tdfPerformanceTest.Connect = _
      "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
   tdfPerformanceTest.SourceTableName = "dbo.roysched"
   dbsPubs.TableDefs.Append tdfPerformanceTest
   Set rstRemote = dbsPubs.OpenRecordset("TestData")

   MsgBox "This example moves through all records in the Recordset " & _
   "twice; once with no cache and once with a 50 record cache."
   ' Start uncached run
   tmStart = Timer
   For i% = 1 To 2
       rstRemote.MoveFirst
       While Not rstRemote.EOF
           v = rstRemote(0)
           rstRemote.MoveNext
       Wend
   Next i%
   tmEnd = Timer
   strNoCache = "Time without caching: " & Format$(tmEnd - tmStart) & _
       Chr$(13) & Chr$(10)

   ' Start cached run
   rstRemote.MoveFirst
   rstRemote.FillCache (50)
   tmStart = Timer
   For i% = 1 To 2
       intRecNumber = 0
       rstRemote.MoveFirst
       While Not rstRemote.EOF
           v = rstRemote(0)
           intRecNumber = intRecNumber + 1
           rstRemote.MoveNext
          If intRecNumber Mod 50 = 0 Then
                rstRemote.CacheStart = rstRemote.Bookmark
                rstRemote.FillCache
           End If
       Wend
   Next i%
   tmEnd = Timer
   strCache="Time with 50 record cache: " & Format$(tmEnd - tmStart) & _
       Chr$(13) & Chr$(10)
   ' Display performance results
   MsgBox "Caching Performance Results:" & Chr$(13) & Chr$(10) & _
       strNoCache & strCache
   rstRemote.Close
   dbsPubs.Close

***

In the Help topics "SaveSetting Statement" and "DeleteSetting Statement," replace each syntax section with the following:

   SaveSetting appname, section, key, setting
   DeleteSetting appname, section[, key] 

***

In the Help topics "SaveSetting Statement Example" and "DeleteSetting Statement Example," replace each example with the following:

   ' Place some settings in the registry.
   SaveSetting appname:="MyApp", section:="Startup", Key:="Top", _
      setting:=75
   SaveSetting "MyApp", "Startup", "Left", 50
   SaveSetting "MyApp", "Startup", "Password", "Swordfish"
   ' Remove app entry and all settings from registry.
   DeleteSetting "MyApp", "Startup"

***

In the Syntax section of the Help topic "Raise Method," remove the parentheses surrounding the argument list.

***

In the Help topic "AccessError Method," add the following paragraph:

   The descriptive string associated with a Microsoft Access error
   may consist of up to three sections. If there is more than one 
   section, each section within the string is delimited by the at 
   sign (@) character. For example, a string returned by the 
   AccessError method might be in the following format:

      Section1@Section2@Section3

***

In the Help topic "Troubleshoot append queries," add the following topic:

   Title: I'm getting a  "No permissions for s_Generation" error 
          when I run an append query in a replicated database

   Text: This error occurs because the append query is selecting 
         fields  from one of the source tables by using the format 
         [tablename].*.  To avoid this problem, change the append 
         query to select specific fields instead of using the 
         asterisk (*) specifier.

***

In the Help topic "MultiSelect Property," replace the last sentence in the Setting section with the following:

   The MultiSelect property can only be set in the Design view 
   of a form.

***

In the example near the end of the "FindFirst, FindLast, FindNext, FindPrevious Methods" Help topic, replace the date format specification with following:

   rstEmployees.FindFirst "HireDate > #" & _
      Format(mydate, 'm-d-yy' ) & "#"

***

In the Help topic "ActiveControl Property," replace the first sentence with the following:

   You can use the ActiveControl property together with the 
   Screen or Form object to identify or refer to the control
   that has the focus.

***

In the Help topic "Append records from a table to another table using an append query," replace the first paragraph of step 4 and all of step 9 with the following:

   4. Click Current Database if the table is in the currently open 
      database. Or click Another Database if the table is in a 
      different database, and then type the name of the database, 
      including its path if necessary.

   9. To preview the records the query will append, click the 
      Datasheet View button on the toolbar. To return to query 
      Design view, click the Design View button on the toolbar. 
      Make any changes you want in Design view.

***

In the Help topic "Display a custom icon for an application", step 2 indicates that you can enter the name of an .ico or .bmp file. This is true only for the Microsoft Windows operating system. On the Microsoft Windows NT operating system, you can only enter the name of an .ico file.

***

In the Help topics "TransferSpreadsheet Action" and "TransferSpreadsheet Method," ignore the information that states you can't link to Lotus spreadsheets. You can link to Lotus spreadsheets, but the data is read-only.

***

In the Help topic "OpenForm Method," use the following text to replace the last sentence of the Data Mode argument description, and in the Help topic "OpenForm Action," add the following text as a second note in the description of the Data Mode action argument:

   If you leave this argument blank, Microsoft Access opens the 
   form in the data mode set by the form's AllowAdditions, 
   AllowDeletions, AllowEdits, and DataEntry properties.

***

In the Help topic "Initializing the Microsoft ODBC Database Driver," the default setting for the DisableAsynch entry is 1, not 0.

***

In the Help topic "Name Property (DAO)," add the following information:

   The maximum length of the Name property depends on the data 
   access object it is used on, as shown below:

   Object						Maximum length in characters
   -------------------------------------------------------------------

   Workspace, User, and Group			20
   Database						255
   TableDef, Index, Field, QueryDef, 
   Relation, and Property			64

   The data access objects DBEngine and Error do not use the Name 
   property, and for the Recordset, Document, Container, Parameter 
   objects, the Name property is read-only.

***

In the Help topic "Subform/Subreport Control Properties," ignore the OnClick, OnDblClick, and HelpContextID control properties. They do not work with subforms or subreports.

***

Updates to "Building Applications with Microsoft Access for Windows 95"
-----------------------------------------------------------------------

The following are changes that occurred after the book went to press:

In Chapter 5, "Working with Objects and Collections," note that Module object and Section object aren't included in the Microsoft Access object model. Instead you can use properties to work with modules and sections.  The Module property is used with the InsertText method. The Section property identifies a particular section on a form or report.

***

Page 101: At the bottom of the page, in the function SafeSqr, the variable "dblSafeSqr" should say "SafeSqr". 

***

Page 116: At the top of the page, in the Boolean data type example, the variable "objCharges" should say "rstCharges". 

***

Page 118: In the middle of the page, the reference to the second argument of the Reverse function, "ByVal N As Integer" should say "ByVal IntChars As Integer".

***

Page 228: At the bottom of the page, in the last bulleted item, "Move[0] method" should say "Move[n] method".

***

Page 300: In the middle of the page, in the GetWindowsDirectory function, the hyphen at the end of the second line should be an underscore.

***

Page 301: At the top of the page, in the second example, "sndPlaySound(WaveFile(intX), 0)" should say 
"sndPlaySound(WaveFiles(intX), 0)".

***

Page 395: At the bottom of the page, the example is missing the last step:

   4. Save the query with the name of the original table, "Order 
      Details".

***

Page 421: The eighth and ninth lines of the code example should say:

   objParent.Properties.Append _
      objParent.CreateProperty("KeepLocal", dbText, "T")

***

Page 422: The fifth and sixth lines of the code example for the Replicable property should say:

   dbs.Properties.Append _
     dbs.CreateProperty("Replicable", dbText, "T")  'Makes the Db 
                                                    'replicable.

***

Page 429: The eighth line of the code example should say: 

   objParent.Properties.Append _
      objParent.CreateProperty("Replicable", dbText, "T")

***

Page 432: The first line of the code example for the DesignMasterID property should say:

   Set dbs = DBEngine(0).OpenDatabase(strOldDm, True)  'Current DM 
                                                       'replica

***

Updates to "Getting Results with Microsoft Access for Windows 95"
-----------------------------------------------------------------

The following change occurred after the book went to press:

Page 110: At the bottom of the page, the reference to the name of the automatically created backup table "Data from Product List" should say "Product List_OLD".


FILE LIST

NOTE: Files marked with one asterisk (*) are included in a Typical installation. Files marked with two asterisks (**) are installed only on non-U.S. English systems. 

Microsoft Access:
    
  \MSOffice\Access\Msaccess.exe *
  \MSOffice\Access\Msaccess.tlb *
  \MSOffice\Access\Msaccreg.dll *
  \MSOffice\Access\Msacnv30.dll *
  \MSOffice\Access\Msacnv30.exe *
  \MSOffice\Access\Msaexp30.dll *
  \MSOffice\Access\Msain300.dll *
  \MSOffice\Access\Soa300.dll *
  \MSOffice\Access\System.mdw *
  \MSOffice\Access\Utility.mda *
  \MSOffice\Access\Wrkgadm.exe *

  \Windows\System\commtb32.dll *
  \Windows\System\Openenu.dll *
  \Windows\System\Mso5enu.dll *
  \Windows\System\Mso95.dll *
  \Windows\System\Msvcrt40.dll *
  \Windows\System\Mstool32.dll *
  \Windows\System\Msothunk.dll *
  \Windows\System\Mfc40.dll *
  \Windows\System\Olepro32.dll *

Microsoft Access Wizards and Wizard Development Tools:
    
  \MSOffice\Access\Msau7032.dll *
  \MSOffice\Access\WD95acc.tlb *
  \MSOffice\Access\Wzdat70.mdt *
  \MSOffice\Access\Wzlib70.mda *
  \MSOffice\Access\Wzmain70.mda *
  \MSOffice\Access\Wzcnf70.mda *
  \MSOffice\Access\Wztool70.mda 
    
  \Windows\System\Flist32.ocx *
  \Windows\System\Imxgrd32.ocx *

Briefcase Replication:
    
  \MSOffice\Access\Msjrci30.dll *
  \MSOffice\Access\Msjtrclr.dll *

Calendar Control:
   
  \Windows\System\Msacal70.cnt *
  \Windows\System\Msacal70.hlp *
  \Windows\System\Msacal70.ocx *

Jet ISAM:
    
  \Windows\System\Msxl3032.dll *
  \Windows\System\Mslt3032.dll
  \Windows\System\Mspx3032.dll
  \Windows\System\Mstx3032.dll *
  \Windows\System\Msxb3032.dll *
    
Jet:
    
  \Windows\System\Msjint32.dll *
  \Windows\System\Msjt3032.dll *
  \Windows\System\Msjter32.dll *
  \Windows\System\Mswng300.dll
  \Windows\System\Msrd2x32.dll *
  \Windows\System\Vbajet32.dll *
  \Windows\System\Msjetsql.tlb *
    
Jet Code Page Translator:
    
  \Windows\System\12520437.cpx
  \Windows\System\12520850.cpx
  \Windows\System\Mscpxl32.dll
    
ODBC:
    
  \Windows\Odbcinst.ini *
  \Windows\Odbc.ini *

  \Windows\System\Odbcji32.dll *
  \Windows\System\Odbcjt32.dll *
  \Windows\System\Odbctl32.dll *
    
ODBC ISAM Installer:
    
  \Windows\System\Oddbse32.dll
  \Windows\System\Odexl32.dll
  \Windows\System\Odfox32.dll
  \Windows\System\Odpdx32.dll
  \Windows\System\Odtext32.dll
    
ODBC 32 bit:
    
  \Windows\System\Odbc32.dll
  \Windows\System\Odbcad32.exe
  \Windows\System\Odbccp32.cpl
  \Windows\System\Odbccp32.dll
  \Windows\System\Odbccr32.dll
  \Windows\System\Odbcint.dll
  \Windows\System\Ds16gt.dll
  \Windows\System\Ds32gt.dll
  \Windows\System\Odbc16gt.dll
  \Windows\System\Odbc32gt.dll
    
SQL Server:
    
  \Windows\System\Dbnmpntw.dll
  \Windows\System\Sqlsrv32.dll

Visual Basic for Applications: 
    
  \Windows\System\Vaen232.dll *
  \Windows\System\Ven2232.olb *
  \Windows\System\Vba232.dll *

DAO:
    
  \Program Files\Common Files\Microsoft Shared\DAO\Dao2532.tlb *
  \Program Files\Common Files\Microsoft Shared\DAO\Dao3032.dll *

Microsoft Graph:
    
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Graph5.exe *
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Graph5.reg *
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Gren50.olb *
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Grintl.dll *

  \Windows\Graph5.ini *
    
Microsoft Access Setup:
    
  \MSOffice\Access\Setup\Acme.exe *
  \MSOffice\Access\Setup\Acme.lst *
  \MSOffice\Access\Setup\Network.txt *
  \MSOffice\Access\Setup\Acc95.stf *
  \MSOffice\Access\Setup\Acc95inn.dll
  \MSOffice\Access\Setup\Acc95inv.dll *

ODBC Setup:
    
  \MSOffice\Access\Odbckey.inf
  \MSOffice\Access\Odbcstf.dll
  \MSOffice\Access\Odbcint.dll
  \MSOffice\Access\Odbccp32.dll
    
Sample Applications:
    
  \MSOffice\Access\Samples\Northwind.mdb *
  \MSOffice\Access\Samples\Orders.mdb
  \MSOffice\Access\Samples\Orders.hlp
  \MSOffice\Access\Samples\Orders.cnt
  \MSOffice\Access\Samples\Solutions.mdb
  \MSOffice\Access\Samples\Solutions.hlp
  \MSOffice\Access\Samples\Solutions.cnt

Microsoft Access Help:
    
  \MSOffice\Access\Acreadme.txt *
  \MSOffice\Access\Qmsaccss.hlp *
  \MSOffice\Access\Acvisex.exe *
  \MSOffice\Access\Msaccess.aw *
  \MSOffice\Access\Msaccess.cnt *
  \MSOffice\Access\Msaccess.hlp *
  \MSOffice\Access\Msaccess.gid *
  \MSOffice\Access\Msaccdef.hlp *

  \Windows\Fonts\Hatten.ttf *
    
Help Viewer:
    
  \Windows\System\Hlp95en.dll *
  \Windows\System\Vbrun300.dll *
  \Windows\System\Visx.exe *
  \Windows\System\Visxutil.dll *
    
Language Reference Help:
    
  \MSOffice\Access\Vba_acc.aw *
  \MSOffice\Access\Vba_acc.cnt *
  \MSOffice\Access\Vba_acc.gid *
  \MSOffice\Access\Vba_acc.hlp *
  \MSOffice\Access\Vbaaccsp.cnt *
  \MSOffice\Access\Vbaaccsp..ftg *
  \MSOffice\Access\Vbaaccsp.fts *
  \MSOffice\Access\Vbaaccsp.gid *
  \MSOffice\Access\Vbaaccsp.hlp *

Briefcase Replication Help:
    
  \MSOffice\Access\Msjtlcrc.exe *
  \MSOffice\Access\Msjtrclr.cnt *
  \MSOffice\Access\Msjtrclr.hlp *
    
Microsoft Office Help:
    
  \MSOffice\Office\Eula.cnt *
  \MSOffice\Office\Eula.hlp *
  \MSOffice\Office\Fastboot.exe *
  \MSOffice\Office\PSS.cnt *
  \MSOffice\Office\PSS.hlp *
  \MSOffice\Office\Qoffice.hlp *

Visual Basic for Applications Help:
    
  \Program Files\Common Files\Microsoft Shared\VBA\Vbaen2.aw
  \Program Files\Common Files\Microsoft Shared\VBA\Vbaen2.cnt
  \Program Files\Common Files\Microsoft Shared\VBA\Vbaen2.hlp
    
Jet SQL Help:
    
  \Windows\System\Msjetsql.cnt
  \Windows\System\Msjetsql.gid
  \Windows\System\Msjetsql.hlp

  \Windows\System\Msjeterr.cnt *
  \Windows\System\Msjeterr.hlp *
    
DAO Help:
    
  \Program Files\Common Files\Microsoft Shared\DAO\Dao.aw
  \Program Files\Common Files\Microsoft Shared\DAO\Dao.cnt
  \Program Files\Common Files\Microsoft Shared\DAO\Dao.hlp
    
ODBC Help:
    
  \Windows\System\Odbcjet.hlp
  \Windows\System\Odbcjtnw.hlp
  \Windows\System\Odbcinst.hlp
    
SQL Server Help:
    
  \Windows\System\Drvssrvr.cnt
  \Windows\System\Drvssrvr.hlp

Microsoft Graph Help:
    
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Msgraph.cnt
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Msgraph.fts *
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Msgraph.gid *
  \Program Files\Common Files\Microsoft Shared\MSGraph5\Msgraph.hlp *

Spelling and AutoCorrect List:
    
  \Program Files\Common Files\Microsoft Shared\Proof\Mssp_am.lex (US) *
  \Program Files\Common Files\Microsoft Shared\Proof\Mssp_br.lex 
     (British) **
  \Program Files\Common Files\Microsoft Shared\Proof\Mssp32.dll *
  \Windows\Msoffice.acl *
    
New Object Bitmaps:
    
  \MSOffice\Access\Bitmaps\Newobj\F-autocl *
  \MSOffice\Access\Bitmaps\Newobj\F-autods .bmp *
  \MSOffice\Access\Bitmaps\Newobj\F-autotb .bmp *
  \MSOffice\Access\Bitmaps\Newobj\F-chart .bmp *
  \MSOffice\Access\Bitmaps\Newobj\F-descr .bmp *
  \MSOffice\Access\Bitmaps\Newobj\F-pivwiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\F-wiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\Q-ctwiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\Q-descr .bmp *
  \MSOffice\Access\Bitmaps\Newobj\Q-dupwiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\Q-nomwiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\Q-sswiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-autocl .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-autotb .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-chart .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-lblwiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-newscr .bmp *
  \MSOffice\Access\Bitmaps\Newobj\R-wiz .bmp *
  \MSOffice\Access\Bitmaps\Newobj\T-descr .bmp *
  \MSOffice\Access\Bitmaps\Newobj\T-dscr .bmp *
  \MSOffice\Access\Bitmaps\Newobj\T-import .bmp *
  \MSOffice\Access\Bitmaps\Newobj\T-link .bmp *
  \MSOffice\Access\Bitmaps\Newobj\T-wiz .bmp *
    
Wizard Bitmaps:
    
  \MSOffice\Access\Bitmaps\Styles\Clouds.wmf *
  \MSOffice\Access\Bitmaps\Styles\Confidential .bmp *
  \MSOffice\Access\Bitmaps\Styles\Flax .bmp *
  \MSOffice\Access\Bitmaps\Styles\Globe.wmf *
  \MSOffice\Access\Bitmaps\Styles\Pattern .bmp *
  \MSOffice\Access\Bitmaps\Styles\Sea_dusk.wmf *
  \MSOffice\Access\Bitmaps\Styles\Stone .bmp *
    
  \MSOffice\Access\Bitmaps\Dbwiz\Books.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Contacts.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Dbmusic.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Eatdrink.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Houshold.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Invntory.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Members.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Monytrak.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Phonordr.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Photos.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Resource.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\School.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Videos.bmp *
  \MSOffice\Access\Bitmaps\Dbwiz\Workout.bmp *

Template Wizards:
    
  \MSOffice\Templates\Databases\Address Book.mdz *
  \MSOffice\Templates\Databases\Asset Tracking.mdz *
  \MSOffice\Templates\Databases\Book Collection.mdz *
  \MSOffice\Templates\Databases\Contact Management.mdz *
  \MSOffice\Templates\Databases\Donations.mdz *
  \MSOffice\Templates\Databases\Event Management.mdz *
  \MSOffice\Templates\Databases\Expenses.mdz *
  \MSOffice\Templates\Databases\Household Inventory.mdz *
  \MSOffice\Templates\Databases\Inventory Control.mdz *
  \MSOffice\Templates\Databases\Ledger.mdz *
  \MSOffice\Templates\Databases\Membership.mdz *
  \MSOffice\Templates\Databases\Music Collection.mdz *
  \MSOffice\Templates\Databases\Order Entry.mdz *
  \MSOffice\Templates\Databases\Picture Library.mdz *
  \MSOffice\Templates\Databases\Recipes.mdz *
  \MSOffice\Templates\Databases\Resource Scheduling.mdz *
  \MSOffice\Templates\Databases\Service Call Management.mdz *
  \MSOffice\Templates\Databases\Students and Classes.mdz *
  \MSOffice\Templates\Databases\Time and Billing.mdz *
  \MSOffice\Templates\Databases\Video Collection.mdz *
  \MSOffice\Templates\Databases\Wine List.mdz *
  \MSOffice\Templates\Databases\Workout.mdz *
    
MS Info:
    
  \Program Files\Common Files\Microsoft Shared\Msinfo\Imgwalk.dll *
  \Program Files\Common Files\Microsoft Shared\Msinfo\Msinf16h.exe *
  \Program Files\Common Files\Microsoft Shared\Msinfo\Msinfo32.cnt *
  \Program Files\Common Files\Microsoft Shared\Msinfo\Msinfo32.exe *
  \Program Files\Common Files\Microsoft Shared\Msinfo\Msinfo32.hlp *
        
Microsoft Forum:
    
  \MSOffice\Office\Msn\Microsoft Access 95 Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Excel 95 Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Office 95 Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Office Family Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Office Resource Kit.mcc *
  \MSOffice\Office\Msn\Microsoft PowerPoint 95 Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Schedule+ 95 Forum.mcc *
  \MSOffice\Office\Msn\Microsoft Word 95 Forum.mcc *

Shortcuts:

  \MSOffice\Access\MS Access Workgroup Administrator.lnk *

  \MSOffice\Microsoft Access Setup.lnk *
  \MSOffice\Microsoft Access.lnk *

  \Windows\Start Menu\Programs\Microsoft Access.lnk *
  \Windows\Start Menu\Programs\Startup\Microsoft Office Fast Start.lnk *
  \Windows\SendTo\My Briefcase.lnk *

Briefcase:

  \Windows\Desktop\My Briefcase\Briefcase Database *
  \Windows\Desktop\My Briefcase\Desktop.ini *

