		Q+E MultiLink/VB
		  Version 1.0.1
		  May 13, 1993

This READ.ME file contains late-breaking information not included 
in the Q+E MultiLink/VB User's Guide. Some of this new information 
can be found in the MultiLink/VB Help files, QELINK.HLP and 
QEDEF.HLP. This file contains information about the following 
topics:

-   FOR VISUAL BASIC 1.0 USERS
-   DATABASES SUPPORTED THROUGH GATEWAYS
- > fDISCARD FUNCTION 
- > FOR SQL SERVER USERS
-   FOR PROGRESS USERS
-   FOR WINDOWS FOR WORKGROUPS USERS
- > INTERCEPTING LOGON AND LOGOFF FUNCTIONS
- > CORRECTIONS TO THE USER'S GUIDE

Topics marked with > in the above list and throughout this file
contain new information about features that are new in 
MultiLink/VB version 1.0.1.


	 -- FOR VISUAL BASIC 1.0 USERS --

To run the Visual Basic 1.0 versions of the MultiLink/VB 
sample applications, refer to the Help file, README.HLP. 


	-- DATABASES SUPPORTED THROUGH GATEWAYS --

Gateways
--------------------
MultiLink/VB can access the following database systems by using an 
existing MultiLink/VB database driver and a gateway.
- HP IMAGE/SQL
- HP ALLBASE/SQL
- Teradata
- AS/400 (SQL/400)
- SQL/DS
To access one of these systems, refer to the Help file, README.HLP.


	 -- >fDISCARD FUNCTION --

Version 1.0.1 offers a new function, fDiscard. In order
to call the fDiscard function in existing MultiLink/VB 
applications, you must incorporate the newest QELINK.TXT 
template file into your project. 

APPLIES TO
Query control

DESCRIPTION
The fDiscard function discards changes made to a record 
before fUpdate is called. For example, if a user changes 
the value of a field and then decides not to change it, the 
changes can be discarded without writing them to the database 
by calling fDiscard or by pressing a DB Command Button with 
pFunction set to 19 - Discard. 

Calling fDiscard also removes a new record created after fNew 
has been called, as long as the record has not yet been saved 
permanently to the database with fUpdate. In applications 
connected to SQL databases (i.e., databases other than dBASE, 
Btrieve, and Paradox) that are not using transactions, calling 
fDiscard also removes the lock on a record.

Calling fDiscard sets the following Query control properties:
- pRowIndex is set to row_index%, the parameter sent to fDiscard.
- pError is set to the result code returned by fDiscard.
- pErrorDB is set to 0 unless pError is 31003 (QE_DB_ERROR) or 
  31040, in which case pErrorDB contains the database error code.
- pErrorText is set to the error message if pError is not 0, 
  otherwise "".

The following properties are set for all field controls related 
to the Query control:
- pChanged is set to False (0).
- pRecState is set to 2 - RECSTATE_UNCHANGED.

SYNTAX
result_code% = fDiscard(query_name, row_index%)

- result_code% is the result code fDiscard returns. The result 
  code is 0 if the function completed successfully. Otherwise it 
  contains an error number identifying the error that was 
  detected. 
- query_name is the control name (Name property) of the Query 
  control whose record is to be updated. 
- row_index% identifies the row in a field control array in 
  which changes are to be discarded. If a control array is not 
  used, this value must be 0 and the changes in the record 
  currently displayed are discarded.


	 -- >FOR SQL SERVER USERS  --

MultiLink/VB version 1.0.1 offers lots of improvements for SQL Server users. 
For more information, refer to the Help files, README.HLP and QELINK.HLP 
under these topics: 

>Locking Mechanism Changes
>SQL Server Connection String Options
>New QEX.INI Settings for SQL Server


	 -- FOR PROGRESS USERS --

Obtaining a PROGRESS Driver
--------------------
MultiLink/VB supports the following network protocols for PROGRESS:
-NETBIOS
-SPX
-TCP/IP
The PROGRESS driver included on the MultiLink/VB release disk 
supports NETBIOS, SPX, and FTP TCP/IP. 
NOTE:  If you use LAN Workplace TCP/IP, Wollongong TCP/IP, or 
HP TCP/IP, you must send in the coupon enclosed in the product 
box so that Pioneer Software can send you the appropriate driver.


	 -- FOR WINDOWS FOR WORKGROUPS USERS --

Running SHARE with Btrieve, dBASE, Excel, Paradox, and Text Files
--------------------
When using non-SQL database files (Btrieve, dBASE, Excel, Paradox,
Text Files) while running Windows for WorkGroups, your computer 
must be running SHARE. To run SHARE, get out of Windows and display
the DOS prompt. Type  SHARE  and press the Enter key. If you add 
SHARE.EXE to your AUTOEXEC.BAT file, SHARE runs every time you boot
your computer.

In Windows for WorkGroups, the SHARE TSR has been rewritten as a 
device driver. The VSHARE.386 device driver provides full 
compatibility with SHARE.EXE. When SHARE is loaded, Windows for 
WorkGroups stops the SHARE TSR and handles file-sharing and locking 
through VSHARE.386.


 	  -- >INTERCEPTING LOGON AND LOGOFF FUNCTIONS --

>Building MLEXTEND.DLL
--------------------
MultiLink/VB allows you to intercept the internal calls made to log 
on and log off database systems. To do this, you build a separate 
DLL that MultiLink calls when these functions are needed.

The Setup program creates a subdirectory named MLEXTEND under the 
MultiLink directory (C:\QELINK\MLEXTEND by default).  The MLEXTEND 
subdirectory contains files that will assist you in creating a 
MLEXTEND.DLL.  For more information, refer to the READ.ME file in 
C:\QELINK\MLEXTEND.


	 -- >CORRECTIONS TO THE USER'S GUIDE --

Topics marked with an asterisk (*) show corrections
that have been made in manuals with "June 1993" on the
title page. Topics marked with a caret (>) contain new 
information with version 1.0.1.


Chapter 1--Getting Started
-------------------


Converting Q+E Database/VB Applications

The Help file, QELINK.HLP, gives more information than 
the Q+E MultiLink/VB User's Guide about converting 
Q+E Database/VB (QEVB) applications to work with 
MultiLink/VB. To access this information, open QELINK.HLP. 
On the Help Contents screen,click the topic, "Getting 
Started." Then click the topic,"Converting Q+E Database/VB 
Applications." README.HLP also contains this information.
 


Chapter 7--Event, Function, and Property Reference
--------------------

*fUpdate Function

The following information can be added to the "fUpdate Function" 
section. The fUpdate function returns an error if the user enters 
into a DB Text Box a value that contains more characters than 
the database field's defined length allows. When the application 
calls fUpdate, MultiLink/VB generates the eError event, sets 
pError to 31221, and sets pErrorText to "The field has been 
truncated because it is too long for the database field."


pLogonInfo Property

This section contains additional information about the pLogonInfo 
property. The optional pLogonInfo property is used to pass a 
connection string required for logging on to certain database 
systems. pLogonInfo contains a semicolon-separated list of 
database-specific logon information, such as user name and 
password. A connection string has the form:
	<setting>=<value>[;<setting>=<value>]

Settings and their possible values vary for different database 
systems. Settings must be typed in uppercase letters. How you 
type values depends on the database system. Refer to the chapter 
in Part 3 in the Q+E MultiLink/VB User's Guide that describes 
the database system you're using.

In addition to the connection string settings required by each 
database system, the pLogonInfo property supports three settings 
that can be used with any database system. Each setting can 
contain the values 1 (True) or 0 (False).

- REREADAFTERINSERT determines whether the application rereads 
records immediately after inserting them into the database table. 
Using the setting 1 - True is useful for database systems that do 
not support null values, such as Btrieve. For these database 
systems, MultiLink/VB substitutes real values when the application
attempts to insert a record containing null values. MultiLink/VB 
substitutes 0 for numeric fields and 1/1/1900 for date fields. 
The 1- True setting prevents an error from occurring when the user 
attempts to lock, update, or delete the record that was just 
inserted. This error occurs because the record inserted in the 
database, containing the substituted values, does not match the 
record in the application, containing the null values. Because 
not all values match, the record cannot be found and, therefore, 
cannot be updated, deleted, or locked. This error may also occur 
with database systems that support stored procedures and 
triggers, such as SQL Server. The default is 0 - False.

- REREADAFTERUPDATE determines whether the application rereads 
records immediately after updating them in the database table. 
Using the setting True is useful for database systems that do not 
support null values, as discussed above. The default is 0 - False.

- COMPAREAFTERLOCK determines whether the application compares a 
record to the version originally read from the database after 
locking it. This option ensures that the application always 
displays the most recent version of a record read from a shared 
database. If the current, locked version differs from the original,
meaning that the record was changed by another user, MultiLink/VB 
replaces the original record in the database with the current 
record. The default is 1 - True. Using the setting 0 - False 
will improve performance.

NOTE: To use these options with non-SQL database systems, such as 
dBASE and Btrieve, the connection string requires only the three 
attributes and values discussed above. For example, you could 
pass the following connection string when connected to a Btrieve 
database table:
Connect1.pLogonInfo = "REREADAFTERINSERT=1;REREADAFTERUPDATE=1"


*pQueryType Property

The pQueryType property applies to both the Query control and the 
Query Grid control. 

When pQueryType is set to 1 - Stored Procedure, the query to be 
executed when fDoQuery is called is defined by a stored procedure.
To use a stored procedure, you must set the pTables and pQueryExpr 
properties. The values of pWhere and pDistinct are ignored.

Set pTables using the @ sign, the procedure name, and optional 
parameters. Set pQueryExpr to integers specifying  the columns 
whose values are to be displayed, using 1 for the first column. 
With a Query Grid, specify a comma-separated list of column 
numbers. With a Query control, specify one column per field 
control.


>pRecCount Property

With MultiLink/VB version 1.0.1, the pRecCount property of the Query 
control now returns information about the number of records affected 
by a call to fExecSQL. 

Following a call to fExecSQL that sends a Select statement, pRecCount 
contains the number of records that satisfy the conditions in the Select 
statement. If fExecSQL sends an Update or Delete statement, the 
pRecCount property contains the number of records updated or deleted.


Chapter 9--Btrieve Database Files
--------------------

Connecting to Btrieve

The only logon information required for connecting to Btrieve is 
provided by setting the Connect control's pSource property to 
Btrieve. However, there are three optional settings that you can 
pass in a connection string using the pLogonInfo property:
-REREADAFTERINSERT
-REREADAFTERUPDATE
-COMPAREAFTERLOCK

For more information, refer to the "pLogonInfo Property" section 
in this READ.ME file or in the QELINK.HLP Help file.



Chapter 10--dBASE-Compatible Database Files
--------------------

>Delete Statement

This information should replace the Note at the end of this 
section in the User's Guide.
NOTE: When you delete records, the Rowid of the record does not 
change until you pack the dBASE file. If you have not yet packed 
the file, you can undo the Delete statement and display deleted 
records using the Rowid or the following statement. To undo the 
Delete statement, use this statement:
DELETE FROM <table_name> (RECORDS=DELETED)
To obtain information about deleted records, use this statement:
SELECT * FROM <table_name> (RECORDS=DELETED)
To return deleted dBASE records before packing the dBASE file, 
create a query to return these records by setting pTables as follows:
Query1.pTables = "<table_name> (RECORDS=DELETED)"
Set each control's pQueryExpr to the names of the corresponding
database field.



Chapter 13--INFORMIX Databases
--------------------

Restriction on Data Types Supported

When connected to an INFORMIX database, MultiLink/VB does 
not support Queries By Example (QBEs), Where clauses in SQL 
statements, or indexes for the following data types:
- Interval Year (6) to Month
- Interval Day (6) to Fraction (5)
- Text
- Byte



Chapter 15--NetWare SQL Databases
--------------------

Restriction on Data Lengths

MultiLink/VB has a limitation on the maximum length of field 
values that can be stored in a NetWare SQL database. You cannot 
insert or update field values with length greater than 
approximately 255 bytes.



Chapter 19--Paradox Database Files
--------------------

>System Requirements

Adding the line 
Version=3
in the [QEPDX] section of the QEX.INI file prevents 
Paradox users from getting an error message asking them 
to enter a password while attempting to query a non-
encrypted Paradox file.


Connecting to Paradox

The only logon information required for connecting to Paradox is 
provided by setting the Connect control's pSource property to 
ParadoxFile. However, there are three optional settings that you 
can pass in a connection string using the pLogonInfo 
property:
-REREADAFTERINSERT
-REREADAFTERUPDATE
-COMPAREAFTERLOCK
For more information, refer to the "pLogonInfo Property" section 
in this READ.ME file or in the QELINK.HLP Help file.


>New Setting: LOCKTOREADBLOB

MultiLink/VB version 1.0.1 offers an additional connection string
setting for applications that connect to Paradox. Disregard this 
setting if your Paradox tables do not contain BLOB or memo fields 
or if your MultiLink/VB applications do not display BLOB or memo 
values.

LOCKTOREADBLOB determines whether MultiLink/VB locks 
records containing a BLOB or memo field. The default setting,
LOCKTOREADBLOB = 1, ensures greater data integrity but tends 
to be slow with large Paradox files. Disabling this option by 
setting LOCKTOREADBLOB = 0 improves performance but may cause 
an error to be returned while retrieving a BLOB or memo value.

With LOCKTOREADBLOB = 1, whenever MultiLink/VB reads a 
record containing a BLOB or memo field, MultiLink/VB locks the 
record, duplicates (clones) the corresponding BLOB or memo field, 
and then unlocks the record. This precaution ensures that the user 
receives a consistent snapshot of a record and its corresponding 
BLOB or memo field and prevents an error message from being
displayed.

With LOCKTOREADBLOB = 0, MultiLink/VB neither locks the record 
nor duplicates the BLOB or memo field. This setting causes MultiLink/VB 
to return an error in the following situation:
- user A reads part of a record with a BLOB or memo field. 
- user B reads the same record and updates the BLOB field of this 
 record 
- user A attempts to read the BLOB or memo field in order to finish 
 reading the record but receives an error.
When this sequence occurs, MultiLink/VB displays error 30040, 
"Error on input or output to file: Another user modified the BLOB."

NOTE: If you receive this error message, you must re-execute
the query.

To set LOCKTOREADBLOB, you can either pass it as a 
connection string in the pLogonInfo property or set it in the 
[QEPDX] section of the QEX.INI file. To pass a connection string, 
you could use this line: 
Connect1.pLogonInfo = "LOCKTOREADBLOB=0"
Or, you could add the following line under [QEPDX] in QEX.INI:
LOCKTOREADBLOB=0


>Password Protection

The limit on the number of passwords that Paradox can manage 
is 50, not 25.


>Access an Encrypted Paradox File

Add this information at the end of the section. If the Add 
Password statement is not passed to an encrypted Paradox file, 
MultiLink/VB displays a dialog box prompting you for the password. 
Enter the Password exactly as it was entered in the ENCRYPT 
statement.


*Select Statement - Constants

For Paradox, the two logical constants are 1 for True and 0 for 
False, rather than .T. and .F. as stated in the User's Guide.


Chapter 21--SQL Server Databases

Restriction on Data Lengths

MultiLink/VB has a limitation on the maximum length of field values
that can be stored in a SQL Server database. You cannot insert or 
update field values with length greater than approximately 64 
kilobytes. The length of binary data, including bitmap pictures, 
is limited to approximately 32K.


End of READ.ME file
