CapeSoft.Com
Clarion Accessories
File Manager 3
Documentation
CapeSoft Logo

CapeSoft File Manager 3
Documentation

Download Latest Version JumpStart FAQ History
Installed Version Latest Version

Introduction

File Manager 3 (aka FM3) builds basic automatic file management into your program. It is designed to be a part of your application, not a separate utility. FM3 supports a growing number of file drivers and backend databases. FM3 also supports data conversion between file drivers.

Supported Databases: * PostgreSQL is limited to Clarion6 and up.

FM3 also endeavors to support SoftVelocity's Dynamic File Driver (DFD). This driver is still reasonably new (as of the writing of these docs), and therefore has gone through a few changes between versions, often resulting in FM3 needing to find a new way to support them. Support for the In-Memory Database Driver (IMDD) is superfluous to FM3.

FM3 consists of a Template and a DLL.

Main Features include:

Limitations:

Note: Normal Groups, and normal Arrays are supported. If using Clarion 6.x or higher, then BLOBs are supported (including conversion from TPS to SQL).

Installation

It is vital that you follow the complete instructions for installing FM3. As per CapeSoft standard, File Manager 3 adheres to the standards specified by the C3PA (Clarion 3rd Party Association). In Clarion 7 and up, you may be required to run the following Template Utility (some folks setup does not do this automatically). Complete the installation as follows:

Running the Template Utility

Note: We highly recommend upgrading!!

Notes on the Template Utility:

New Users

If you are using FM3 for the first time, pay attention to these details, and follow these recommendations.

Before You Start

Getting Started

Where to from here?

New to SQL?

FM3 makes a conversion from TPS to SQL very much easier than any other method, BUT... SQL is a whole new ball game as it were. Do not add FM3 straight off and expect it to do what you want. It is vital you have done some research into SQL. Specifically how it works with Clarion, what some of the oddities are, and how they can be overcome with various tips and tricks. If you are expecting your dct and app to stay the same for a SQL backend, then you're being a little too optimistic. SQL opens up a whole new world to your programming, and will be a very powerful tool, once used correctly. The nature of SQL is quite different to flat file systems such as TPS, and comes with more options or "variables in the equation" as it were.

Below are a few tips of where to start with Clarion / SQL programming, and then some FM3 specific tips and tricks.

Examples

File Manager 3 ships with a wide selection of examples. It is highly recommended you go through these examples before attempting to use FM3 in your own apps. It is important to have an understanding of the basic setups of FM3, as well as seeing it in action. If the examples work, and you follow our documentation for use, then your applications will work too!

You will find the examples installed in your examples\FM3 folder (you can specify the base folder to install the FM3 examples to when you run the FM3 install).

In order to get the examples working, you need to install the relevant database server (preferably onto your local machine as this will omit connectivity problems that may occur). Check the Firebird tips for some pointers on installing a Firebird server and database.

Jump Start

Keen to get started? Then this section is just for you - the basics on how to get FM3 into your application as quickly and simply as possible.

Adding FM3 to your application

Follow these simple steps below. If you're an FM2 user upgrading to FM3, then check out the Converting your FM2 apps to FM3 section in the docs.

Please note: At this point, please ensure you have completed the installation process by running the Support ABC Template Utility! In Clarion 6 and earlier, you do this via the Application | Template Utility menu in the IDE. In Clarion 7, use the Template Utility button (a cog wheel icon). Then select the SupportABC template utility in the utility templates list.

Step 1. Adding the Global Extension (multi-dll apps do this in the data dll)

Step 2. If you're using a SQL backend - you must add the SQL_Connect window (multi-dll apps do this in the data dll)

Step 3. If you're using AutoBUILD/AutoFIX, then add the RuntimeFileManager procedure

The Alternative - creating a separate application to handle file conversions.

What to do in your Dictionary

That's basically all you need to add to your application. To find out more detail on the different aspects of FM3, read the following documentation sections: AutoUP, AutoBUILD, AutoFIX and AutoNET. Oops - before getting too excited, don't forget to read The Rules.

To find out what you need to do the first time you deploy your FM3 application, check out the UPGFile section.

The RULES!!!

Here are the RULES! If you break them, then you're on your own! If you obey them, you're well on your way to being a very happy customer with friendly support! <g>

AutoUP

Short Description: Automatic Runtime File structure upgrading, and converting.

AutoUP Contents

Who should implement AutoUP?

Description

AutoUP allows your program to automatically upgrade it's own data files when they need to be upgraded. This means that all you have to do is change the dictionary, re-compile and distribute. AutoUP will do the rest.

When you change your dictionary you can change anything. The file driver, the password, add fields, remove fields, change keys, make arrays bigger or smaller etc. You can also change field types, including memos and strings etc.

AutoUP will also create the file if it does not exist. For this, please ensure the CREATE file attribute is on (if you don't want to do this in an SQL app, then checkout the FAQ section).

Currently UnSupported Structures

Note: Ordinary Dimensions, and ordinary Groups are supported!

Implementation

Before applying AutoUP, make sure you have assessed your current situation, and read the relevant documentation. AutoUP works differently in different applications, and it is vital you have an understanding of some of these things before attempting an upgrade. For example, AutoUP is applied differently between ABC and Legacy application, Single exe and Multi-DLL, and even between different file drivers. Please follow the instructions for your specific scenario.

If you haven't already done so, run through the Jump Start section of this document.

Adding AutoUP to your Single exe ABC Application

On the Global Extension, AutoUP Tab, check on the file drivers used in your application, including any you have used in the past. Goto Template Reference: FM3 global extension template for more details.

Adding AutoUP to your Multi-DLL ABC Application

Note: SQL users in Clarion 6 Gold: Due to a bug in Clarion 6, it is recommended you add the FM3 Global Extension to the main exe app as well as the DATA dll. Make sure you check on the necessary driver support, but leave the Connect Procedure Blank! This will allow your program to be properly terminated, instead of the process hanging at 90% CPU.

Adding AutoUP to your Single exe Legacy Application

Adding AutoUP to your Multi-DLL Legacy Application

Adding AutoUP to your IP Driven Application

NOTE: It's a good idea to use a variable for the connection string for the IPServer (i.e. in the owner field). Otherwise, if you need to change it, FM3 will think you're making a file change and request a version number increment.
NOTE: You must copy the FM3 dll (c6fm3x.dll for Clarion6 applications located in the Clarion\3rdparty\bin directory) to the ClarionDataServer directory (where the Clarion IPDriver Server resides). If your data server dll resides in a route directory, then the fm3 DLL must be in that directory as well.

Some additional cases:

Case 1:
Note: If you would like FM3 to manage local client-side files, then leave FM3 in your data dll or exe, and check the IPDriver check box on the Global extension.

Case 2:
If you have applications that use the TPS files on the IPserver as local TPS files, then these applications will need to use the upg.tps file that exists in the IPServer database. These applications can be treated as normal TPS applications (where adding FM3 is concerned). If you have Multi-Proj, then you can use the Driver Substitution feature to make 2 exes from the same application - one that is IPDriver enabled and one that is TPS enabled. Otherwise you will need 2 apps - one for IPDriver and one for TPS.

Case 3:
Your data does not exist in the directory in the IPServer where your data Server DLL resides. Insert the following code into your IPServer DLL (in the 'FM3 Global Embeds | Start of Initialization section' global embed point):

ds_SetUPGPath(<subdirname>)   !<SubdirName> would be set to 'Data' to exist in the (for example) c:\ClarionDataServer\Data directory).

Case 4:
You have data both locally and at the IP Server. You would like to access the IP Server only if there is a connection available.
At this stage, the table management is not optional at application level. In order to cater for this situation, you need to pull FM3 out of your application and make 2 separate applications for upgrading - one for the IPServer files, and one for the local files. In each app, you need to turn the Generate all Files checkbox off (This is on the Global Properties), and manually force the compiler to generate each IPDriver file (for the IP Driver management app) and then for each TPS file (for the local upgrade app) - also on the Global Properties - Individual File Overrides tab. On the Runtime File Manager of each new application you have just created, you'll find the RuntimeFileManager Control Template. Set the Use Files option to Files Used in this APP.

Known issue: Once adding FM3 to the IP_Server Dll, a Memory Block free'd twice error occurs on unloading of the dll. We are not certain of the cause, but this will only occur when you close the IP_Server Dll. The message will remain for about 20 seconds, and then disappear harmlessly. Not recommended: Further to this, you can set your IPREQ service to not allow interaction with the desktop. This will ensure the error is not visible - although be careful, because if you have any errors, they will not be displayed, so Possible file upgrading without changing the version number errors will cause your DLL to freeze on the IP Server.

AutoUP and the Dynamic File Driver (DFD)

Because the majority of DFD usage is using handcoded data structures, you will need to handcode the FM3 functionality

The alternative - Creating a Separate Upgrading Application

Many times it's a good idea to have a separate application to upgrade your datatables. This means that the upgrading of the tables is done once at a scheduled time. Normally you would run this application from your program install, as one of the last thing the installer does. You can do this very easily as follows: NOTE: If you don't want the create attribute on in your dct for your tables that must be upgraded, then you can remove FM3 from your main application (you will need to build your owner string if you're using SQL manually), and Set the Applications Global Properties | File Control | Create to "Create:None". In your FM3 upgrader application, you can set this to "Create:All"

Where to from here...Assess your scenario:

You are adding AutoUP to a new Application.
You are ready to run your application, make file changes, etc. Now read about How to make file structure changes.

You are adding AutoUP to an existing Application.
The key here is that you do not already have an Error 47 or D00001 Invalid File Declaration present. This is especially important for TopSpeed and Btrieve files. AutoUP keeps a history of every file structure, and uses this to upgrade from the old structure to the new structure. It cannot do this if the file structure is already wrong. These structures are stored in the upg.tps file. Here are a list of suggestions for getting around this: The key is that there should be no Error 47 or D00001s upon initial running of your AutoUP enabled application.

You are ready to run your application, make file changes, etc. Now read about How to make file structure changes.

You are adding AutoUP for a cross-driver conversion (e.g. TPS to SQL).
Please ensure you have first read the "You are adding AutoUP to an existing Application" section.
If converting to a SQL backend, it is recommended you read the SQL Tips and Tricks section, as well as Converting your application to SQL.

You are ready to run your application, make file changes, etc. Now read about How to make file structure changes.

You are adding AutoUP to a DET or DEF Application.
DET Users should follow any Legacy specific code unless otherwise stated.
DEF Users should follow any ABC specific code unless otherwise stated.

You are ready to run your application, make file changes, etc. Now read about How to make file structure changes.

How to make basic file structure changes

As mentioned previously, you can change almost anything in your file structure. You can change datatypes, increase and decrease data lengths, add and delete fields and keys, memo to string and vice versa, etc. Please take note of the Limitations you can make to changing file structures.

Changing a File Structure

How to add / change the file version number

In some cases, there may be a little more to be done, but for the most part, this is all you need to do:
Important: Make sure you increase the version number every time you change the dictionary. If you forget, a warning messages will be displayed the next time you run the app. It is strongly advised that at that point you end the program, and go back to the dictionary, increase the version number without making any further changes, and re-compile.

Notes:

How to change a file name

As mentioned above, in some cases of file structure changes, a little more info is necessary to enable FM3 to perform it's duty. In cases where you change the name of an object such as a file, you need to tell FM3 what the OldName was, so that it can match it up during upgrade. To do this, after changing the file name, add the following string user option to the file properties options tab:

Property Value
OldName MyOldFileName.tps

or for Clarion 8 and up:



Note: No quotes should be used!

You can make additional oldname attributes by adding a sequential (up to 14) number to the end of the attribute. This is useful if you find you're having to rename a file again (which is especially useful when upgrading to SQL):

Property Value
OldName MyOldFileName.tps
OldName1 My2ndOldFileName.tps
OldName2 My3rdOldFileName.tps

How to change a field name

As mentioned above, in some cases of file structure changes, a little more info is necessary to enable FM3 to perform it's duty. In cases where you change the name of an object such as a field, you need to tell FM3 what the OldName was, so that it can match it up during upgrade. To do this, after changing the field name, add the following string user option to the field properties options tab:
Property Value
OldName MyOldFieldName1
OldName1 MyOldFieldName2
OldName14 MyOldFieldName14

Note: No quotes should be used.

You can have up to 14 old field names listed.

How to change the file prefix

WARNING!! This is NOT recommended for use, but is documented for use when absolutely necessary. Please contact  before attempting this change!

Changing the file prefix was previously not allowed in FM3. FM3 uses the file prefix as a unique identifier for the file in the upg.tps file. We have now added the ability to change the file prefix. However, this is not advised! If you change the prefix, you should not use the old prefix for any future file, as this could cause error 47's. FM3 will still associate this old prefix with the original file. Also, this will only work if your new prefix is alphabetically directly after the the old one! If you must change the file prefix, after changing the file prefix, add the following string user option to the file properties options tab:

Property Clarion 8 Property Description Value
OldPrefix Old prefix for the table OldPRE

Note: No quotes should be used!
Note: Do not make any other changes to the file while performing this upgrade!

For more information, and syntax differences in Clarion versions, read the Dictionary User Options section.

How to prime new fields

When you add a new field, it is quite common to want that field to be filled with data for all existing records in the file. AutoUP provides an easy way to do this. Go to the Properties dialog of the field you've added, and on the Options tab, add one of the following:

To prime a field with numeric data

Property Clarion 8 Property Description Value
SetIfNew Default value of the field when added to the table 44

To prime a field with character data

Property Clarion 8 Property Description Value
SetIfNew Default value of the field when added to the table Hello World!

To prime an autonumber field

AutoUP can automatically prime a new autonumber field for you. It will start at 1 and increment by 1 for each record.

Property Clarion 8 Property Description Value
SetIfNew Default value of the field when added to the table AutoNumber

Note: SetIfNew AutoNumber is not supported in SQL. Check out AutoNumber in the Dictionary User Options for more details.

To prime a field with an existing fields data

In some circumstances, you may want to prime your new field with data from an existing field. A common example of this would be adding a new Postal Address field, and priming it with the existing PhysicalAddress field.

Property Clarion 8 Property Description Value
OldName Default value of the field when added to the table PRE:FieldName   (For SQL files, use the SQl fieldname as it appears on the backend)
Note: This variable will be set ONCE before each file conversion, so the same value will be populated into the new field for each record changed. If you are wanting to populate each variable with a unique value, then you need to implement a callback procedure. Follow the steps in FAQ34 to change values during the file upgrade.

Tip: To prime a field with an existing field in the same table's data, use the oldname user option of that existing field.

NOTE: For SQL files, using this will move the data from the one SQL field to the other (in accordance with the renaming field feature) - unless the oldfield still exists in the dct. If the old field exists (in the dct) then the data will be copied from the one filed to the new field, otherwise the oldfield will be renamed to the newfield (and not exist on the backend).

To prime a GUID field

AutoUP will automatically prime each empty GUID field it finds during upgrade. The field must be named GUID, or PRE:GUID and must be a STRING(16). NOTE: Not available for SQL files at the time of writing this doc.

To prime a field with a value from a function

AutoUP can automatically prime fields using a function (or variable). Note that you need to prime variables for this function before FM3 initializes:

Property Clarion 8 Property Description Value
SetIfNew Default value of the field when added to the table ' & today() & '
Note: This function will only be called ONCE before each file conversion, so the same value will be populated into the new field for each record changed. If you are wanting to populate each variable with a unique value, then you need to create a process to run through the file and populate the new field with a variable.

How to add / change a file password (Owner)

For non-SQL drivers, the owner attribute serves as a way to password protect your files. For SQL, the Owner attribute of a file serves as a connection string. (For converting an encrypted TPS file to SQL, use the OldOwner user option)

For security reasons, it's better to use a variable for this value, and prime it inside your program. In order for FM3 to be able to manage the file correctly, you'll need to prime this variable before FM3 Initialisation. The best place to place this code would be in the Program Setup Embed with the Priority set to 2000. Please note, this priority must be set less than 3000 thousand to ensure it executes before FM3 Initialisation. Alternatively, you can place it in the FM3:Start Of Initialisation Embed.

NB: If you are adding or changing the password for a file, it is absolutely necessary to change the name of the file too, to allow FM3 to continue managing the file. See Changing the name of a file above for more info.

To set the owner attribute as a variable, place an exclamation mark ("!") in front of the variable name. For example:


For more information on the SQL Connection String, see the SQL Reference.

AutoUpLimitations

See also the SQL Reference for SQL specific limitations.

General:
BTrieve Specific:

Dictionary User Options

Introduction

Dictionary User options are a nifty feature in Clarion that allow you to declare and prime custom variables for use in custom templates. These user options are available at all levels, including dictionary options, file options, field options, key options, and relation options. To add user options to the dictionary, you go the Options tab of the desired object's properties (so either in the file user options for the file property and so on for the others). You can select what datatype the option should be, and then give it a name, and a value. The datatypes available are String, Boolean, Integer, and Ini. All FM3 User Options use the String type. The most common FM3 user option is of a String type. It belongs at File level, and is called Version. Here's a few screen shots demonstrating this:

dictionary user options screenshot

Right click on your file, and select properties.

table user options screenshot

Go to the options tab, right click on the list box, and select insert.

pre-defined user options screenshot

Ensure that the String radio is selected (Clarion 7 and below) or Predefined (Clarion 8 and up), and then type the name of your user option (Clarion 7 and below) or select from the list (Clarion 8 and up).

Finally, click in the right hand column of the list box, and set it's value.

The following section is the FM3 User Option Reference. Level refers to the object properties you need to use - ie, file, field, key etc. So, if you need to add a Field Level User option, go to the field properties dialog, and select the option tab there.

Dictionary User Options Quick Reference

Here is a Quick Reference guide to all FM3 User Options.

Property Type Value Level Example Notes
Dictionary/FileUser Options:
DisableUniqueKeyNameCheck String (0) / (1) Dct Disables the unique keyname check assert.
DctMasterFields String (0) / (1) File/Dct

DctMasterKeys String (0) / (1) File/Dct

AddDateTimeChangedTriggers String (0) / (1) Dct    
CreateConstraints String (0) / (1) Dct Create constraints instead of indexes when using DCTMasterKeys.  
File User Options:
Version String (current value + 1) File

OldName String (OldFileDiskName) File OldName MyOldFile.tps
OldOwner String ('OldOwner') File OldOwner 'MyTPSOwner' or GLO:TPSOwner
FM3IGNORE String
File

IgnoreDriver String
File

TableSpace String
File

OldPrefix String
File

NoAutoNameCheck String
File Disable the unique disk filename check
File:AddDateTimeChangedTrigger string (0) / (1) File Override the dct option if necessary
Field User Options:
OldName String (OldFieldName) Field OldName PRE:OldFieldName
SetIfNew String
Field
For SQL builtin functions, prefix the function with SQLFUNC_ - eg: SQLFUNC_getDate()
RealField String
Field

UnRealField String
Field

AutoNumber String (1) / (1,1) Field MSSQL takes seed, increment. Other backends (that don't support seed) can simply use the increment value. Take a look at Server side Auto-incrementingfor details.
DctMasterField String (0) / (1) Field

ForceSQLDataType String (SQLDataType) Field ForceSQLDataType Binary
CaseSensitive String (0) / (1) Field Forces a case sensitive collation in SQL






Key User Options:
IndexSpace String (0) / (1) Key

ZeroNull String



DctMasterKey String (0) / (1) Key

IgnoreDuplicates String (0) / (1) Key For SQL: Does not post an error when an insert fails due to a duplicate record insertion.

Dictionary User Options In Detail

Version

This is the most important user option of the lot. In order for FM3 to maintain a valid history of the data structures for a file, it must keep track of the file version. This is a STRING user option added at FILE level. You must increment the value of this user option after every change made to that particular file. When you first declare a file in your dictionary, you do not have to add this user option, as FM3 will assume the file is new, and therefore at version 0. The next time you change that file structure, you must increment the version number by at least 1.

Dictionary > Right Click on file > choose Properties > Select Options tab > Right click on list box > Insert > Select String type > Set the label to Version > Click OK > Click on the right hand side of list box in line with the Version label > set value to 1 (or n + 1).

For more information: See How to make basic file structure changes.

OldName(File Level)
When changing the physical name of a file, the OldName user option should be added to the FILE level options. It should be of STRING type. The label should be OldName, and the value should be the name of the previous file.

If this is a constant, then your OldName user option should like this:



(Note the lack of quotation marks in the value)

If the name of the old file must be a variable, then you can enter this in the value as follows:



(Note: You must prime the variable before FM3 initializes.

For more info, check the How to change a file name section of this doc.

OldName (Field Level)

When changing the name of a field, the OldName user option should be added to the FIELD level options. It should be of STRING type. The label should be OldName, and the value should be the old field name INCLUDING the file prefix- e.g. :if changing the Product Name field from ProdName to ProductName, then the OldName user option value would be PRO:ProdName (where PRO is the Product file prefix). NO QUOTATION MARKS SHOULD BE USED.

For more info, check the How to change a field name section of this doc.

OldOwner
When changing the owner of a file (this is particularly useful when upgrading an encrypted TPS file to SQL), the OldOwner user option should be added to the FILE level options. It should be of STRING type. The label should be OldOwner and the value should be the old encryption password of the TPS file. You'll need to use quotes (for a constant) - or a variable name (the variable must be set before FM3 Initializes). Note: you cannot use this feature to upgrade encrypted clarion dat files to tps.

Note: When using this feature to remove the encryption from a tps file, you must change the name of the file (see OldName feature) simultaneously. You can only change the owner once for each file (i.e. you can't have more than one oldowner user option for each data file).

SetIfNew
This option is used when priming data into a newly added field. Check the How to prime new fields section for more details.

UnRealField (SQL)
This is a SQL Specific User option, and is used specifically when converting from TPS files to SQL files. This option should be added to the String(8) field that is mapped to a SQL datetime. This string should have a group following containing a Clarion Date and Time field. This group should be declared OVER the string. This is a FIELD Level user option, and does NOT require a value. Not being created correctly? Check GQ1 in the FAQ section

RealField (SQL)
This is a SQL Specific User option, and is used specifically when converting from TPS files to SQL files. This option should be added to the Date AND the Time fields that are part of a group. This group should be declared OVER a String(8) that is mapped to a SQL datetime. This is a FIELD Level user option, and does NOT require a value. Not being created correctly? Check GQ1 in the FAQ section

AutoNumber (SQL)
This is a SQL specific user option. It tells FM3 to create the relevant backend autonumber support on the SQL backend. For example, in MSSQL, it creates an Identity field. Add this user option at FIELD level, and of String type. Set the value to 1.

For MSSQL, you can choose to use the alternative syntax in order to prime the seed and increment values. For example a value of 200,3 will result in the autonumber field starting with a value of 203, and incrementing by 3. Most common, and most recommended is to set the increment to 1. e.g.: 1000,1 will start at 1001, then 1002, then 1003 etc. If you just leave the default syntax (1) then the seed and the increment will be 1.

For other backends, only the increment portion is relevant, so you need just enter (1) for an increment value.

Note: You can only create an Identity field. You cannot convert an existing data field into an auto-numbered field.

Not being created correctly? Check GQ1 in the FAQ section

Take a look at Server side Auto-incrementing for details on implementing the full solution.

TableSpace (SQL)
This is an Oracle Specific User option, and it sets the TableSpace for your oracle TABLES. This is a DICTIONARY or FILE Level user option of String type.

For more information on the option: See Oracle TableSpaces in the SQL Section.

IndexSpace (SQL)
This is an Oracle Specific User option, and it sets the TableSpace for your oracle INDEXES. This is a DICTIONARY, FILE, or KEY Level user option of String type.

For more information on the option: See Oracle TableSpaces in the SQL Section.

ZeroNull(SQL)
This option is used when converting TPS to SQL. TPS does not support NULL. SQL does. In SQL NULL is not the same as zero or blank. This option tells FM3 to treat 0 and Blank data from TPS as NULL, and not insert a 0 or blank in the backend. This option can be used a DICTIONARY, FILE, and FIELD Level.

For more information: See the Hot Tips section in the SQL Section.

OldPrefix
WARNING!
This action is not recommended unless absolutely necessary. In order for this to work, you must follow the rules. This is explained in detail in the AutoUP Section. For more information: See How to change a file prefix.

IgnoreDriver
This option is used when converting Clarion DAT files to TPS.

For more information: See Ignoring Pre-Existing DAT files in the Overrides Section.

FM3IGNORE
This FILE Level user option surprisingly enough tells FM3 to categorically ignore the file. FM3 will not manage this file at all. If the structure changes, you will get an error 47 or D00001. It's a String type, and takes no value. The existence of this user option means the file is ignored, regardless of the value.

CreateConstraints  (SQL)
This option (if set to 1) will force FM3 to create your unique keys as constraints on the backend if you are using DCTMasterKeys = 1 (which will default to creating unique keys as indexes).

AddDateTimeChangedTriggers  (SQL) and File:AddDateTimeChangedTrigger (SQL)
This option (if set to 1) will add a trigger to the file on the SQL backend to stamp the changed date and time of the SQL file into the gMSSQLFile (that matches that table). This is useful if you are caching tables and need to know when to refresh the table. You can store the date, and just check the stamped date when you need to check whether to refresh the table or not. Your prop:sql to check the file would look something like:

MySQLDummyFile{prop:sql} = 'select ds_field1, ds_field5 from dbo.gMSSQLFile where ds_field1 = ''dbo.MyFile'''

ds_Field5 would then contain the datetime (in currenttimestamp format).


DctMasterFields (SQL)
This is a DICTIONARY and FILE Level user option. It takes a value of 1 or 0. Please see the SQL Field Management Section before using this user option.

DctMasterKeys (SQL)
This is a DICTIONARY and FILE Level user option. It takes a value of 1 or 0. Please see the SQL Key Management Section before using this user option.

DctMasterField (SQL)
This is a FIELD Level user option. It takes a value of 1 or 0. Please see the SQL Field Management Section before using this user option.

DctMasterKey (SQL)
This is a KEY Level user option. It takes a value of 1 or 0. Please see the SQL Key Management Section before using this user option.

ForceSQLDataType (SQL)
This is a very handy little user option. It's a FIELD Level User option, and does exactly what it says. It will force a certain SQL Datatype on the backend for the field. This comes in handy when wanting use use the Binary Datatype, or the UniqueIdentifier, or force another type for the field. Simply set the value to the desired SQL datatype.

Please note: This leaves the ball in your court to ensure the forced datatype matches, or is compatible with the dictionary structure. In other words, if you try to force a datetime datatype on a decimal field, you will get an error 47 or D00001.

Not being created correctly? Check GQ1 in the FAQ section

If you are supporting multiple backends then checkout the FAQs section on how to Force a different datatype for each backend you support.

DisableUniqueKeyNameCheck
This is a Dictionary User Option that is used to suppress the assert warning that is generated by the template is a key has the same name (external name) as another key.

Some Examples:
ForceSQLDataType tinyint
ForceSQLDataType varchar(50)
ForceSQLDataType uniqueidentifier NULL ROWGUIDCOL DEFAULT NewID()

CaseSensitive
This is a field user option that is used to force case sensitive collation for that field in MSSQL (at the time of writing (in Fm3 v4.91) only MSSQL is supported). In the Clarion dct, Case Sensitive sorting is associated with a key, whereas in SQL, the case-sensitive collation is on the field level. This option is particularly useful for GUID fields (where it is automatically applied). This is to ensure uniqueness of a key that is case-sensitive.

IgnoreDuplicates
This is a key user option (used when converting TPS to SQL) which, when set to 1, suppresses the warning message when an attempted record insertion is performed and a unique key is violated by the insertion. The record is simply discarded. NOTE: You must use an external name for the key.

Overrides

You may, for some reason wish to override FM3's default behaviour. This section provides some of those options, and when and why you would use them.

Ignoring Pre-existing DAT files
FM3 automatically searches for any pre-existing DAT files that you may be converting to TPS. If your application does not have pre-existing DAT files then you can disable the search that FM3 does for them. This is necessary when you have DAT files of the same name as your new TPS files, and they are in the same directory.

For example: App 1 uses file Customer.dat and App 2 uses file Customer.Tps, but the two "Customer" files are unrelated.

  • To set this option for all files:
    • Go to the Global Extension Options Tab.
    • Check on the "No pre-existing Clarion files" checkbox.
  • To set this option for a specific file:
    • Go to the Dictionary.
    • Open the File Properties Dialog.
    • On the Options tab, add the following String User Option:
Property Value
IgnoreDriver 1

Note: For more information, and syntax differences in Clarion versions, read the Dictionary User Options section.

Ignoring a particular file
If you wish to ignore a particular file, for whatever reason, then you can do this by using the FM3IGNORE switch. If you ignore a file then it is removed from FM3's sight, as if it didn't exist in the dictionary. This includes the ability for C-Scan to scan the file, if it is a TPS or Btrieve file. If all you want to do is make it be ignored by the File Manager 3 template then use the "Exclude files" button on the Runtime File Manager Extension.

  • To set this option for a specific file:
    • Go to the Dictionary.
    • Open the File Properties Dialog.
    • On the Options tab, add the following String User Option:
Property Value
FM3IGNORE 1

Notes:
In this case, the value can be left blank.
For more information, and syntax differences in Clarion versions, read the Dictionary User Options section.

Downgrading files
By default FM3 prevents your Topspeed, Btrieve, and SQL files from being accidentally downgraded.

By default it allows downgrading of Clarion files, this is a side effect of the support for pre-existing Clarion files. To disable the automatic downgrading of DAT files, see the Ignoring Pre-Existing DAT files section above.

If you want to force a downgrade of a file for any reason then you can attempt it by placing /Downgrade on the command line when running the program.
For example: c:\myexedir>myexe /downgrade

Here's an example circumstance when this may be required:
  1. Your clients have version 1 of your app (with FM3 enabled).
  2. You ship them version 2. They omit to take a backup of the data before running the new version.
  3. The new program runs and updates one or more files. However there is a major problem in your program necessitating a move back to version 1 of the EXE.
  4. Usually FM3 would *not* downgrade the files from Version 2 status, but if you run the Version 1 exe with the /Downgrade switch then FM3 will downgrade the files back to version 1 level.

The UPG file (Upg.tps)

The UPG file is what allows FM3 to work it's magic! But, how? you ask...trust me, it's magic! <g>
The upg.tps and data strucutures MUST BE IN SYNC before making any additonal changes to the tables are made.

When do I distribute the UPG file?
Case 1: You've got a new app that you are distributing to new clients. You are using any file driver.
What you do: You DO NOT distribute the UPG file. It is created, and managed for you, at the client's site, automatically.

Case 2: You've got an existing app you want to upgrade. The app currently uses Clarion DAT files (maybe it was written in CPD or CDD). You may or may not be converting the data to the Topspeed / Btrieve file formats.
What you do: You DO NOT distribute the UPG file. It is created, and managed for you, at the client's site, automatically.

Case 3: You have an existing app using Topspeed or Btrieve files. You are thinking of doing an upgrade, but you haven't changed any file structures yet.
What you do: Before changing the file structures, add FM3 to your app, re-compile and distribute. You DO NOT distribute the UPG file. It is created, and managed for you, at the client's site, automatically.

Case 4: You have an existing app using Topspeed or Btrieve files. You have already changed some file structures in the dictionary since you distributed the program to your clients.
What you do: If you can revert to Step 3 then do so.
Alternative 1: Add FM3 in the normal way. Upgrade the existing clients to the new version using one of the older methods (i.e. using the CW IDE or Conversion programs). From then on later versions will upgrade automatically. If you were using the DC Data Convertor templates, then this is probably the route you'd take. Make your last data convertor conversion application. You can either include this in the installer - and only run it when the installer does not find the upg.tps file, or handle the clients on a case -by-case basis (i.e. manually). You will then need to ship the upg.tps file in your installer (with version 1 records in it) - and only install it if the upg.tps file does not exist already.
Alternative 2: Add FM3 in the normal way. Compile a version of your app using the OLD dictionary structure. Compile and run the EXE. Distribute the generate UPG.TPS file to the existing clients with the next upgrade. You do not need to ship it to new clients, or to clients who have already received it once. Make sure that in your install, you set the installer to only install the UPG.tps file if it is non-existent on the clients machine.

Forcing the position of the UPG file?
By default the UPG file is placed in the application directory, in the same place as the calling program. In certain circumstances you may need to override this. If for example you access the data from a number of EXE's, stored in different locations, or if you don't have write access to the application directory, then it makes sense to store the UPG file in the data directory.

In fact, there is a strong case for getting the UPG file to appear in the data directory.

Here are some of the advantages for this:
  • When the user backs up the data the UPG file is also backed up.
  • If you take a copy of the users data for support reasons then the UPG file is included.
  • On a network, the data directory is likely to be shared, but the application directory would probably not be shared.

To set the position of the UPG file, use the ds_SetUPGPath() function. This should be called in the FM3:Start Of Initialisation Global Embed. Note: you must load the path (if you're using a variable).

Note for SQL users: If you are using SQL, then one cannot store the upg.tps file with the data, so it needs to be stored somewhere else. Here are some options:

  1. Option 1 is to have a common directory that all the users can access (although this isn't always possible with an SQL backend).
  2. Option 2 (if your user's exes don't all have access to a common directory) is to assign an "always install from this machine" that keeps a local copy of the upg.tps file that it references - and then run the conversion application from the installer.
  3. Option 3 (if you don't have the ability to restrict which pc the user installs on) - if every installed copy of the app runs every version - so even if each install maintains their own copy of the application, it doesn't matter who installs from where, because they all will have an up-to-date upg.tps file (albeit multiple copies of the upg.tps file).
  4. Option 4 (if there's a possibility that they will run the update from a machine that did not install the last update - and has not run the exe since the last update) then you will need to ship a default upg.tps file with all the possible versions in - although this is definitely the worst possible option.
Some more details regarding the UPG.tps file For those that care:
The versions contained at the client site are the ones that have been entered into his UPG file. He doesn't need other structures (other than that match his dataset) - but if his data structures are not in the UPG file, he'll error 47 or D00001.

IOW if your UPG.tps file in your install does not contain version 3 (but does contain 1,2,4,5,6,7) - and his does (even if it only contains version 3) and his file is version 3, then when you overwrite the UPG.tps file at the client site, it won't be able to upgrade because the UPG.tps file will not contain the matching version 3 file structure.

Let FM3 maintain the UPG.tps file at the client's site.

Miscellaneous

Support for Multiple data sets
Non-SQL:FM3 does support multiple datasets as is (for Non-SQL files). However, it may be a good idea to keep a upg file for each dataset, thus ensuring backup and restore integrity. Generally, changing the data path within the application is done by calling SetPath() or FileDialog(). Simply ensure that for each of these function calls within your program, you call ds_SetUPGPath() directly afterwards to ensure a upg file is created, and maintained in the working directory. You'll need to call ds_CloseUPGFile() before setting the path as well.

SQL: FM3 can only manage 1 SQL database at a time. This is determined by the connection information given on the FM3:Connect To SQL Backend Extension Template. Your program can still access files contained within other databases, but FM3 is not able to upgrade them. To upgrade files in a different database, restart the program, connecting to the required database. Alternatively, you can create a separate conversion application specifically for the other database, and run the conversion application form your installation program to upgrade that database's table structures.

Note: FM3 will still upgrade all non-SQL files if necessary while running your program on an SQL backend.

Very Large Dictionary Support
If you have a very large dictionary, and possibly a lot of Aliased files, together with FM3's initialisation code, this could extend the allowed size of a Clarion module. In such cases, you may receive an error such as: Link Error: Too many segdef in file Error(6): cif$fileclose The handle is invalid.

First thing to try is to clear all your obj and obj32 directories, restart your machine, ensure you are compiling in 32bit mode, and try again. If the error persists, read on.

In such cases, you will need to separate FM3's init code into a few blocks. The VLDS:FM3 Init Code Template does just this!

To add the VLDS:FM3 Init Code Template:
  • Create a new soure procedure named FM3InitProc. (Don't forget to check the 'Declare Globally' checkbox on the procedure's properties).
  • Open the embed editor, and add the code template VLDS:FM3 Init to the Procedure Code (or Process Code) in this source procedure.
    This prompts for 2 values: Start and End. It also contains a check box called Generate File Loop Only? (You can ignore this unless you're an avid handcoder that want's to do the coding yourself).
  • Start is the alphabetic character of file names to start generating from (typically "A"). and
  • End is the Last alphabetic character of file names to generate init code for.
    It may well be that you'll need to split the init code into more than one procedure (if after making one procedure you're still getting the Too many Segdef error).
    If this is the case, then you would break the init code by specifying smaller alphabetic ranges for each init procedure.
    E.g.: FM3InitProc might be "A" to "M", and FM3InitProc2 would follow on from "N" to "Z".
  • There is also a "File Loop Only" check box. This is to specify whether to generate all init code, or just the file loop.
    For the first init code template, you would leave this box unchecked,
    but for any further init code procedures you declare, you'll need to check this box on,
    to ensure you're not calling other FM3 init code more than once.
  • When you're done adding your init procedures, you need to go the Global Extension Options Tab, and specify the init procedures to call (in the Very Large Dictionary Support group).
    • On the Global Extension Advanced Tab, Add in each FM3 Init code procedure in order in the Very Large Dictionary Support section.
      Screenshot:


How to handle a pre-existing Error 47 or D00001
We STRONGLY recommend adding FM3 to your program while it "still works". i.e., no existing error 47's. File Manager 3 keeps a history of the file structures in it's upg file. This allows it to upgrade the file later on. If your program is already in an error 47 or D00001 state before adding FM3, it will not be able to interpret the structure. This is particularly important with TPS files. It is recommended for all flat file systems though at least. In some cases FM3 should be able to handle the pre-existing error 47 in SQL files.

If you do have pre-existing error 47, study the various options, and follow these steps to solve the problem and allow FM3 to maintain your database from here on out.

Option 1 - Undo the changes you made in the dictionary.
  • If you have a backup of the program in non-error 47 or D00001 state, restore that version, and add FM3 to the program there.
  • Alternatively, if you are aware of the changes you have made to the dictionary to cause the error 47, and it is easily undone, then do so.
  • If you are unsure of the structure of the current TPS file on disk, use TopScan to view the file structure.
    E.g.: TopScan File > File Layout.
Option 2 - Manually create a conversion program.
  • Using the before and after file structures, you can manually create a conversion program in Clarion.

SQL (for FM3 users)

SQL enabled apps with FM3 sometimes require a little more help from you the developer to perform it's duties. Unfortunately, there may be some mindset changes to make in terms of database design and best practices, as Flat-file systems in Clarion are quite forgiving. Before attempting a SQL enabled app, please read through our FM3 SQL Documentation.

If you are adding FM3 to a new SQL application, then you can pretty much follow the AutoUP Implementation without a problem.

If you are converting to SQL, make sure you have familiarized yourself with the Example apps shipped with FM3, and read all the necessary documentation. If the example apps don't work, it's pretty safe to assume that your app wont, so get to grips with them first.

Adding the Connect procedure
  • Ensure you have added the FM3 Global Extension.
  • Run the 'Import the SQL Connect procedure' template utility. You'll need to set the Global Owner variable in the SQL_Connect window's "Connect To SQL Backend" Control Template prompts. To do this, double click on the SQL_Connect window and click on the "Connect To SQL Backend" control template to bring up the prompts and enter the Global Owner variable in the field provided on the General tab.
  • In your FM3 global extension template, on the Auto Up tab, set the "SQL Connect procedure" to 'SQL_Connect' (i.e. the new procedure that the template utility just created).

AutoBUILD

Short Description: Basic Database File Management built into your application.

Who should implement AutoBUILD?

  • Anyone wanting to implement AutoFIX.
  • Those wanting to perform a check and upgrade of all files at once, as oppose to each file converting when first accessed in a browse for example.
  • Those wanting to provide an effective, and easy way for their users to do their own database management when required.
    Note: This is helpful in Support scenarios.

Description

AutoBUILD adds basic Database File Management routines to your application. It presents you with a list of your data files and then allows you to do basic file maintenance on files you select. To select specific files, click on the file label in the list box.

DET Users Note: For maximum compatibility with DET you will need to make a slight modification to the FM3.TPL file. This change will be required if you are using DET's variable file name feature. The FM3.TPL file is located in your \clarion5\3rdparty\template directory and contains instructions at the top of the file on the change required.

Runtime File Management functions described

  • Tag All: Mark ALL files to be managed.
  • Untag All: Clear ALL Marked files.
  • Build: Rebuild KEY files (applies to flat files only).
  • Pack: Remove deleted records from the files (applies to flat files only).
  • Release: Unlock held records. This is probably obsolete in most circumstances, as the technique of locking/holding a particular record is no longer encouraged. You would only use this function where you have used the hold function to hold a record before performing an operation. If your application GPFs before the record was released, then the record would remain held. You can almost certainly hide this button in your application (applies to flat files only).
  • Fix: Call TPSFix to Fix corrupt TPS files (This must be enabled on the Global Extension - Goto Template Reference: FM3 global extension template for more details) (applies to TPS files only).
  • Freshen: Create a new file and copy all the old records out the old file and put them in the new file (applies to flat files only).
    This effectively removes all duplicate entries (which might be causing the Build to fail) and also can act as an effective fixing of possibly corrupted files.
  • Info:Examine number for records in the file.
  • Create: Create a non-existent file.
  • Export: (Optional, requires xFiles or jFiles.) Exports table(s) to XML or JSON format.
  • Import: (Optional, requires xFiles or jFiles.) Imports table(s) from XML or JSON format.
Some additional guidelines:
  • Build is useful for updating key files (particularly in Clarion dat files) - when keys need to be rebuilt because the key file has got out of sync with the data file.
  • Freshen is the best for fixing files, for getting rid of deleted records, and re-building keys all in one.
  • Fix must only be used if the file doesn't come right with Freshen. Don't use Fix on working files, as it can sometimes corrupt them. Fix is your last resort.
  • Import and Export are optional and require xFiles (for XML) and/or jFiles (for JSON) support. See below for more information.

Implementation

If you haven't already done so, add the FM3 Global Extension.
Read the Template Reference: FM3 global extension template for more details.

Adding AutoBUILD to your application

  • Add a menu item to your main menu. Call it File Manager, or something similar. Set it to call a procedure called RuntimeFileManager.
  • Create a procedure in your app called RuntimeFileManager.
  • Use the Window Template (NB: NOT the FM3 Runtime File Manager Procedure).
  • Populate the window with the Runtime File Manager Control template.
  • Make sure the Declare Globally option is checked in the procedure properties.
  • On the Global Extension, go to the AutoFIX tab, and select the RuntimeFileManager procedure from the list.

Adding AutoBUILD to your Multi-DLL application

  • Create the RuntimeFileManager procedure in the Data Dll (ie the DLL where all the files are declared).
  • Go to the extensions for that procedure, and set the extension to "Use all files in Dict".
  • Export the procedure from the DLL in the normal way.

Note: The Runtime File Manager Procedure template has been replaced by the Runtime File Manager Control template. The procedure template is still included (so that your program compiles) but it should be considered obsolete. At this point you should delete your Runtime File Manager procedure and re-add it again using the instructions above.

Distribution

You will need to ship the TPSFix.exe utility with your application if you use Topspeed Driver data files. You do not need to ship TPE files with your application. AutoBUILD will create example files (TPE files) as and when required. TPSFix.exe can be found in your \clarion\bin directory.

Disclaimer: As TPSFix is supplied by SoftVelocity we recommend you read the instructions regarding it's use. CapeSoft can not acceptresponsibility for the actions performed by the TPSFix program.

Import and Export, XML and JSON

If you have either (or both) of xFiles or jFiles then you can easily add Export and Import buttons to your Runtime File Manager window. Simply add the xFiles and/or jFiles global extension to the app. Then you can add a button named ?Export and/or a button named ?Import to the window. The template will take care of the rest.

There are some options on the RuntimeFileManager control template which allow you to have some control over how the import and export are done. By default exports are allowed, but imports are not and each table imports and exports from a single .xml or .json file.

For backward compatibility reasons the option to Allow Multiple Tables in the same File is OFF. If you are implementing this for the first time in your application it is recommended to turn this option on.

You can read more on the various template settings in the template documentation.

Note that xFiles and jFiles both have a 2 gigabyte file size limit when exporting. This may may this feature unsuitable for tables with very large numbers of records.

AutoFIX

Short Description: Automatically trap possible TPS file corruptions.

Who should implement AutoFIX?

Those using TPS files, especially if you experience file corruptions.

Description

If you have a corrupt TPS file then this will most likely evidence itself when the file is opened. By using FM3's AutoFIX feature you can automatically trap when this occurs, and automatically invoke TPSFix when your application is next run.

AutoFIX works by noting which file is being opened when a fatal crash occurs. Unfortunately there is nothing we can do about the crash, but the next time the program is run a message will appear noting that the file caused an error, and offering to run TPSFix for you. If you decide yes then a TPE file will be created and TPSFix will be invoked in automatic mode. No other input from the user is required. After TPSFix has finished the user can attempt to run the program again to see if any progress has been made.

At this stage AutoFIX only supports the Topspeed File Driver.

Implementation

If you haven't already done so, add the FM3 Global Extension. Goto Template Reference: FM3 global extension template for more details.

Adding AutoFIX to your application

On the Global Extension, go to the AutoFIX tab, and check on the AutoFIX checkbox.

Note: You must enable AutoBUILD in order for AutoFIX to work.

Recommendations

  • CapeSoft recommends using the latest version of TPSFix available, shipped with Clarion 6.
    There have been huge improvements in this version over the C55 version.
  • TPSFix isnota preventative tool. Do not use TPSFix on non-corrupt files.
    This means, especially in earlier versions of TPSFix, that if you run TPSFix on a non-corrupt file, it may corrupt the original file.
  • It is important that you do not run TPSFix on a previous version of the file.
    This is because FM2 will build an example file based on the current version specified in the exe, and not based on the physical file which may be a previous version.

Distribution

You will need to ship the TPSFix.exe utility with your application if you use Topspeed Driver data files. You do not need to ship TPE files with your application. AutoBUILD will create example files (TPE files) as and when required. TPSFix.exe can be found in your \clarion\bin directory.

Disclaimer: As TPSFix is supplied by SoftVelocity we recommend you read the instructions regarding it's use. CapeSoft can not accept responsibility for the actions performed by the TPSFix program.

Recommeded: CapeSoft recommends the use of the 32bit version of TPSFix, currently shipped with Clarion 6 only.

AutoNET

Short Description: Automatic Program file updating over a Network.

Having problems getting AutoNET to work? Check out the AutoNET TroubleShooting Section of these docs.

AutoNet and Vista: Because AutoNet is copying program files (like EXEs and DLLs) from a source directory to (generally) the Program Files directory, it requires administrative privileges to perform this task. If your users cannot run as administrators, then you will not be able to use AutoNet as an automatic program updater.

CapeSoft no longer recommends the use of AutoNET to update your applications because of compliancy with Vista, Windows 7 and up. Instead, you should rather use a client/server updater (like SafeUpdate 2) in conjunction with your installer.

Who should implement AutoNET?

  • Anyone with a multi-user environment!
  • Those running applications off a network location experiencing slow load times.
  • Those finding it really hard to keep every client (workstation) on a network up to date with the latest version of the application.
  • Description

    AutoNET is a utility (compile exe) designed to allow you to easily upgrade program files (exe's, dll's, and others) over a network. This makes updating your application much easier on a network as only the server has to be updated. All the workstations will automatically update themselves from the server.

    This means that the application files can be stored locally on each workstation without the normal maintenance overhead this implies. This is important as it reduces network traffic and speeds load times on workstations.

    AutoNET works by keeping the directory on the server and the directory on the workstation in sync. Each time your application runs, it checks the files in the local directory against the files in the server's directory. If any of the files in the server's directory have been updated, or if new ones have been added, then they are automatically copied to the workstation directory, and the application will be restarted.

    Note: Not only newer files are copied - which means that if you need to downgrade (your application), you can do so with ease as well. Any file type will be copied across. This means you should take care that your data is in a different directory to your application - otherwise if data files end up in the netpath, these will be copied across - even if they are older than the ones locally.

    Once AutoNET is enabled, all you need to do is update the network path with your program update, and all workstations will be automatically updated!

    Implementation

    AutoNET uses 2 ini file settings: LocalPath and NetPath. These are the directory on the workstation (client) and the directory on the server respectively. You must ensure that the client has access rights to the server directory, otherwise AutoNET cannot perform it's magic! You will need to set these settings during your application installation.

    If you haven't already done so, add the FM3 Global Extension. Goto Template Reference: FM3 global extension template for more details.
    • Go to the FM3 Global Extension
    • Click on the AutoNET tab
    • Check the Enable AutoNET switch on.
    The following 2 entry fields can be left blank to use their default settings, or you may fill in your own values.
    • INI File Name: The name of the INI file where the LocalPath and NetPath settings will be stored. Default setting: See below...
    • NI File Section: The INI Section name in the above described INI file. Default setting: Application name
    Tip: Use a ! in front of variable names.

    The default value for the INI File Name varies slightly.
    • If left blank, it will default to AutoNET.log in the logged in user's temporary directory as described below*. This is where you set the LocalPath and NetPath settings for your app. It is also where AutoNET logs it's transactions to.
    • If you supplied an ini file name, but excluded the path (e.g.: MyIniFile.ini), then this will default to the local windows directory. This is where you place your LocalPath and NetPath settings. The AutoNET log file however will reside in the logged in user's temp directory as described below*.
    • If you specify a full path and ini file name (e.g.: C:\MyDir\MyIniFile.ini), then that's where you set LocalPath and NetPath. Again, the AutoNET.log file will reside in the logged in user's temp directory as described below*.
    • If you want your ini file to reside in the current directory (the exe directory or the data directory if you have done a setpath) - then you must use the .\ indicator before the file name.

    *Definition: "The logged in user's temporary directory"
    • Win98: C:\Windows\Temp
    • Win2K/XP: C:\Documents and Settings\<THE LOGGED IN USER>\Local Settings\Temp

    To Sync more than 1 directory:

    Occasionally a programmer will write a program which needs 2 (or more) directories to be synchronized. The templates only support a single directory being synchronized. While it would be possible to have the templates support more than 1 directory, it seems that the method used by each developer to identify the directories changes a lot.

    Therefore, in order to give you maximum flexibility, an Embed point has been created. It's a global point called FM2 - Manually Sync More Directories. In this embed point you can identify directories that need to be sync'ed using the ds_SyncDirEx function. For example;
    If ds_SyncDirEx('q:\mydir1','c:\mydir1')
      halt
    End
    If ds_SyncDirEx('q:\mydir2','c:\mydir2')
      halt
    End


    Obviously you are then free to identify the directories in the way that suits you best.

    Note: You can use the additional LogFile parameter: ds_SyncDirEx(NetPath, LocalPath, Logfile), where LogFile is the AutoNET.log file, or whatever file you have specified for AutoNET logging.

    Note: Your application must have access to the AutoNET.exe application to make use of the ds_SyncdirEx function.

    Notes

    • ForMulti-dll applications, enable the above described in your Data DLL application (although in some situations, depending on 3rd party products, you may need to activate this in your EXE as well). If you're using VLDS - then you need to add this to your main exe as well as your data DLL (note: For VLDS apps, don't enter the VLDS procedures in the exe global extension - only in the data dll, otherwise your exe's template prompts (in the FM3 extension) must be the same as the data dll's settings).
    • AutoNET is a Program Files upgrade utility. You should not have any data files in your program files directory.
    • When you initially install your application, you will need to set the LocalPath and NetPath ini file settings. This can be done by your installation program.
    • Example of ini file settings:
      [YourProgram]
      LocalPath=c:\YourProg
      NetPath=x:\YourProgUpd
      or
      [YourProgram]
      LocalPath=c:\YourProg
      NetPath=\\YourServer\YourProgUpd
    • Please note that all workstations need the relevent access rights to the Network folder.
    • The embed point to use immediately before the AutoNet functionality is called, is the 'FM: Start of Initialization section' embed point in your global embeds.


    Note: When converting from a single-exe to a multi-dll application - you need to make sure that you've entered the correct section name in the data dll (FM3 template).

    Note: When using AutoNet in a Terminal Services environment, you need to use with caution. The AutoNet.log file is created in a created user Windows directory. The windows directory (used by Terminal Services) is a sub-directory within the Terminal Server User's directory (C:\Documents and Settings\<LoggedInUser>\Windows). You need to resolve the AutoNet.log file that is located in that directory. Note: If the autonet section in the original INI file gets changed, than you will need to delete the ini file from the User's Terminal Services directory so that a new one can be copied from the master directory.

    Distribution

    AutoNet makes use of the included AutoNET.exe program found in your Clarion\3rdparty\bin directory.

    This must be installed into your application directory when you install your application.

    Note: The source of AutoNet exe is shipped as a project file with FM3. This means that you can edit the manifest file to reflect your company in the trusted chain of applications (rather than CapeSoft). To do this, you can edit the autonet.exe.manifest file, and recompile the alu.prj project and distribute the resultant autonet.exe file rather than the one included in the FM3 install.

    Troubleshooting and Debugging

    AutoNET also uses an INI file to log helpful info about the upgrade process. We have chosen to place this file in a directory writable across OS's. AutoNET writes to AutoNET.log in the logged in user's temporary directory as described above*. The AutoNET.log file should not be changed unless otherwise marked. AutoNET.log describes the reason for performing an upgrade, and any errors that may have occurred during the upgrade process.

    If your application is not being updated, then check:
    1. That the AutoNET.exe utility is in the same directory as your exe on that machine.
    2. That the machine has read/access rights to the directory that it is trying to copy from. Open your AutoNET.log file, and a DOS command prompt. Use the COPY command to attempt a DOS copy from the NetPath to the LocalPath. If the files are not copied, then you need to set the access rights of that machine.
    3. If you are running Vista or above, check that your user is able to elevate to Administrative privileges (see AutoNet and Vista for details).
    If you are unable to solve the problem you're experiencing, send this log file to CapeSoft Support. Please read the Support and Debugging section for details.

    AutoNET.log

    A useful addition to the AutoNET functionality is the AutoNet.Log file. This is created in the Windows directory on the workstation. This file is especially useful if you're not sure as to why AutnNet is doing the things that it's doing. You should not change the values in AutoNet.Log unless they are marked as changeable.

    [Version] AutoNet Version Version of the AutoNet.Exe on this workstation
    [Request] NetPath The Request Section are parameters passed from the calling program to the AutoNet Exe.

    LocalPath Location of program on the server

    Program Location of program on the workstation

    Parameters The name of the program calling AutoNet (so that Autonet can call it back in turn).

    DelayTime Any parameters the calling program may have had when started the first time.


    The length of delay (in hundredths of a second) that AutoNet should allow for the calling program to complete shutdown. This item is changeable. The default is 500.

    TargetOS The TargetOS of the calling program. i.e. 16 or 32. Currently this parameter is not used.
    [Program]
    The Program Section is updated whenever an AutoNET enabled program is run.

    Name The command line which started the program

    Date The current date when the program was run (dd/mm/yyyy)

    Time The current time when the program was run

    Section The section name where AutoNet is getting its settings.

    IniFile The Ini file where AutoNet is getting its settings.

    NetPath The NetPath setting, as read from the above ini file.

    LocalPath The LocalPath setting as read from the above ini file.
    Trigger nnn An explanation of what triggered the call to AutoNet.
    TIP: If you are using AutoNet then there are 3 distinct directories that you need to keep in mind.

    a) the shared data directory on the server. This should not be the same as
    (b)
    b) the shared program directory on the server.
    c) the local program directory.

    AutoNet's job is to sync the server program directory with the local program directory. Since you don't want data files flying around, you should
    definitely not have any data files in the server program directory.

    Many people simply place the data files in a sub-directory on the server.

    Translation for AutoNet

    Currently AutoNet uses the FM2.ini file inside the directory where the AutoNet exe resides to translate the window text that it displays. The following code is used to get the translation text:

    mess1 = getini('AutoNet','M1','Upgrading program files from the network...','.\fm2.ini')
    mess2 = getini('AutoNet','M2','Please be patient....','.\fm2.ini')
    mess3 = getini('AutoNet','M3','Initializing :','.\fm2.ini')
    mess4 = getini('AutoNet','M4','Copying :','.\fm2.ini')


    So adding translation simply means creating an ini file that will contain the text above in the following INI file type format:

    [AutoNet]
    M1=Upgrading program files from the network...
    M2=Please be patient....
    M3=Initializing :
    M4=Copying :

    Hot Tips

    Using BLOB's in FM3 enabled applications in Clarion5
    Use BDE to help convert your dictionary to SQL
    Use Multi-Proj's Driver Substitution features to build multi-driver support into your app.

    Using BLOB's in FM3 enabled applications in Clarion 5

    Note: Clarion5.5 and up - BLOBs are supported.

    Tip: Our recommendation (and indeed a good practice anyway) is to separate the BLOBS out from the data, and put it in it's own table. With a single linking key field. This file obviously never gets upgraded. The "parent" file is then free to upgrade as often as it likes. There are a number of advantages to this approach, quite apart from the upgrading. For example when doing support you can leave the blob bit "behind".

    Code Example
    MyParentFile file,driver('TopSpeed'),pre(MPF)
    PK_MyParentFile key(IDCol),primary,nocase
    FK_MyBlobFile key(MyBlobID),nocase! Relates to MyBlobFile
    record record
    IDCol long
    EmailAddress string(30)
    MyBlobID long

    end

    end
    MyBlobFile file,driver('TopSpeed'),pre(MBF)! FM3IGNORE User Option
    PK_MyBlobFile key(IDCol),primary,nocase
    BlobField blob
    record record
    IDCol long

    end

    end

    Click here to find out more about FM3IGNORE.

    I've got a BLOB in my table, but want to move over to the correct method of handling BLOBs (only for Clarion 5 users)

    You'll need to basically end up with 2 tables in your dictionary, you can keep the main table (with the records) as the same label and prefix, only the new BLOB field and file will have another name and prefix. If you have an autonumbered field already in the file, then you're in business. Use this field as the reference field in the BLOB file. If not, then you'll need to use the fields in a unique key in the original table as the reference in the BLOB file.

    In your dictionary:
    1. You'll need to rename your file on disk (in the dictionary for the BLOBless file) (Don't use the oldname useroption). Obviously you'll need to create a new name for your BLOB file as well.
    2. Copy the table structure in the dct, and delete the BLOB in the original table structure and increment the version number.
    3. Create the relationship between the two tables.
    4. Put the FM3Ignore useroption into the BLOB table. Note: You'll have all the original fields in this table - but you can ignore these.

    In your program:
    1. Before FM3 kicks in (i.e. before the FM3 Initialization code), check if you have the old file on your disk, and copy to the BLOB file name, and rename the originalfile from disk.
    2. At runtime - FM3 will then remove the BLOB from the actual file, but will leave the new file with the BLOB in it alone.
    3. You'll need to change your references to the BLOB field in your application, as well as performing the lookup when dealing with the BLOB.

    Use BDE to help convert your dictionary to SQL (Clarion 6 only)

    Tip: BDE is a Bulk Dictionary Editor shipped with FM3 to help you make the changes to your dictionary, necessary for SQL and FM3 conversion, a breeze! Read the Full BDE Documentation for details.

    Use Multi-Proj's Driver Substitution features to build multi-driver support into your app.

    Tip: Multi-Proj comes with a Driver Substitution feature. This means you can generate multiple exe's from 1 app (or multi-dll apps), and 1 dct. For example, you maintain a TPS dictionary, but generate AppTPS.exe, AppMSS.exe, AppODB.exe, etc. For more information, see theMulti-Proj docs.

    From the FM3 side, you need to import the SQL_Connect window, but you must leave all the SQL driver possibility switches turned off on the AutoUp tab of the FM3 template. Otherwise, your SQL_Connect window will open in your tps application as well. The SQL portion of the application must be turned on in the MultiProj template, not the FM3 template. You can setup the SQL specific field user options in your dct though (like ForceSQLDataType, AutoNumber, etc.) as these will be ignored in the TPS version.

    For more Hot Tips, see the SQL Documentation!

    Helpful Utilities

    CScan

    Description

    CScan is a program for scanning and editing data files. Similar to the "Browse Database" feature in the CW IDE, and similar to the old Clarion Professional Developer CSCN utility.

    Screenshot:
    CapeSoft file scanner screenshot

    Note: If you're getting an Error 47 or D00001 when attempting to browse a file, then it probably means that your file declaration does not match that of the UPG.tps file. This is normally due to either a restored backup (without the UPG.tps file being restored as well) - or a data file that has been converted by the dictionary convertor instead of ensuring that conversion is only handled by FM3.

    Formatting

    To change the formatting of a column, after opening a file, point to that column and press Ctrl-F, or Ctrl-P. You can enter any standard Clarion picture.

    To change the contents of a field simply type the new contents over the existing contents.

    Note: Because CScan saves the format of your layout as you set it up, this can cause problems in the future - particularly if you hide columns or alter column orders. If the file browse gets completely out of hand, you can modify the c-scan.ini file in the windows directory manually to tweak the fields displayed, and the order in which they are displayed.

    Security

    To prevent unwanted scanning by your end user, C-Scan is protected using a simple password. The password is "SCAN". This is not meant as a security device, but to stop users accidentally scanning, and possibly editing files. To turn off this feature go to Preferences in the Help menu.

    If you want to give your users access to C-Scan, but you don't want to give them the SCAN password, then there is a dynamic alternative. C-Scan has a "password of the day" feature. This password is calculated as follows;
    1. Take Today's date, and write it in D11 format (i.e. YYMMDD) e.g. 990731 (for 31 July 99)
    2. Change each 0 into an A, 1 into B, 2 into C and so on. e.g. the above becomes JJAHDB

    C-Scan asks for the file's "Owner" name, if one exists, every time that file is scanned. If you want to protect your files from scanning by a sophisticated user, or another Clarion user, then use the Owner feature to encrypt your data files.

    Searching (and Replacing)

    C-Scan includes the ability to search a column for a matching entry. In addition to this you can also do Partial and Anywhere searches. A Partial search will find a match, even if the search string is only part of an actual field. In other words a partial search of the word Cape will return a match in the string CapeSoft. An Anywhere search allows you to search all the fields for the required value. If this is switched off then only the highlighted column will be searched. Choose the Search menu option after opening a file to search the file. Search and Replace is also supported.

    Distribution

    You are free to install CS.Exe on any computer, provided that an FM3 enabled application is running on that computer. This means that you can install C-Scan on your clients computer which can assist you with debugging, and supporting your program. C-Scan is compiled in local mode, and doesn't require any DLL's.

    Btrieve

    The current release of C-Scan does not support Btrieve. However an old version of C-Scan is available from our web site (https://www.capesoft.com/ftp/public/cs.zip). The older C-Scan requires also that you install some btrieve DLL's. These DLL's are included in the cs.zip file.

    UPGView

    Description

    UpgView is a utility for viewing the Upg.Tps file. This is a useful debugging tool to see why a particular file won't upgrade. It is not intended as an End-User tool, but rather as a tool to assist developers.

    ScreenShot:
    UPG Analyser screenshot

    Import from another UPG file

    You can use this option to merge 2 upg.tps files together. This is typically useful where some versions of tables exist in a UPG.tps file and not in another - or where you would like to merge the dataset of 2 different applications into one folder (each having an individual UPG.tps file).

    Print File Layout

    To print a copy of the file layout, for any particular version of the file, simply highlight the file and choose "File Layout" from the Reports menu.

    Analyse File Changes

    To view an analysis of the changes to a file structure, highlight the file label and choose "Analyse File Changes" from the Reports menu. This lists all the versions of the file, and the differences between the versions.

    ScreenShot:


    Distribution

    You are free to install UpgView.Exe on any computer, provided that an FM3 enabled application is running on that computer. This means that you can install UpgView on your clients computer which can assist you with debugging, and supporting your program. UpgView is compiled in 32 bit, Local mode, and does not require any DLL's.

    Bulk Dictionary Editor (BDE)

    Read the Full BDE Docs here.

    Errors - Runtime, Compiler, Program GPFs or Hangs

    All FM3 errors are now prepended with the "FM3" identifier in some way, i.e.: "FM3: bla bla", or "FM3 Error: bla bla". If you are getting errors without a reference to FM3 in them, then they are not FM3 errors. If you are not convinced of this, use the FM3 Debugging functionality to see if the error appears there. If it does, send the Debuglog, together with the error screenshot, and detailed description of how to repeat the error to Support.

    Compiler Errors

    C7 specific compile errors


    Program GPFs or Hangs

    General FM3 Errors
    SQL Specific FM3 Errors
    SQL Related Errors
    Runtime Errors Related to FM3
    Translating FM3 Error Messages
    Compiler Errors
    Error: Assertion failed on line: 303 in file abfile.clw. Message: You are calling CLOSE(thefile) instead of FileManager.close(). Shall I GPF?
    Cause: ABC is doing a rather over-enthusiastic check of the CLOSE() statement, initially useful when converting your Clarion / Legacy code to ABC.
    Reason: FM3 does not use ABC code, so the ABC File Manager is complaining.
    Solution: You can safely click on No, then there are 2 ways to eliminate these errors:
    • Go to your Project Properties and turn off debugging by "Building Release System", or setting Debug mode to "Off".
    • Edit the ABFILE.clw. (Comment out the assert on that particular line in the abfile.clw - which is found in your Clarionx\libsrc directory). If you want GPFReporter and FM3 to co-exist, then you need to do this.
    Error: Compile Error: Link Error: Too many segdef in file Error(6): cif$fileclose The handle is invalid.
    Cause: The main program module is too big for the compiler.
    Reason: You're possibly using FM3 on a very large dictionary with lots of aliases and FM3 user options. This causes FM3 to generate a lot of initialization code.
    Solution: Use the Very Large Dictionary Support Code template to split the FM3 initialisation code between multiple modules. See the VLDS section of the docs for details on how to do this.
    Error: Error Occurred: 37000 [Microsoft][ODBC SQL Server Driver][SQL Server]Zeile 1: Failed Syntax in the File
    Cause: The Compiler is trying to use a file driver that is not compiled in.
    Reason: There is no project define including the file driver into your application.
    Solution: Add the MSSDRV (or other depending on which compile flag you're using) to the Project defines.
    Error: FM3 warning: '<FieldName>' has a non-unique external name. Invalid in '<FileName>' of driver: <FileDriver>.
    Cause: You have more than 1 field in a file with the same External Name.
    Reason: SQL requires a unique field name for each field in a table. If you have not uniquely assigned an external label for each field, this will cause a GPF in the conversion of the table.
    Solution: Go to the dictionary, and ensure all fields have unique External Names across the file.
    Error: FM3 warning: '<FieldName>' of type '<FieldType>' is invalid in '<FileName>' of driver: <FileDriver>.
    Cause: You file declaration is using a datatype that is not allowed with the specified driver.
    Reason: Usually when changing the file driver in the dictionary, the IDE will warn you to change any invalid datatypes, but if you used BDE, there may be a MEMO left behind which is not SQL compatible.
    Solution: If you are manually editing your dictionary then you should never see this message, however if you have used a 3rdparty tool to convert your dictionary to a different driver, then you may have some field types that are invalid for the new file driver. The compiler simply warns you of an invalid data type for the new file driver. If you continue compiling you will probably get an Error 47 or D00001 when FM3 tries to convert the file.

    If the type is blank, then you probably had MEMOs which BDE was unable to convert to CSTRINGs (for SQL) and are now of type blank in the dictionary. You need to set each MEMO to a CSTRING in the dictionary.
    Error: FM3 warning: Group 'PRE:MyGroup' has an external name. Invalid in 'MyFile' of driver: MyFileDriver

    External group names were always overlooked by the compiler until recently. If you have a external group name, this will now cause a GPF in the file conversion process (in FM3). If you have a really good reason for an external group name, then ignore this assert - however you will probably experience a GPF in the file-conversion process.
    Error: Link Error: DS_FILEOPEN is unresolved in file c:\Clarion5\xxxxxxxxx.OBJ (Repeated for a number of functions)
    Cause: The FM3 lib is not being linked into the project
    Reason: You're probably compiling in 16 bit mode - or else you have removed the FM3 template from the application.
    Solution:
    • Change your project to 32 bit mode. FM3 only supports 32 bit applications.
    • OR (if you have removed FM3 from the application) remove the FM2=>1 from the project defines in the project.
    Error: Link Error: Duplicate symbol: SQLxxxxxxxxxx, file FM2.OBJ (Repeated for a number of functions)
    Cause: Two products are declaring the same procedure
    Reason: You're using an old version of Fomin Report Builder.
    Solution: Download the latest version of Fomin Report Builder from their website - and include the 'Compatibility with MAV and other ODBC templates' global template in your application.
    Error: Syntax error: Unknown identifier: GLO:<FileName>_NAME
    Cause: FM3 uses a variable name for each filename. This filename is set for each table when you upgrade your dictionary using BDE. Either you have not used BDE to do the conversion to SQL (in which case the filename is not set to use the variable) - or else you have the 'Generate File Declarations in Modules' checkbox (in the Global Properties - file tab) checked
    Solution:
    • Make sure that the 'Generate File Declarations in Modules' checkbox (in the Global Properties - file tab) is unchecked.
    • You need to check the 'Generate all file declarations' checkbox on the FileControl tab of your application's Global Properties.
    • If you're using Multi-Proj's Driver Substitution feature?
    If so, you need to make sure that the Conditional Compile Switch in the SQL_Connect procedure matches what you've set it in the Multi-Proj driver substitution settings.

    For example (using ODBC driver):
    1. In the Connect to SQL Backend Controls control template in the SQL_Connect window, set the ODBC Driver Conditional Compile Switch to UseMySQL.
    2. In your MultiProj extension (the one with Enable Driver Substitution checked) - in your Override Driver Possibilities button list (immediately below the Enable Driver Substitution checkbox on the Resources tab), make sure that your Conditional Define of the Topspeed to ODBC is set to UseMySQL.
    3. On your Versions tab of the same Multi-Proj Extension instance, you should have a version to create a project for the ODBC version of your program, lets call it ODBCPrj. In there (on the defines tab) you should have an entry: UseMySQL=>1, and on the FileDrivers tab you should have at least the ODBC and the ASCII file drivers listed (you'll need any others as well if you've used the file drivers that won't be substituted in the other project.
    Error: Unresolved External ds_FILEOPEN in xxxxxx.obj
    Cause: FM3 has been removed from the application, but the project define is still set to 1.
    Solution: Remove the FM2=>1 from the project defines in your application's project.
    Error: Unresolved External, ds_SomeFunction
    Cause: You have an old copy of the lib file on your hard drive.
    Solution: Check the project to see which FM3 lib is being linked into your program, and then search your drive for that lib.
    Error: Parameter type label ambiguous

    In Clarion 4 and above, the old File Manager procedure has to be renamed to RuntimeFileManager.
    Error: No matching prototype available for ds_UsingFileEx

    Make sure you have checked the "Generate All File Declarations" in your global properties.
    Error: Syntax Error: Unknown Procedure Label error on the line that calls the RuntimeFileManager

    Go to the Properties for the RuntimeFileManager Procedure, and make sure the Declare Globally option is on.
    Error: Duplicate Identifier: &Workfile

    Go to the Global Data Button, and delete the variable & WorkFile from there.
    Error: Unknown variable '%NoFm2'

    If you have converted your application from FM2 to FM3, you may not have changed the Runtime File Manager control template from FM2 to FM3. Open the Runtime File Manager window, delete one of the controls to delete the control template, and then add the FM3 File Manager Controls.
    Error: Unknown variable errors in the RuntimeFileManager window

    If you have set your RuntimeFileManager to use all files in your dictionary, but you have not checked the 'Generate All Files' checkbox in the Global Properties (File tab).
    Error: Unknown Identifier: WorkFile and\or WorkFileName in my SQLConnect or RuntimeFileManager windows.

    You've handcoded code using these two variables which changed in 3.78. Change the code to use the LocFMx:WorkFile and LocFMx:WorkFileName.
    Error: 'FM3 warning: You have more than one key in your dictionary with the same external name: <KeyName>. Files: <File1>, <File2> Driver: <FileDriver>

    Some SQL backends require that unique constraints have database-wide unique external names. FM3 will be therefore unable to add non-unique constraints to the SQL backend if there are duplicates in the dictionary, thus FM3 checks the dictionary for you to find non-unique external names.

    If you don't want FM3 to check the unique external key names, then you can add the following Dictionary user option:
    DisableUniqueKeyNameCheck (1)
    Error: Duplicate symbol: CloseODBCPerfData and others.

    You have at least one other template that is trying to include the ODBC function library into your application. To prevent FM3 from linking this LIB file in, go to the SQL tab of your FM3 Global Extension template, and uncheck the 'Link in ODBC.LIB' checkbox. This will ensure that the ODBC LIB only gets included once into the template.
    Error: Duplicate symbol:$GLO:<FileName>_Name for all my files.

    You need to uncheck the 'This is the Data-DLL' switch in the DLLs that are not the data-DLL (for DLL applications). If this is the EXE application of a Multi-DLL application, then you need to check the 'This is part of a Multi-DLL project'. This is only applicable to legacy applications - for Multi-DLL ABC applications, you only need to add the extension to the data DLL.
    Error: Duplicate symbol: SQLAllocConnect (and others)

    This is most likely caused by a clash with Fomin Report Builder and FM3. There is a template available from Fomin to suppress their use of the ODBC library. This will only apply to local mode applications.
    Error: You have 2 files which will be named the same (<filename>.tps): <table1> and <table2>
    Cause: If you don't specify a filename for your tables, clarion will use (up to)the first 8 letters to name the file on disk (for TPS/flat files). If you have 2 files in your dct with the same first 8 letters - you'll get both tables using the same file. The second table to open the file will get an error 47 or D00001 - because the structure is different. FM3 is warning you about this so you don't get to this place - and wonder why you're getting error 47 or D00001.
    Solution: Either specify a filename in the dct or you can add the NoAutoNameCheck file user option to one (or both) of the tables.

    C7 specific compile errors


    C6 to C7 conversion error in RuntimeFileManager

    Clarion 7 has converted your c6 application erroneously. This is normally fairly easy to solve.
    1. Close your application and the C7 IDE.
    2. Open the folder wherein your application resides (using Windows Explorer).
    3. Make a backup of the files in the folder.
    4. Remove the <applicationname>.app, the <applicationname>.sln and the <applicationname>.cwproj.
    5. Rename the <applicationname>.6app to <applicationname>.app.
    6. Re-run the conversion.

    Program GPFs or Hangs


    I've added FM3 to my program, and now it GPF's on close of the program?
    You are upgrading / converting files on the main thread. This is causes a problem with the Clarion Threading issues. Ensure you are only opening FM3 managed files on new threads.
    I've added FM3 to my program, and now I get a GPF on program startup, or when I access a file?
    You have probably used a CString for the Owner or Full Path Name attributes in your Dictionary. Change these to Strings.
    FM3 connects to the SQL backend, but when it tries to upgrade datatables, it hangs - or it hangs while trying to connect to the backend
    Check that you have correctly named your server (that FM3 is connecting to the correct server). Sometimes the connection is a bit more forgiving than the upgrading, so if your server is MyServer\MyDB, and you enter it as \MyServer\MyDB it will connect, but will have problems upgrading the tables.

    Check that your dct owner variable matches the owner variable used in the SQL_Connect window. Make sure you've put a ! in front of the dct variable in the owner field in the dct:



    If you're not sure, then run the application with the command parameter: /ShowConnectErrors and the error will be displayed. A logon window will also be displayed.

    (Win7 64 bit MSSQL users especially): Sometimes a PC will not reconcile the machine name, so try using the IP Address in the Server name instead of the PC name. If you do do this, then you need to re-import the Connect window into your application, and set the Server Name (in the connect window options at runtime) to the named instance of the server. For example:
    Server Name = MyServer\MyDB    
    Server = 192.168.50.50\MyDB    !It is important that when using the IPAddress in the Server, that the Server is entered correctly with the named instance.

    Note: For MSSQL:
    If you are using SQL Authentication - then make sure that your server is setup for mixed-mode Authentication.
    If you are connecting from a remote machine, you may need to enable the Guest account. Also, make sure that your firewall/router is allowing/forwarding requests from the port that the connection is using.
    If you are using the default port, then make sure the port is set to 0 on the connect window settings.
    If you have just upgraded to Clarion 11 13505 or later, then the loading of 3rdparty DLLs has moved, and so we've had to change when the Connect window is called. You need to check the "Init FM3 in the 'Initializing other ABC Clarion DLL' embed (recommended for Clarion 13505 an up)" setting in the FM3 global template. Caveat: If you have any code in the Program Setup section of the data dll, then you need to move that code to the 'Initializing other ABC Clarion DLL' embed point (after the FM3 connect window is called).

    Note: For MSSQL on Vista (where the client is running on Vista):
    You need to tweak some of the connection settings from the command line prompt (at the client PC):
    netsh interface tcp set global rss=disabled
    netsh interface tcp set global autotuninglevel=disabled
    My program hangs as it upgrades a table.
    There's a couple of reasons that this could be occurring:
    1. You are using Superfiles, and you are attempting a table upgrade (that's in the superfile) while another table in the same superfile is already open. FM3 requires exclusive (locked) read/write access to the file during conversion. The most simple work around is to convert all the tables on application startup - otherwise, you need to open and close each file (in case of upgrade) - before starting your procedures.
    2. Due to an apparent known issue with the MDI Sync Templates, FM3 hangs during upgrade. To workaround this, you can switch off this template on the local procedure you're using to upgrade the file. ie, go to the procedure extensions, and check the Disable MDI Synchronisation.
      Alternatively, add AutoBUILD - FM3's RuntimeFileManager Control Template, and this should convert your files without a problem.
    My program hangs at the Connect window after I click the connect button.
    There's a couple of reasons that this could be occurring:
    1. You could have omitted to ensure that the Project Define was set for the driver(s) that you've selected in the AutoUp tab. Example:
    MSS_DRV=>1

    Also checkout the following faq: FM3 connects to the SQL backend, but when it tries to upgrade datatables, it hangs - or it hangs while trying to connect to the backend
    I am installing my FM3 enabled app on a Tablet 2005, and my app is hanging, or getting an error: unable to open upg.tps.
    Some people have reported problems running new FM3 enabled apps on Tablet 2005 PC's. The workaround is to ship your development upg.tps.
    I'm using Clarion 6, ABC multi-dll, and my application hangs on exit with the CPU running at 90%.
    Due to a possible bug in Clarion 6, you need to add the FM3 Global Extension to your exe app as well as your data dll app. Make you sure you check on all the necessary driver support, but leave the Connect Procedure blank in the exe extension.
    My program GPFed - and now it GPFs on startup. If I rename the exe, it works for sometime but then starts GPFing like the first one.
    You are probably using TPS files - and one of the files has reached the 2Gigabyte limit. AutoFix is registering it as a corrupt file - and when the application runs, it goes to the RuntimeFileManager for you to "fix" the file, and GPFs on file open. You need to restore a backup of the file (from before it reached the 2G limit), and truncate the file - either by reducing the number and/or size of fields, or splitting the table into 2 - the new table being a child of the existing one.
    Index out of range
    If you're using SQL files, one of your files' version number, may have gone backwards. Drop the gMSSQLFile (or gODBCFile).

    General FM3 Errors
    Error: Unable to identify driver - use ds_AddDriver driver to register drivers.
    Cause: FM3 cannot identify the driver specified for the file it's attempting to manage.
    Reason: The driver has not been registered in FM3 by a call to ds_AddDriver().
    Solution: 2 options:
    • Go the Global Extension and ensure that all file drivers in your dictionary(past and present) are checked on.
    • If handcoding, use the ds_AddDriver() function to register the driver in FM3. See the Technical Reference for details.
    Error: Unable to Upgrade - Not "Using" File <file prefix>
    Cause: The file has not been registered with FM3.
    Reason: Possibly a wrong implementation of FM3 for your application (Multi-DLL).
    Solution: Check the implementation for your setup in the AutoUP section.
    Error: Possible file change without changing File Version number. File involved : <filename>
    Cause: FM3 has detected a difference between the file structure being used, and the file structure stored by FM3 for that version number.
    Reason: You've made changes in the dictionary, and forgotten to increment the version number for the file, or the default clw of the data dll (or exe for single exe applications) was not re-generated.
    Solution: FM3 can upgrade the file if necessary, but you will not be able to upgrade again unless you fix the error by performing the following step without changing the structure.
    Go the dictionary, and increment the version number for this file. Then recompile.

    If you still get this error, then delete the default clw module of you data dll (or exe for single exe applications). Sometimes clarion does not regenerate the clw if you just changed the version number.

    If you still get this error, then probably the best thing is to use UPGViewer to check the version numbers for that table inside the UPG.tps file. That will show you what the last version number for that (those) files is inside the UPG.tps file. You need to set the version number to the last version number +1 (in the dct).

    For more info, see How to make basic file structure changes.
    Error: Unable to Open UPG file : cause <error>
    Cause: FM3 is unable to open it's own data file (upg.tps).

    If the errorcode is 3, then the most likely reason is that the path specified for the upg.tps file does not exist.

    If you specified the upg.tps path using ds_SetUPGPath(), then check that the path is valid and accessible.
    If the errorcode is 5 (Access denied) then there's 2 things I'd check _very_ carefully.

    a) open a dos prompt.
    c:
    cd "\Program Files\iCollecttrains"

    be _very_ careful that you spell it _exactly_ as the error describes it. I know, I know. the folder is there. I've lost count of the folks who've assured me the folder is there, but the above test fails. hmm dang client has decided to move something - or something is misspelled or whatever.

    b) assuming that test is ok, and the folder does exist. now type
    notepad test.txt
    notepad (should) open - in the file write hello, and save and exit notepad.
    type
    notepad test.txt
    file still there? contains the word hello?

    This is the second most common reason for access denied. Some sort of access restriction by the server that prevents files being opened in create / write mode.

    Oh, and remember to do this test _on the machine that triggers the error_...
    If the errorcode is 90, then it probably means that the file is corrupt.

    Your options are (in recommended order)
    a) restore a file from backup
    b) copy a upg.tps from your machine, or the machine of another client.
    c) rename upg.tps to upg.old (on their machine).

    If one TPS file is corrupt then chances are other may be too, so inspect your data carefully after the program starts running. At the very least go to your Runtime File Manager window, do a Tag-All, then "Info".
    Error: Unable to upgrade file which doesn't have a prefix : <filename>
    Cause: No File Prefix specified.
    Reason: You have not specified a file prefix for this file in the dictionary. FM3 needs a file prefix for each file. Alternatively you may have handcoded a file into your application. FM3 replaces the Clarion open function with the FM3 - so all file opens proceed through it. If you have a table without a prefix, then FM3 is unable to determine whether the file is in the "Used File" list or not.
    Solution: Go to the Dictionary and add a file prefix for the file (or add a pre(<Prefix>) if you're handcoding the file definition in your application/project).
    Error: Unable to upgrade file - no file name available
    Cause: FM3 cannot copy your data to a temporary file.
    Reason1: FM3 renames your data file to another name before upgrading. This name is DSTMPxxx where xxx is a number from 000 to 999. If none of these filenames are available (i.e.. they already exist) you will get this error.
    Reason2: Your data is on a different network machine, but the machine that you are running your application from does not have sufficient create/delete/read/write access rights/permissions.
    Solution1: You probably have the "Don't remove old versions" check box checked on in the Global Extension.
    2 steps:
    1. Uncheck the "Don't Remove old versions" checkbox on the Global Extension.
    2. Go to your data directory and delete, or move all the DSTMPxxx files.
    Solution2: Check the permissions settings on the machine that houses the data for the user that accesses the data. Make sure that that user has file create, remove, read and write access all allowed.
    Error: Unable to upgrade file - Error creating destination file <error>
    Cause: The <error> above describes the cause.
    Reason: FM3 could not create and open the destination data file.
    Solution: The solution would depend on the <error>.
    Error: Unable to upgrade file - Error opening destination file <error>
    Cause: The <error> above describes the cause.
    Reason: FM3 could not open the destination data file.
    Solution: The solution would depend on the <error>.
    Error: Unable to upgrade file - Error reading source file <error>
    Cause: The <error> above describes the cause.
    Reason: FM3 could not read the source data file.
    Solution: The solution would depend on the <error>.
    Error: Error Writing destination file <error>
    Cause: The <error> above describes the cause.
    Reason: FM3 experienced an error while writing the data out to the destination file.
    Solution: The solution would depend on the <error>.
    Error: Warning - Driver not located - GPF likely
    Cause: FM3 is attempting to use a driver that has not been registered in FM3.
    Reason: A structure exists in the upg.tps file which uses a driver that is not switched on in your app.
    Solution:
    • Go to the AutoUP tab on the Global Extension.
    • Check on all drivers used in the app, both in the past and present.
      If you are using the Dynamic File Driver, then you will need to add the replacement driver as well (like 'MEMORY')
    Error: WARNING: Possible downgrade...
    Cause: FM3 has detected a possible Downgrade about to take place.
    Reason: Either, you've used the /downgrade command line switch, or an AutoDowngrade on Clarion DAT files. See Downgrading Files for info. ...to be continued...
    Solution:
    • Click Ignore to continue with downgrade.
    • Click Abort to abort the program immediately without downgrading.
    Error: "File has no Prefix"
    Are you using encryption for these files? If so read up on using AutoUp with encrypted files here, as you probably aren't setting the variable passwords soon enough. These variables must be primed before the file is opened. To be completely safe, prime them in the Program Setup embed priority < 3000.
    Error: "The data file is Invalid"
    Are you using encryption for these files? If so read up on using AutoUp with encrypted files here, as you probably aren't setting the variable passwords soon enough. These variables must be primed before the file is opened. To be completely safe, prime them in the Program Setup embed priority < 3000.
    Error: File Corrupt. Restart program to invoke AutoFIX. Name : <FileName>
    Cause: FM3 has detected a possible TPS File corruption.
    Reason: <FileName> is corrupt. FM3 will call TPSFix when the program is restarted and attempt to fix the file.
    Solution: Restart the program.
    Error: Errorcode received on open: <error>
    Cause: FM3 cannot open the file.
    Reason: FM3 does not know how to automatically handle this error <error>.
    Solution: You are highly unlikely to receive this error, as FM3 automatically handles most of the common File Open errorcodes. If you cannot fix the problem based on <error>:
    Send the details together with a debuglog to CapeSoft Support.
    Error: Unable to Open MDI window.
    Cause: The program is trying to open an MDI window before the frame exists, or when no frame exists.
    Reason: FM3 initialises the RuntimeFileManager window before the frame opens when it has detected a possible file corruption.
    Solution: Remove the MDI attribute from the RuntimeFileManager window.
    Error: M13: Memo file missing
    Reason: Some flatfile systems have a separate physical file for the memo contents. If this memofile is missing, then you will get this message.
    Solution: Locate the missing memo file (restore from backup)
    Error: M14: Internal File Format Too Large. File : <FileName>
    Reason: FM3 interprets the file header memory space in order to glean information about file structures (that Clarion uses or requires). The memory required is larger than the maximum specification - this normally means that the file is corrupt.
    Solution: Restore the file from backup.
    Error: FM3: Unable to upgrade. Access to the existing file has been denied
    Cause: FM3 requires exclusive access to data files in order to upgrade them.
    Reason: Another program has access to the data files (either another instance of your application)
    Solution: Ensure that all users have quit the program before upgrading. You could make use of NetTalk's AutoCloseApps control template to do this.
    Error: This record was changed by another station. Those changes will now be displayed. Use the Ditto Button or Ctrl+H to recall your changes
    Cause:
    1. You're using MSSQL and are accessing the database from multiple instances of the application (or threads in the same application)
    2. You are using PostgreSQL and upgraded from TPS.
    Solution:
    1. Use the /MultipleActiveResultSets=true driver switch that you can add to the FM3 connect table (you need to do this in your FM3 global extension template).
    2. See the Turning_off_the_CR/LF_conversion_(to_LF_only) section of the FM3SQL documentation.
    Can't fix Encrypted files
    Fixing encrypted files means that your encryption code is passed to TPSFix via a command line parameter. This means that your encryption code can be detected (and is therefore not secure). You can allow fixing of encrypted files (check the "Allow fixing of encrypted files" checkbox in the RunTimeFileManager control template) - but be aware that this will be exposing your encryption code.

    Back to the top of the errors section

    SQL Specific FM3 Errors

    M11: Unable to open file. Errorcode 90 received. Are you sure your Connection details are correct?

    If you're getting a Errorcode 90 on a SQL file, then checkout the Connection Issues section of the SQL documentation.

    If you get Errorcode 90 on a TPS file, then it means that either the file is encrypted (and the encryption code has changed - so FM3 can't read the file) - or the file is corrupted. In order to get the file error, run your application to output debug information and the fileerror and fileerrorcode will be output to a DebugViewer (see the Debugging & Support section for more information).
    If you're getting a Errorcode 90 on an IP driver enabled file, make sure that you have recompiled the “Data Manager” application after a dictionary change and registered it in the IP Server Administrative Console. If it is already registered refresh the registration. For farther details see the documentation for the IP driver.

    M21: Error: File not in Manageable Zone!

    FM3 can only manage one database at a time. If the database name for a specific file does not match the current database, then FM3 will not be able to convert that database. You need to either:
    1. Move the offending table to the database that will be managed.
    2. Use the FM3IGNORE function to tell FM3 not to manage that file.
    M22: Error Creating / Opening FM3 System File: <FileName>

    FM3 could not create or open the FM3 system file that it requires in the database. Checkout the Connection Issues section of the SQL documentation.

    M23: Error getting IncomingVersionQ:

    FM3 is attempting to upgrade a file that has not been registered (using the ds_UsingFileEx function). This normally occurs if you've handcoded calls to the FM3 functions, but have omitted the call to the ds_UsingFileEx for one specific table.

    M24: Error occurred inserting/updating FM3 System file:

    FM3 uses a file it creates on the backend to keep track of changes that it has made to the database. This error will occur if FM3 attempts to insert (or modify) a record into the table. Depending on what the file error is, will depend on why the insert failed.

    M26: Error occurred executing SQL Statement: <SQLStatement>

    FM3 uses SQL syntax to modify data structures on the backend. This syntax is compiled at runtime in order to re-structure the backend. We have endeavored to cater for as many exceptions as possible, but all the supported backends have different limitations and unique quirks. Occasionally, FM3 will therefore compile a statement based on changes to the dictionary, which cannot be performed on the backend (and which it does not detect as illegal). Let us know about these exceptions and we will build in a check for that specific condition before the SQL statement is compiled.

    M27: Unrecognised Datatype: <DatatType>

    FM3's query to the SQL backend has returned a datatype for a field that it does not know about. Please inform: support at capesoft dot com , and we will endeavor to support that field type (so long as it can be matched to a Clarion datatype).

    M32: SQL WARNING ABOVE - take note!

    A non-fatal error occurred when FM3 performed some file structure changes on the backend. This will be displayed in the logfile.

    M38: Could not locate key field: <FieldName>

    A component of the index\constraint could not be located in the list of fields from the database. The database is corrupt and needs to be repaired.

    M39: Could not reconnect ASA: <Reason>

    Clarion sometimes loses the connection to the Sybase database, and needs to be re-established (when maintaining files). Sometimes this connection cannot be re-established again.

    M43: Attempted using an Invalid field type for creating a unique index/constraint.

    A field in the key is being converted to a datatype on the backend that cannot be used in an index\constraint. You need to either:
    1. Force the datatype to a datatype that the backend will support as a component of keys (use ForceSQLDataType for this).
    2. Remove that particular field from the key's components.
    3. Shorten the field (in some cases (like MySQL) - a maximum CSTRING size is 256, so anything greater than this will be converted to a text datatype, which is not legal in a constraint)
    M44: Attempted creating an index/constraint greater than the permitted size <IndexName>

    Some backends do not permit the fields used in an index to have more than a certain amount of characters (particularly large strings). If you get this message, then you need to either:
    1. remove the key from the dictionary,
    2. remove certain fields from the key's components,
    3. remove the attribute that is forcing the key to be populated on the backend (either the DCTMasterOfKeys or Unique key).
    4. Use a different backend (MySQL < 5 is particularly prone to large keys).
    M48: Attempting to create a key with a reserved keyname: <KeyName>

    You have used a label for your key that is not permitted on the SQL backend that you are using. The best is to change the External name of the key in the dictionary. Generally a good idea is to use: file-prefix underscore and keyname in the external key name.

    M49: Attempting an illegal field type conversion. Field: <FieldName> <FromType> - <ToType>

    FM3 is trying to convert a datatype on the backend, and this field cannot be converted to the type that it needs to convert it to. This normally occurs when there is a pre-existing database - and now you've added FM3 to your application to manage the database. If the field is correctly typed in the database, then you need to use the ForceSQLDataType feature to force the field to the unconventional datatype. Otherwise, you need to delete the field from the database.

    An Example:

    You have imported your tables into your dictionary from an SQL Server. You have a variable type of text in the SQL Server. After importing, the variable type used is a BLOB. FM3 will try and convert this field to an image (which is the variable type normally used for a BLOB) which is an illegal type conversion in SQL Server. To prevent FM3 from attempting to convert this field you can either:
    1. Use the ForceSQLDataType feature to force FM3 to use a text type character
    2. Redefine the variable type in the dictionary as a string or cstring of > 8000 (which will make FM3 use a text type variable on the backend). You will need to ensure that the string/cstring has sufficient characters to handle the data handling in Clarion, as this will be the size of the buffer allocated to the variable in Clarion (even although there SQL data is virtually unlimited on the Server side).

    M70: Cannot load the MySQL driver dll. Is it installed?|Contact your application supplier for details.

    Make sure that the MySQL client ODBC driver is installed on the PC that is running the EXE requiring the connection. In your connection window, you must use the correct MyODBC version to match what you have installed on your PC.

    SQL Related FM3 Errors
    Error: (M20) FM3 cannot detect any connection properties for this file: <FileName>
    Cause: FM3 cannot connect to the database for <FileName>. Checkout the Connection Issues section of the SQL documentation.
    Error: WARNING: FM3 detects this application contains older file structures than the current backend version. Please upgrade your Program. FM3 suggests implementing SafeUpdate for automatic program file upgrades across networks! Ending Program!
    Cause: The application's file definitions are out of date or old, you've imported the structures from your db to your dct, you've restored a copy of your dct (with an old version), or you've decremented the Version number of a particular file (never, ever do this).
    Reason: Possibly another site has a newer version of the exe which has already updated the SQL Backend, but this exe has older file definition versions.
    Solution:
    • Use SafeUpdate to implement automatic program file updates across networks.
    • Alternatively, manually ensure your exe is up to date.
    • If you're still not coming right, delete the gMSSQLFile (or gODBCFile if using ODBC) from the backend. This will be re-created by FM3 again.
    Error: Error locating the Database name for this file: <FileName>
    Owner string searched: <FileOwner>
    Cause: FM3 cannot locate a Database to connect to for <FileName>. Checkout the Connection Issues section of the SQL documentation.
    Error: File Manager 3 does not currently support this Database through ODBC: <DataBase> Alternatively, please check that you entered the database backend correctly on the ConnectToSQLBackend Extension Template. Ending Program!
    Cause: FM3 does not recognise this backend <DataBase>.
    Reason: Either you have misspelled <DataBase> or it is currently not supported by FM3.
    Solution:
    • Ensure you have typed it correctly as shown in the ConnectToSQLBackend Extension Template Notes.
    • Alternatively, if this database is indeed not supported, disable FM3.
    Error: FM3 could not find the specified database (<DataBaseName>) in the backend!
    Cause: FM3 cannot connect to the Database specified in <DataBaseName>. Checkout the Connection Issues section of the SQL documentation.
    Error: Unable to open FM3 System table: <gSQLFileName> Error posted: <Error>.
    Cause: FM3 cannot open the required FM3 system table: <gSQLFileName>.
    Reason: An error occurred: <Error>.
    Solution: If you cannot solve the problem based on the error, send a Debuglog to CapeSoft Support. See the Debugging section.
    Error: Unable to interpret SQL structure: [columns] Error: <FileError>
    Cause: An error occurred when FM3 attempted to retrieve the current SQL file structure.
    Reason: <FileError> should give you the reason.
    Solution:
    • Check User Access Rights.
    • Check that the SQL Server is online.
    • If you are unable to determine the problem, send a Debuglog to CapeSoft Support. See the Debugging section.
    Error: Could not create Oracle TableSpace! <FileError>
    Press Ignore to create the table in the default tablespace.
    Cause: An error occurred during creation of a the specified Oracle TableSpace.
    Reason: <FileError> should give you the reason.
    Solution: If you would like FM3 to continue and create the table in the default TableSpace:
    • Click Ignore.
    If you would like to fix the error, and not continue to create the table at this point:
    • Click Abort.
    • Make the relevant changes to eliminate the error.
    • If you are unable to determine the problem, send a Debuglog to CapeSoft Support. See the Debugging section.
    Error: WARNING: This table already contains an IDENTITY FIELD : <TableName>
    Ensure there is a maximum of 1 per file.
    Cause: FM3 cannot create the identity field.
    Reason: FM3 detects more than 1 identity field specified for this table: <TableName>.
    Solution: Go to the dictionary and ensure that you have only specified 1 field in the file as an Identity Column.
    Error: FM3 has detected a SREAL datatype in your Clarion Dictionary. Oracle does NOT support this datatype.
    Please update your dictionary definition to datatype REAL. FM3 cannot manage this file!
    Cause: FM3 warns you of un-manageable datatype.
    Reason: You have declared a field of SREAL datatype in an Oracle driven table.
    Solution: Go to the dictionary and change it to a REAL, or some other supported datatype for this driver.
    Error: FM3 has detected an INVALID datatype in your Clarion Dictionary.
    FM3 does not support this datatype: <DataType>
    Please update your dictionary definition. FM3 cannot manage this file!
    Cause: FM3 warns you of un-manageable datatype.
    Reason: Not all Clarion datatypes are supported by the various SQL drivers. FM3 supports what the driver can handle, and in some cases more!
    Solution: Go to the dictionary and change <DataType> to a supported datatype for this driver.
    Error: FM3 encountered errors during file structure upgrade.
    Please review the "Debugging" and "Support" sections in the FM3 Documentation,
    or contact your application vendor for technical support!
    Cause: 1 or more errors occurred during FM3's upgrade process.
    Reason: The reason would depend on the errors.
    Solution:
    • Run a Debuglog of the behaviour. See the Debugging section.
    • Analyse the errors yourself, and fix the problem if possible.
    • If you are unable to determine the problem, send the Debuglog to CapeSoft Support.
    Error: Could not configure your SQL Server as a Linked Server! FM3 cannot manage this file! Error: <error>
    Cause: Executing Microsoft Stored Procedure (sp_addlinkedserver) returned an error.
    Reason: Most likely related to user permissions. <error> should give you more details. This is because in order for FM3 to automatically created a linkedserver, it needs to login to the server with a login with sysadmin rights. If you don't want to do this, you will need to create the LinkedServer manually, and then use a login with dbOwner rights (see the FM3 SQL docs for this)
    Solution:
    • Ensure the user has the required permissions and roles for FM3 to function properly (Check the FM3SQL docs - The SQL Database for details)
    • Read the Microsft SQL Server Books Online for information on the stated <error>.
    • Ask your Microsoft SQL Server DBA to configure your server to be a linked server, and set DATA ACCESS to true.
    • If you are running SQL Server Express, then your server name needs to include the computer name that the Server is running on: Computer_Name\Instance instead of just Instance or localhost\Instance.
    Error: Could not configure SQL Server for DATA ACCESS! FM3 cannot manage this file! Error: <error>
    Cause: Executing Microsoft Stored Procedure (sp_serveroption) returned an error.
    Reason: Most likely related to user permissions. <error> should give you more details.
    Solution:
    • Ensure the user has the required permissions and roles for FM3 to function properly (Check the FM3SQL docs - The SQL Database for details)
    • Read the Microsft SQL Server Books Online for information on the stated <error>.
    • Ask your Microsoft SQL Server DBA to configure your server to be a linked server, and set DATA ACCESS to true.
    Error: FM3 File error on final open:<filename> : <driver> <error>
    Please ensure you have the FireBird Client DLL installed on your workstation: gds32.dll.
    Cause: Trying to open an FireBird table.
    Reason: Most likely your workstation does not have the FireBird Client DLL installed: gds32.dll
    or
    <error> describes the problem.
    Solution:
    • Obtain the gds32.dll. (This is installed when you installed IBExpert www.ibexpert.com or copy from FireBird Server.
    • Take action according to <error> described.
    Error: S1000: Connection is busy with results for another hstmt, t: M26, l: 0
    Cause: Multiple connections to SQL Server on the same thread.
    Solution:
    • Prop:BusyHandling = 2 Must be set on the file before any SQL file is opened - indeed this should be done before the connection to the backend is made. A good place to put this would be in the Program Setup before FM3 initializes (there's a place you can add this to the driver option string of the FM3 table used to connect to the backend in the fm3 template). You can also try using the MultipleActiveResultSets=TRUE option in the same place.
    • Older versions of Clarion appear to have been more prone to this error, upgrade your Clarion (if you're not running the latest version).
    • Some erroneous string handling expressions (especially in the filter) can cause this error. Typically if you have variables with the same name as clarion functions.
    Error: Driver Error (1): (10) ODBC.DLL Could Not Be Loaded
    Cause: The ODBC driver is trying to load a specified database client driver that is not installed on this client machine.
    Solution:
    • Make sure that you've installed the correct ODBC driver on the client that FM3 requires. If you're installing PostgreSQL, check out the driver that you need in the Hot Tips section of the FM3 SQL Document
    • Older versions of Clarion appear to have been more prone to this error, upgrade your Clarion (if you're not running the latest version).
    Error: 01000: OLE DB provider "SQLNCLI" for linked server "KB-SERVER\LTC" returned message "Login timeout expired"
    Cause: The connection to the linked server is timing out.
    Solution: Take a look at http://sqlserver2000.databases.aspfaq.com/how-do-i-prevent-linked-server-errors.html for possible solutions. Alternatively, google "Login timeout expired" SQL and see the results.
    Error: S0002: Cannot find the object "dbo.Ass_LevelUser" because it does not exist or you do not have permissions.
    Cause: There is no linked server created (or created incorrectly).
    Solution: You are most likely connecting from a 64 bit PC, which requires the server name and the server instance entered into the connect window.
    If you don't have the facility for this, re-import the connect window, and enter the settings correctly:


    Runtime Errors Related to FM3...
    Error: Untrappable runtime error - program crashes at startup (during FM2/3 launching)
    Cause: Possible corrupt UPG.TPS file
    Reason: UPG.tps is a tps file - and is also vulnerable to the weakness of the TPS driver. This means that very occasionally the UPG.tps gets corrupted (which I think is what happened to you).
    Solution: You can minimise the damage by having a separate EXE to upgrade your tables - and run this on upgrade, rather than each instance of the application upgrading some tables as and when it uses them (although you may still want to leave FM2 installed in those apps in case someone runs it before the upgrade program kicks in - or without upgrading). The less applications writing to the UPG file at any given point in time the better.
    Error: My program starts with the "Unable to open MDI window (No application active) message"
    Cause: You have a corrupt data file and the application is trying to launch the RuntimFileManager window in MDI mode
    Solution: You have 2 options (the first is preferable but may not be possible for an immediate solution):
    • Make the RuntimeFileManager window not an MDI child. If you have a menu item for it then make sure the menu item is set to NOT call it on it's own thread. (i.e. you do not want to start a new thread when running the RuntimeFileManager window.)
    • A temporary fix, assuming for some reason you can't recompile, is to edit the Win.Ini and remove the BadFile setting. This is an entry in the win.ini file that tells FM3 to run the RuntimeFilemanager and fix that file.
    Error: I've added FM3 to my IPDriven application, and now I get a Memory Block free'd twice error?

    This is a known issue. Once adding FM3 to the IP_Server Dll, a Memory Block free'd twice error occurs on unloading of the dll. We are not certain of the cause, but this will only occur when you close the IP_Server Dll. The message will remain for about 20 seconds, and then disappear harmlessly. Further to this, you can set your IPREQ service to not allow interaction with the desktop. This will ensure the error is not visible.
    Error: File could not be opened. Error: Invalid Filename (45). Press OK to end this application.

    Normally this occurs because you are relying on FM3 to set the filename (in SQL applications) - but you've added the FM3Ignore property to that file. The best option is to set this in the dct, but you can also get FM3 to setup your filenames (for the FM3Ignored files) in the Connect window, by checking the 'Set filenames with the FM3Ignore user option' checkbox on the control template prompts.

    Translating FM3 Error Messages

    FM3 makes use of a translation file to translate error messages. The name of this translation file can be set in the FM3 global extension template (in the Translation tab). This can either be a variable or a constant.

    Checking the 'Make a blank translation file if non-existent' checkbox will force a translation file (of the name specified) to be created and populated with the default English text for each message. The translation file is in an INI file type format as follows:

    [Messages]
    M1=Possible file change without changing File Version number. File involved :
    M2=Unable to Open UPG file : cause
    M12=Please wait - Upgrading file
    .
    .
    .

    Thus to translate each message into another language, you replace the English text with the text required. In Dutch this would be something like:

    [Messages]
    M1=Possible file change without changing File Version number. File involved :
    M2=Unable to Open UPG file : cause
    M12=Please wait - Upgrading file
    .
    .
    .

    Also implement translation into the AutoNet windows: Translation for AutoNet

    FAQ (Frequently Asked Questions)

    If you're getting errors when converting to Clarion7, please check out the C7FAQs page on our website

    Check out the Errors section for all queries on compile errors, runtime errors, GPFs and program hangs.

    NOTE: Please also check the FM3 forum for further FAQs: http://clarion.capesoft.com/BrowseTopics?ThisForum=15

    AutoNET Questions
    Upgrading Questions
    Please take note of the AutoUpLimitations section of this doc.
    SQL Specific FM3
    Other Questions

    AutoNET Questions
    GQ5: AutoNET does not seem to work?

    NOTE: CapeSoft no longer recommends AutoNet for application upgrading, as this is not a UAC compliant solution for Windows Vista and up.

    This is probably because you have the ini file, containing the settings, in the wrong location. The default location is either the Windows directory, or the current users temp directory. See the AutoNET docs for details. Particularly the TroubleShooting and Debugging section.
    GQ10: AutoNET give me an error saying the AutoNET.exe and File Manager are out of Sync?

    Check and make sure the values in the designated INI file, for NetPath and LocalPath, use the Short form of the name. In earlier versions of Clarion Long File Names were not supported. The AutoNet.Exe is compiled in Clarion 5 so it _does_ support Long File Names, but if you use it with a Clarion 2 program, and you use the longer version of the path name, then you might get this error.
    GQ27: AutoNET isn't working in my Multi-DLL application - I have VLDS added as well.

    You need to setup AutoNet in your data DLL application as well as your main EXE for AutoNet to work in conjunction with VLDS.

    Upgrading Questions

    GQ1: I still get Error 47!?  (or "FIELDS D00001 - Component does not match physical file")

    Check through the following list to determine the reason (If you have recently upgraded Clarion, or even ClarioNET, you will need to repeat step 2 of the following list.).

    FM3 Error 47 Check list:
    • You have definitely run the Support ABC Template Utility (NOTE: This is no longer done automatically for you in Clarion 8 and up. You need to do this manually each time you upgrade your version of Clarion).
    • You have the CREATE file attribute turned on (if you don't want to do this in your dct, checkout SQ34).
    • You have definitely added the FM2 define to my Project Property Defines.
    • You have not deleted or moved the upg.tps file.
    • You added FM3, compiled and ran your program before making file structure changes. If your are using SQL, then make sure that your Owner string uses the dbOwner variable you set in the SQL_Connect window.
    • Check that you're not calling a procedure which accesses a file before FM3 initializes. To do this, run FM3 in debugmode, and see if your errorcode happens before any of the debug appears in the DebugView.
    • Check that your file structure is legal for the file driver that you are using. (For Example: No Arrays in SQL)
    • Check that the old structure is matched in the upg.tps file. To do this:
      1. Open your existing data file in C-Scan. If it does not open, then there is no matching file structure in the UPG.tps file. This means that the upg.tps file was either moved or deleted at some stage. You can open UPGView to see the various historical structures of that file contained in the UPG.tps file for that table. Basically, FM3 needs to find one of those structures that matches the one in the existing table in the UPG.tps file - otherwise it will not be able to open the file. Note: UPGViewer does not provide an exhaustive display of all the properties of the file header, so it appear to display exactly the same information as the file structure expected, but there may be slight nuances between the file header structure (as in the existing file) and that saved in the UPG file, which are not displayed in the UPGViewer.
      2. If it does open successfully in C-Scan, then wizard an app with just that offending table, add FM3 to that application and see if the table converts successfully.
      3. If that's successful, then there's something wrong in your program - either the datapath is incorrect, or it's using a different UPG.tps file (check for instances of the ds_SetUPGPath call in your program).
    • If you have changed the FilePrefix - check the rules for changing a FilePrefix.
    • If you have used an external field name, make sure that there are no spaces in the external field name.
    • Occasionally calling a procedure in the OpenWindow event of a procedure may induce this behavior (the calling window is in modal mode during this event). You'll find that moving this code to the init method will resolve this.
    • (MSSQL) If you are using a uniqueidentifier, then you need to use an external name when using the '| READONLY' attribute. Unfortunately, there's no way to rename the column after it is already added - so you will need to use the column name in the external name.
    • (SQL) Check if your table has a group over string for a datetime. If the datetime field is being created as a char(8) then your field name is probably too long. Assign an external name (for the group) that is shorter than 50 chars.
    • If you are using hyperthreading and/or multi-cpus and you get the Error47 or D00001 intermittently, then you should try binding your exe to a single cpu (google for assistance)
    • If you are changing a table name (for example storing to a backup), then make sure that you set the variable (containing the filename). It seems like in some cases changing the table name using {prop:name} will cause a error 47 or D00001.
      If you are certain you have obeyed "The RULES", and the above check list, please send your app, dct, upg.tps, builtins.clw, and a Debuglog to CapeSoft Support detailing the steps taken.
    GQ2: When is it a good idea to delete the upg.tps file?

    Never. To get some idea of this question, ask yourself, when is it a good time to delete your customers / invoices / products / whatever file. The answer is never right? well that goes double for the upg.tps. Never. Never. Never. Get it?
    GQ3: When is it ok to decrease the file version numbers in the dictionary?

    Never. Never. Never. Except if..... no, that's right, never....
    GQ8: Does FM3 support programs that use Multiple Data Sets?

    For flatfile, yes, but for SQL databases, it can only manage one contiguous database connection. See Support for Multiple Data Sets
    GQ9: Does FM3 support programs using different dictionaries, but sharing the same UPG file?

    Yes. Absolutely no problem here. One consideration though - If you have files of the same name ( ie Customer File) in the different directories, then the file structures, Including File Version Number, must be the same in both Dictionaries.
    GQ11: I added FM3 to my application, but now it takes a long time to load?

    You may have made a call to ds_SetUPGPath after FM3 has initialised itself - in which case FM3 is loading twice. In order to eliminate the second load up make your call to ds_SetUPGPathbefore FM3 initializes. There is a Global embed point, called "FM3 : start of initialisation section", where you can do the call.
    GQ12: I ran CScan, but it prompts for a password. I tried the password you emailed me, but it does not work?

    The password to C-Scan is SCAN.
    The password you were emailed is to extract the FM3 install file from the saf file using SafeReader, downloaded from our website.
    GQ13: I am having a problem with upgrading using an Alias file?

    This can be a real funky problem, especially if the Alias was introduced well into the development cycle. From FM3's point of view an alias behaves very similarly to a file. However if the file structure being converted pre-dates the introduction of the Alias then you may get an effect where the file is converted, but all the fields are cleared. In a situation like this try and make sure that the genuine FILE is used in the app before the ALIAS.
    GQ15: I changed a field from decimal(13,3) to decimal(13,4). FM3 upgraded the file, but now the data values for that field have been divided by 10?

    The problem here is that you haven't fundamentally changed the file, but rather you've changed the interpretation that the program applies to the decimal field. It's natural to think of the decimal declaration as (digits-left-of-decimal-point , digits-right-of-decimal-point). But this is not the way they are actually defined. The clarion definition of a decimal is (total-number-of-digits , number-right-of-decimal-place).

    Thus when you changed 13,3 to 13,4 you effectively decreased the size of the number that can be stored. In order to simply add an extra decimal place you should have converted to 14,4 .

    It is possible to correct the problem, but you must be careful to do it right, or your data will remain in a "divided by 10" state.
    • Go back to the dictionary. Set the decimal back to 13,3 BUT INCREMENT the file version number.
    • Compile and run the application.
    • Back to the Dict again. Change the decimal correctly this time. i.e. to 14,4. INCREMENT the file version number again.
    • Compile and run the application.
    GQ23: FM3 upgrades my files perfectly, but I cannot see the name of the file displayed on the upgrade window?

    Are you using Prop:LazyDisplay? This is be known to cause a problem with the name being displayed on the upgrade window.
    GQ25: Is there any way to exclude a file from AutoUP?

    Yes, see the Ignoring a particular file section.
    GQ28: Is there a variable I can check inside the trigger statements to make sure the triggers don't fire on an FM3 upgrade?

    What you need to do is create a pointer to a byte (in your global data) and then before FM3Initializes:
    MyPointerToFM3Upgrading &= (ds_PassHandleForUpgrading())
    Then you can use MyPointerToFM3Upgrading to detect whether FM3 is upgrading or not. In the trigger, it would be worth checking whether the pointer is null or not before using it.
    GQ29: FM3 hangs when it tries to convert a superfile in my application.

    This is an oddity in the Clarion environment. You probably have a file (that's in the file) that is open already in another window. You can either:
    1. Upgrade all the files at the startup of the application.
    2. Run the application with the /silentupgrading command line parameter when running your program. The FM3 progress screens will not be displayed, but the conversion will occur without hanging the application.
    GQ30: How do I upgrade all my tables at startup?

    On the Global Extension template, check the Force full upgrade on Startup checkbox. (Note: You must have added the RuntimeFileManager procedure to your application, and checked the Enable Auto Fix on the AutoFix tab of the FM3 Global Extension template in order to be able to do this).

    If you would like to place a condition around the full upgrade, then the place to do that is in the Global Embeds, using code around the 'FM3 - Do Fullupgrade on Startup. Place condition around this embed' embed point:

    Optional Full Upgrade At Startup screenshot

    If you need to do additional functionality (other than just upgrade the files - like build or pack) - then:
    on the RuntimeFileManager window, Goto the Info button, and find the End of Fullupgrade embed point. Make a source entry point immediately above that and enter:
    if ds_DoFullUpgrade()
    post(event:accepted,?Build)
    end

    omit('****')

    And after the End of FullUpgrade embed, enter the following:

    !****

    In your embed point of the build button (after the FM - Handle Build button embed), enter:

    if ds_DoFullUpgrade(0)
    post(event:accepted,?Done)
    end
    Q31 FM3 upgrades my tables, but my data is getting corrupted.

    Check the following:
    1. You don't have a dimensioned group in the file structure. FM3 does not support dimensioned groups.
    2. That you're not changing a datatype which will invalidate data (for example a string based data type to a value based datatype). FM3 simply reads the data in binary and puts it straight into the new variable space.
    3. If you have OEM collation checked, then FM3 does not support changing file drivers with OEM collation turned on. Clarion uses different OEM algorithms to interpret the actual bytes returned from the files, so the same byte returned from two files with different drivers will be interpreted as 2 different characters.
    4. Clarion5 users: You don't have a BLOB in your TPS file structure. FM3 does not support BLOBs in flatfiles (in Clarion 5).
    5. If you have triggers in your dictionary, these can affect the data migration to the upgraded tables. You need to turn the triggers off for the upgrade (you can use the ds_FM3Upgrading flag to determine if an upgrade is in process).
    Q32 I'm changing a long to a decimal, but my data is all wrong after conversion.

    You must change the size of the variable storing the decimal - so you cannot convert to a Decimal 7,x or 6,x.
    Q33 I want to use my own routine to handle newer file structures on the SQL database

    In your data-dll (or exe app for single-exe applications), run the "Import a sample FM3Callback procedure" template utility. This will create a source procedure that you can use to redirect FM3 based on other factors (that you choose). So typically if you wanted to run an install, and then abort the application, you would code something like this in the source procedure:

    if pFunction = 1   !This is the override where newer files are found on an SQL backend
      run(MyinstallFile)
      halt
    end

    You can test your function by running your application with the command line parameter: /FM3TestCallback
    Q34 How do I change a field value during upgrade?

    In your single exe application (or data dll for multi-dll applications):
    1. You need to create a callback procedure. You can do this by using the ImportFM3CallbackProcedure template utility that ships with FM3. You will find a newly created MyFM3Callback source procedure added to your app.
    2. Go to the AutoUp tab of your FM3 global extension template, and enter the 'MyFM3Callback' procedure name in the "FM3Callback Procedure" template prompt.
    3. In the source of the 'MyFM3Callback' procedure, you can code the changes you require as follows:

      MyCallbackFunction procedure (long pFunction,string pFileName,long pOptions)
      UFDGroup group(FM3:UFDGroupType),pre(UFD) .
        code
          case pFunction
          of FM3equ:UpgradingFile    !About to upgrade a file
            message('About to upgrade file: ' & pFunction & ' File: ' & clip(pFileName))
          of FM3equ:CopyingRecord   !After copy record, before save
            if pOptions = address(Customer)
               !We're upgrading the customer file, so in here you can calculate new field values.
               !CUS:Surname = ' New: ' & CUS:Surname
               !message('copying Record: ' & pFunction & ' File: ' & clip(pFileName) & ' Add: ' & pOptions & ' = ' & address(Customer) & '     Fields: ' & clip       (CUS:FirstName) & ' ' & clip(CUS:Surname))
            else
                !message('copying Record: ' & pFunction & ' File: ' & clip(pFileName) & ' File? ' & pOptions)
            end
          of FM3equ:UpgradingFileDetailsString
            UFDGroup = pFileName
            message('File ' & UFD:FromLabel & ' upgrading from: ' & UFD:FromPrefix & ' To: ' & UFD:ToPrefix & '|Version: ' & UFD:FromVersionNumber & ' To: ' & UFD:ToVersionNumber)
          of FM3equ:EndUpgradeFile
            message('Finished upgrading file: ' & pFileName)
          end
          return 1

    Q35 How can I trap if a file is being (or has finished being) upgraded?

    Follow the steps in FAQ34 to trap a file upgrade and when it is finished, and the details of the file upgrading from and to.
    Q36 How do I set the location of the upg.tps file?

    Use the following commands to close the upg file, and then set to a new path: ds_CloseUPGFile() and set ds_SetUPGPath() to the path when you set the new data path.
    Q37 I have incremented the version number in the dct, but I still get the error message "Possible file change without changing the version number error message.

    Clarion does not detect the version number change as a material dct difference. It therefore does not force a default clw re-generate. Delete the default clw in your data dll (or exe for single exes) and re-generate and compile.

    SQL Specific FAQ

    SQ3: I'm getting FM3 SQL errors about a syntax error near the Keyword ... ?

    You have named a file, field, or key with a SQL Reserved Keyword. For more information, see your SQL documentation. BDE (Clarion 6 only) can bulk allocate all external names to include the file prefix (e.g.: PRE_Keyword).
    SQ4: Only my Primary Key is being created on the SQL backend. Why aren't my other keys being created?

    Read the FM3 SQL Key Management section.
    SQ5: I'm using DCTMasterKeys/DCTMasterFields but FM3 is not creating / dropping Keys off the SQL Backend?

    Read the FM3 SQL Key Management section.
    SQ6: I am converting TPS to SQL. No error messages pop up, but my data is NOT converted to the new files?

    Check:
    1. You have run the SupportABC template utility. You must do this each time you upgrade Clarion.
    2. You have added the OldName property to your File User Options in the dictionary. If only some files are converted correctly, then this is most often the cause (that you may have omitted this on some of the tables).
    3. FM3 is creating the tables in the SQL backend. FM3 must create the tables in order to transfer the data. If the tables exist already, then your data will not be transferred.
    4. There is no error when upgrading (in this case check the FAQs for the error that you are experiencing)
    5. You do not have the create attribute checked for that/those table(s) in the dictionary property. You must check the 'Enable Table Creation' checkbox checked. If you do not want to do this, checkout SQ34 .
    6. Make sure that you've set the oldname to the correct attribute. If your data is not being ported across, it means that FM3 is not finding the old file - or else the table already exists on the backend. Make sure that you're setting your filenames immediately prior to FM3 init (and not after FM3 has initialised). Also, you need to have added FM3 to your application before doing the conversion. If not, you need to go back to your previous app and dct (before doing the conversion) - add FM3, compile and run your old application.
      For more info, see the Converting your app to SQL section.
    7. Check that your SQL application is using the UPG.tps file that your tps application was using. If FM3 cannot find the file structure in the UPG.tps file that it needs to open the TPS files, then it will not convert these. If only some files are converted correctly, then this is most often the cause.
    SQ7: Does FM3 support the creation and maintenance of File Relationships on a SQL backend?

    No. Not at this stage.
    SQ8: If FM3 supports ODBC, why can't I use FM3 against any ODBC driven backend?

    Unfortunately, there is no SQL language standard. Each SQL Backend uses a slightly different dialect of SQL. Therefore, FM3 needs to be told exactly how to interpret structure of different backends, and execute the upgrade scripts. We have chosen at this stage not to rely on 3rdparty ODBC dlls, but we may well implement a generic ODBC engine at a later stage.

    Generally we implement support for new backends based on demand. The higher the demand, the sooner it will be added. Feel free to make your request - or use our prioritisation of features policy ( www.capesoft.com\support.htm) to bump the implementation of your priority up the list.
    SQ13: Every time I run my app, FM3 "upgrades" my files even though no changes have been made. (ie, I see the little yellow progress bar window flashing up for 1 or more files.)

    There could be a number of reasons for this:
    • Are you running your program with the /goindeep commandline switch? If so, remove it.
    • Have you turned on the "Full FM3 comparison" switch on the Connect Window? If so, uncheck it.
    • It could be that for some reason, FM3 is unable to mark this file as managed, or update it's version in the FM3 SQL System table. Run a debuglog, and see if you can solve the problem, or send it to CapeSoft Support for analysis.
    • If you have made a change in your dictionary that FM3 is unable to perform (because the change is not permitted by the SQL Server) - then FM3 will attempt to perform this change every time the file opens. Common errors: changing an image based data type to a text based data type (or visa-versa) - changing a ROWGUID column's name.
    SQ15: The Connect window opens initially the app, if I select an item from my menu, the Connect window re-opens.

    Checkout the Connection Issues section of the SQL documentation.
    SQ16: I have a Decimal(18,0) (in my dictionary) that FM3 converts to a Decimal(19,0). Why is this?

    Clarion stores the Decimal size in odd number multiples. It thus sees a Decimal(18,0) (on the backend and dictionary) as a Decimal(19,0). FM3 will change a Decimal(18,0) to a Decimal(19,0) - even though the dictionary says it's Decimal(18,0). The runtime file properties that Clarion returns show it as a Decimal(19,0), therefore FM3 will detect this as a field type mismatch and perform the conversion.
    SQ17: Why is it necessary for FM3 to create a linked Server on my SQL Server?

    FM3 requires a linked server to extract information about the existing table structures from the system tables of the database. In order to created a linked server, the user must have administration rights, otherwise FM3 will be unable to create a linked server and therefore be unable to read the system tables containing the table structure information.
    SQ18: Why can I not use the /TURBOSQL property for my MSSQL tables in FM3?

    Normally (without /TURBOSQL=TRUE set) when opening a table in SQL, all the field properties of the table are returned. FM3 needs this information to verify that the file structure is correct.
    SQ19: I cannot connect to my MSSQL database with the name, but I can via the IP Address.

    Checkout the Connection Issues section of the SQL documentation.
    SQ20: Where should the upg.tps be located in the case of a SQL file server installation?

    Seeing that there is no common data directory - I'd go with putting in the appdata directory (for Vista compliancy). What is quite a common tack is to run a conversion application on installing (which would probably be done on a central location - fileserver or the like) - this upgrades all the datafiles on installation, so that at runtime, each user is able to run their application without any upgrades required. The UPG file then becomes superfluous to each individual instance of the application.
    SQ21: FM3 does not create any of the tables on the backend except the gMSSQLFile.

    This is indicative that your owner string for your dct tables is set incorrectly. A couple of things that would cause this:
    1. Duplicate variable declaration of the owner string (GLO:dbOwner defined in your application and your dct).
    2. A different variable used in the owner property in the dct (or your Multi-Proj template if you're using Driver Substitution) to that set in the SQL_Connect window.
    3. The SQL_Connect window called too late (this should not happen if you're using the template to call the window - but if you're calling it manually in code, then it needs to be called before FM3 initializes).
    SQ22: I'm converting my TPS data to Oracle (or Oracle Express) - but my unique indexes are not being added.

    The most likely reason for this is that your Oracle server has been pre-configured to accept upper case names. If your external names use mixed case, then Oracle will not match the mixed case names to the upper case names in the database. If this is the case, then change your external names to uppercase (or if this is a Multi-Proj Driver Substitution application, then you can check this option in the File Driver options).
    SQ23: My application takes a long time to connect to the SQL Server (or doesn't connect).

    There are a couple of possible for this:
    1. If you have a SQL View(MS-SQL) declared and that does not have an Owner Name. Enter a owner.
    2. If using Windows server software without Active Directory Services, you may need to add a static host record for your server manually (Google this for help on your particular server and environment).
    3. If you are connecting to a server that is not on the same PC as you application: Check that the server is allowing remote connections, also that the firewall is allowing access through the port that the SQL server is listening on.
    SQ24: How do I enable /MultipleActiveResultSets or /BusyHandling (or other driver strings) when using FM3?

    MARS (and BusyHandling and some other driver options) - must be established at connect time. In other words, they must be set on the table that is used to make the connection to the db. If you are using FM3, then you can't set this in your dct (because any table that you are opening will already have an established connection to the db by that stage), you need to set it in the FM3 Global Extension template (on the AutoUp tab, there's a driver string entry field that you can enter what you want in the driver string). The template prompt to use for this purpose is the "Driver string (for connect)" template prompt. FM3 makes it's own table that it uses to connect to the database, which is why you need to add the driverstrings required for the _connection_ to the FM3 table in the Global Extension template.
    SQ25: My AutoNumbered key is not AutoNumbering correctly (or my AutoNumbered field is not being created as an identity field).

    In SQL, AutoNumber is created on the field level, not the key level (like the Clarion dct). Take a look at Server side Auto-incrementing for details.
    If you're using Clarion 7 or up, then the most likely reason that your Field is not created as an identity field, is that you need to run the SupportABC template utility (because FM3 is not creating your table, but rather Clarion is).
    Check that you have added the AutoNumber FIELD user option correctly (see AutoNumber in the user options)
    SQ26: How do I use a different ForceSQLDataType for different backends that I'm supporting?

    1. In your connect window extension template, equate the db that you're connecting to to a global variable (create a GLO:ThisODBCdb) in the 'GloVar For BackendType' prompt.
    2. In your global embeds find the following embeds (see attached pic) for the field you need to change.
    3. In the ForceSQLDataType - Before embed:

      ForceSQLDataType embeds

          case GLO:ThisODBCdb
          of  'MSSQL'
       !One in the dct is set for MSSQL
    4. In the ForceSQLDataType - Just After embed:

            of 'ORACLE'
            orof 'ORACLE EXPRESS'


                ds_ForceSQLDataType('CON:MemoField','imageblob')
            of 'MYODBC 2'
            orof 'MYODBC 3'
            orof 'MYODBC 5'
            orof 'FIREBIRD'
            orof 'POSTGRES'
            orof 'ASA'
                ds_ForceSQLDataType('CON:MemoField','text')
              

          else

             !Unknown ODBC type - don't force the datatype

          end
    SQ27: I get "Invalid character value for cast specification" when running my application.

    You are probably using the incorrect ODBC file driver for the backend that you are connecting to. For instance, in SQL Server 2008, you must use the SQL Server 2008 driver (not the generic SQL Server driver) if you are using dates and times.
    SQ28: I have problems connecting to the database. What should I look for?

    If you have errorcode 90, on a straight connection, but can connect using dsn, then it could very well be that you an instance of Zone Alarm has been installed, and is interfering with the connection.
    SQ29: I am using FM3 and Multi-Proj driver substitution. The SQL_Connect window pops up in my TPS app. Why?

    You need to uncheck all the SQL driver checkboxes in the AutoUp tab of the FM3 global extension template.
    SQ30: I'm using PostgreSQL, and when FM3 tries to upgrade a large table I get and "Out of memory while reading tuples.." message

    You need to add the following driver options to the table that connects to the backend (in this case the FM3 connect table):

    DeclareFetch=on

    You can do this in the AutoUp tab of the FM3 global extension template.
    SQ31: My data is converted - but there is additional data (leftover from previous records) in my data field

    You have a string that is terminated with <0> char. IOW it is behaving like a CString, and Clarion is displaying only up to the <0> char (in your TPS app). SQL does not permit binary chars in a text based field (like a char) - so FM3 will convert <0> to <32> and keep going. In this case, you need to make your strings (that behave in this manner) CStrings (in the dct).
    SQ32: How do I use Firebird Embedded in my application?

    1. Add the SQL_Connect window to your application in the normal manner (see jumpstart for details).
    2. In your Data dll or exe (for single-exe applications) on the FM3 global extension template (Auto Up tab) check the ODBC Driver, and the 'Firebird: Enable embedded version' check box.
    3. Create a blank firebird database. You'll need to add this to your installer (install to the ProgramData directory of another
    4. You will need to download the firebird embedded drivers from SourceForge (or unzipped from https://www.capesoft.com/ftp/public/resources/FireBirdEmbeddedFilesForAppDir.zip) to your application directory. You will need to ship those with your application. If you download the one from sourceforge, you must copy the fbembed.dll to gds32.dll and fbclient.dll.
    5. When you run your application for the first time, in the SQL_Connect window, the server name must be blank and the port 0. Make sure that the DatabaseName is the fdb filename and path of the firebird database.
    SQ33: Since changing to Windows 7, my users can't connect to the MSSQL database.

    1. You must re-import the SQL Connect window
    2. At runtime, set the Server address and server name in the connection options:

    SQ34: I don't want to apply the create statement to my tables in my dct, what must I do?

    1. You can override the create attribute of your tables in the exe.
    2. In this case, the best is to create an upgrader application, and in the global properties, on the Individual File Overrides, override the Create Attribute for each table:

    SQ35: I have a random constraint for each field generated by FM3. How do I avoid that?

    1. If you have 'Prime new fields zero / blank' then the Default '' attribute is added to the SQL alter statement when creating the field. The effect of this is that MSSQL will create a non-unique constraint for each field (to generate the blank default).
    SQ36: I have a unique index added for each of my unique keys. How do I force FM3 to create a constraint rather than an index?

    1. FM3 will by default create Indeces for your unique keys if you use DCTMasterOfKeys. You can override this behaviour by adding the DCT user option: CreateConstraint = 1.

    Other FAQ Contents

    OQ1: Where can I buy FM3?

    Read the Purchasing section in this documentation.
    OQ2: I bought FM2/3 some time ago, but want to upgrade. How much does it cost?

    Upgrades are currently FREE for FM3 users ...even across Clarion versions. Read more info in the Purchasing section. If you are still using FM2, you will need to purchase an upgrade from FM2 to FM3 (see the Purchasing section for details).
    OQ4: What must I do to support Windows Vista?

    The best is to store your application data in the CommonAppData directory. Ideally you need WinEvent to return this so that you can set it correctly in your application on startup, otherwise you can use the windows API calls to return this location.

    In the "FM3 start of initialization" embed, you need to set your application data path:

    GLO:CommonAppData = LONGPATH( CLIP( ds_GetFolderPath( WE::CSIDL_COMMON_APPDATA ))) & '\<Company>\<Product>'   !You'll need WinEvent for this functionality
    ds_SetUPGPath( CLIP( GLO:CommonAppData ))  !Tell FM3 where to find our upgradable files
    SYSTEM{PROP:DataPath} = CLIP( GLO:CommonAppData )  !Set the datapath for all our common files
    OQ5: I don't use SQL - why should I upgrade from FM2 to FM3?

    We are no longer implementing changes to FM2 - so any features added to FM3 will not be included in FM2. For example, TPS BLOBs are now supported in FM3, we've improved the renaming of temp files (so you hardly ever get the 'data disappearing' that occurred after a failed upgrade), FM3 does upgrading in multiple transactions - reducing memory usage, and other changes.
    OQ6: How do I remove FM3 from my application?

    If you have added FM3 to any other application in your multi-dll than the data dll, start by removing the FM3 global from that application and compile. If you get compile errors, it's most likely that you have used an FM3 DLL function in your application. Remove the call.
    In your data dll:
    1. Remove the SQL_Connect procedure.
    2. Remove the RuntimeFileManager procedure.
    3. Remove the FM3 global extension template.
    4. Remove the FM2=>1 from your project.
    5. Remove the claFM3.lib file from your project.
    Compile.
    Contact support if you get compile errors.

    Debugging & Support

    Please note: Before contacting CapeSoft Support, evaluate the nature and level of your problem by completing the Support Request Check List. If you have answered all the points with a "Yes", then follow the steps for submitting a Support Request. If you answered "No" to any of the questions in the checklist, and have read the relevant documentation without finding an answer, then follow the steps for submitting a Support Request.

    Note: Please feel free to contact us with any Documentation bugs or errors.

    Support Request Check List

    Debugging FM3

    FM3 can produce extensive and valuable debug logging information. All logging produced can be captured using the free SysInternals' DebugView application available from www.microsoft.com. You'll need to download this now if you don't have a copy.

    debug view logging information screenshot
    Example of using DebugView to monitor FM3 applications

    DebugView allows you to view and save the FM3 DebugLog information.

    Disclaimer: DebugView is not a CapeSoft product and while we recommend it (and we use it ourselves), we can not take responsibility for what this application may or may not do to your computer system.

    To turn on the logging you will need to do the following:

    1. Run the DebugView program.
    2. Run your FM3 enabled program with 1 of the following command line parameters:
      • /debugfmgpf- reports functions executed, useful for tracking down a GPF.
      • /debugfm- standard debug switch, reports functions executed and errors. (Recommended for your use)
      • /debugfmall- reports everything. These files can be quite big. Use this when sending the DebugLog to CapeSoft Support.
        Syntax example: C:\AppDir><YourApp> /debugfmall
    3. You will see the DebugView logging as your program runs. Once complete, go File > Save As ... to save the log file.

    DebugView Tips

    Creating an example application

    It is often helpful if CapeSoft Support can reproduce the problem you are experiencing. We suggest you try to reproduce the behaviour you're experiencing in a small example app, or even one of the Example apps shipped with FM3. If you are unable to reproduce the problem in an example, then you can continue by doing some investigative work on the differences between your app, and the example. This means you save time waiting for us to tell you that we cannot reproduce the problem, and sending you on an investigative hunt! <g>.

    The easiest way is to create an upgrader application.

    Some important rules for submitting example apps:

    Submitting Your Support Request

    Please analyse which of the following attachments should be included in your support request, and zip them together.

    Files to accompany your support request

    Describe in detail the steps you took to produce the problem

    Please be as descriptive as possible when describing the behaviour you are experiencing, and send an email along with the above listed attachments to .

    Coming Soon: Support Request Form.

    Purchasing and Support

    If you are currently an FM2 user, you will need to purchase an upgrade to FM3.
    You can purchase the FM3 upgrade at:
    Buy Online
    Web Buy now at ClarionShop
    www.clarionshop.com

    Remember: Upgrades are, at the moment, FREE for FM3 users. Please make sure you keep up to date with the latest version of FM3. To update now, go to the downloads page.

    Each developer needs his own license to use File Manager 3. (Need to buy more licenses?)
    CapeSoft Support
    Email
    Telephone +27 21 715 4000
    Fax +27 21 715 2535
    Post PO Box 511, Plumstead, 7801, Cape Town, South Africa
    File Manager 3 may be purchased from:
    CapeSoft Sales
    Web www.capesoft.com
    Email sales at capesoft dot com
    Telephone +27 21 715 4000
    Fax +27 21 715 2535
    Post PO Box 511, Plumstead, 7801, Cape Town, South Africa

    Buy Online
    Web Buy now at ClarionShop
    www.clarionshop.com

    Distribution

    When you distribute your FM3 enabled application, and you have compiled in "Stand-Alone" mode, then you will need to ship the following DLLs with your application:
    FM3 Distribution DLLs
    Clarion Version DLLs required
    Clarion 5.5 c55fm3x.dll, c55dosx.dll, c55tpsx.dll
    Clarion 6 c6fm3x.dll, c60dosx.dll, c70tpsx.dll
    Clarion 7 c70fm3.dll, c70dos.dll, c70tps.dll

    Please note: If you are using AutoNET, then you will need to ship the AutoNet.exe application in your install as well. If you are using AutoFIX, then you will need to ship the TPSFix.exe application in your install as well.

    Please note: FM3 does not support 16bit applications.

    Miscellaneous Topics

    Converting your FM2 apps to FM3
    Converting your CW2 apps to Clarion 4 or above
    International Language Support

    Converting your FM2 apps to FM3

    FM2 and FM3 can NOT co-exist in the same app, but an app can easily be converted to FM3.

    Here are the recommended steps for converting your FM2 app to FM3:

    Converting your CW2 apps to Clarion 4 or above

    When converting your apps from Clarion for Windows 2, to Clarion 4 or above you'll need to remember to do the following:

    International Language Support

    FM3 allows you to translate all the error messages into your own language. This is done through the use of a simple INI file (called FM3.INI).
    Sample versions of this file are shipped with FM3, and can be found in your Clarion\3rdparty\libsrc directory as fm3ini.XXX. EG: fm3ini.fre = French.

    By default the INI file must be located in the same directory as the EXE. You can however, set the path and name for your translation file using the ds_SetFM2INIFileName() function.

    Note: We rely on users to supply us with these files, so please feel free to send us translations of the file in your language.

    You'll probably want to add locale for different sorting of your data. The best place is to put it in the DataDLL (If your application is a Multi-DLL application) in the 'FM: Start of Initialisation Section'.

    To Do List

    Disclaimer: This list comprises of features and functionality we would like to add to FM3 in the future. There is absolutely no time-frame, or order of priority, for any of the items listed. Not necessarily all features will be added. This list may also be incomplete.

    License, Copyright, & Disclaimer

    Copyright

    This product, and all the files contained therein, are Copyrighted © 2013 by CapeSoft Software.

    License

    Disclaimer

    CapeSoft Software , employees of CapeSoft Software, and Dealers of CapeSoft Software products, explicitly accept no liability for any loss or damages which occur from using this package.

    This product is used entirely at your own risk.

    Use of this package constitutes agreement with the above license.

    Version History

    If you're getting compile errors after upgrading, then check the Compile Errors section of the FAQ.

    Download latest version here  

    Version 5.56 GOLD (20 July 2021)

    Fix: In a multi-tenant situation, where prop:name is being used to set the file location, the upgrade could fail.

    Version 5.55 GOLD (13 July 2021)


    In RuntimeFileManager, ExportXML and ImportXML have now set xml.MaxPrefixLengthInXML = 99

    Version 5.54 GOLD (6 July 2021)


    Delayed startup code for MsSql changed priority to be before MemTable delayed start priority.

    Version 5.53 GOLD (3 May 2021)

    Clarion 11.1 build
    RuntimeFileManager - you now have the option to show which owner variable is used for each table (if multiple dbs are used.
    Add field - use the SQL function to determine the name of the field to add (supports reserved words using double quotes for the field name).
    MSSQL - create linked server - clarified the error message (if unable to create a linked server).


    Version 5.52 GOLD(13 October 2020)

    Fix for PostgreSQL deprecation of the field pg_attrdef.adsrc. Now uses pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid) to retrieve if an integer has a nextval serial trigger.

    Version 5.51 GOLD (3 September 2020)

    Change: Cosmetics of "upgrading" window - changed font, background and border.

    Version 5.50 GOLD (17 August 2020)

    Fix to allocate ForceSQLDataTypes that include '-' and '+' as calculated fields in SQL

    Version 5.49 GOLD (13 August 2020)

    Fix to allow calculated fields in SQL (does not attempt to alter a calculated field after it has been added).
    Work-around for Clarion 11 release 13505 that inits runs the data DLL init section too early. You need to check the "Init FM3 in the 'Initializing other ABC Clarion DLL' embed (recommended for Clarion 13505 an up)" setting in the FM3 global template.
    If FM3 is removed from the application, then remove the VLDS code templates as well.
    For MSSQL 2008, fix to set the default schema name and ODBC client.

    Version 5.48 GOLD (20 April 2020)

    BTrieve fix for versions after Clarion 10.12463 (was not auto-assigning the dat extension to filenames without an extension).
    Fix regression in 5.44 for PostgreSQL users (query required even for versions after 8.1.3).
    Fix regression in 5.43 for PostgreSQL users (force to lower case fieldnames).

    Version 5.47
    GOLD (21 February 2020)

    IgnoreDuplicates is now supported for PostgreSQL database conversions from TPS.

    Version 5.46 GOLD (23 January 2020)

    Implemented translation support for the 'ERROR: FM3 detects that this application possibly contains older file structures' message.

    Version 5.45 GOLD (13 January 2020)

    Fix for Firebird (regression in 5.43) - was not consistently detecting if a key was descending/ascending on the backend.

    Version 5.44
    GOLD (20 December 2019)

    Fix to allow 2 connect windows in the same application.
    If a file is suppressed from managing in the global extension, then don't generate the ds_UsingFile (and other FM3 setup functions) for that file.
    Increase the length of oldname fieldnames and tablenames (was limited to 40 characters).
    Fixes for firebird (set fields to upper case).
    Check for reserved names User, Type and Index and enquote (for adding/changing the field).
    PostgreSQL fix - remove query required for version 8.1.3 (and earlier) which is no longer required.

    Version 5.43 GOLD (18 April 2019)


    Increase file label and field label size of runtime variables.
    New embed point in the FM3 code in the connect window (to set code before auto logon).

    Version 5.42 GOLD (13 September 2018)


    New: Clarion 11 build

    Version 5.41 GOLD (3 September 2018)

    New: 'Create All fields Not Null' option in the FM3 global template (SQL General tab) - creates all new fields as Not Null

    Version 5.40 GOLD (13 August 2018)

    Fix: Regression in 5.39 to not manage TPS files.

    Version 5.39 GOLD (6 August 2018)

    Template: Force reset of the debugging flag when connecting to the SQL backend (was not entering debugging mode from the check boxes in the sql connect window always)
    Fix: MSSQL was trying to duplicate a field in a key (in some rare situations)
    Fix: Managing MSSQL database via an ODBC connection
    Only manage the files that are set to be managed (using the ds_UsingFileEx). All other files are just opened in the normal manner.

    Version 5.38 GOLD (11 May 2018)

    Template: Option to force the GUIDs to be case insensitive (if they were erroneously created as case sensitive).
    Connection to Oracle via ODBC support implemented.
    Collation (in MSSQL) is now included in the goindeep check for fields' mismatch.

    Version 5.37 GOLD (4 May 2018)

    Template: Default GUIDs are Case Insensitive to true.
    Support for forcing case insensitivity in MSSQL (use CaseSensitive=0 field user option for this).
    When collation is changed for a field and the field is part of key, drop the key (and re-create).

    Version 5.36 GOLD (25 April 2018)

    Putini was internally being called with a missing value parameter. Possible cause for creating a corrupt fm3.ini file.

    Version 5.35 GOLD (9 April 2018)

    Only create Stored Procedures on start up.

    Version 5.34 GOLD (28 March 2018)

    CreateConstraints dictionary user option added to force unique keys to be added as constraints (rather than indexes).

    Version 5.33 GOLD (5 March 2018)

    Fix: When opening a SQL table, if the table was already open, then Error 52 was not set (errorcode was set to 0).

    Version 5.32 GOLD (20 November 2017)


    Fix for GPF for some rare cases of a file format being > than the upg record size.
    Allow for variety of the MySQL driver.
    Fix for hang in MSSQL multi-DLL applications (work around for a bug in Clarion 10 MSSQl driver).
    Fix for Firebird (where SQLname contains spaces and other names requiring "quotes").

    Version 5.31 GOLD (22 May 2017)

    Fix compile assert if Multi-Proj is used and compile variable not set.
    Progress window "CurrentAction" string lengthened (to display enough info in progress).
    SaveCurrentFieldToXML embed point allows fields to be changed/set when exporting to XML.
    Firebird fix when comparing (and building) Primary Keys.
    FIx for adding 'Default' parameter. Check ForceSQLDataType parameter and only add default if not in ForceSQLDataType.

    Version 5.30 GOLD (30 March 2016)

    Fix for GPF when checking a filename < 4 chars long.

    Version 5.29 GOLD (15 December 2015)

    Fix for long error message (not showing all detail sometimes).
    Work around for Clarion 10 returning errorcode 90 instead of errorcode 2 if file does not exist using MSSQL driver.

    Version 5.27 GOLD (12 November 2015)

    Fix Embed point IDs in connect window routines (some overlap).
    Fix for connect window servername variable saving (if changed).
    Fix for MultiProj
    Allow External Files to be included in the RuntimeFileManager window.
    Workaround for testing prop driver directly not working (forcing conversion upgrade when a simple upgrade was necessary)
    Allow case in-sensitive collation to be forced on for Firebird.
    Rename internal local variables (was overlapping in Clarion 9.1)
    Cater for missing owner variable. Use the FM3 connected file's owner variable.
    Cater for Firebird case insensitive - does not allow default value simultaneously (up to Firebird current - i.e. 2.52)
    Internally centralize some options checking (DCTMasterKeys, DCTMasterFields, InitialiseGlobalVariables and PrimeConnectandOwner) to ensure consistent code.

    Version 5.26 GOLD (17 June 2015)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for GPF where key components > 20
    • Fix for XML import (ABC) - use ABC insert for imports.
    Version 5.25 GOLD (25 February 2015)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Updated use of %cwversion to support Clarion 10
    Version 5.24 GOLD (24 February 2015)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Clarion 10 support
    • Fix - for converting from TPS to SQL - if the upg.tps file contains an SQL version, go back to the previous TPS version in the upg.tps file.
      Template fix - for adding external attribute if the app file changes from an EXE to a DLL.
      Connect window tweak - end embed point to end
    Version 5.23 GOLD (16 January 2015)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Firebird tweaks - If AutoLogin is on, on the SQL Connect window, and the connection fails with a "Database not found" error, then autoLogin is set off and Connect window is displayed.
    Version 5.22 GOLD (3 December 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Firebird tweaks - support for descending keys. Warning generated for multi-component keys with mixed descending and ascending components (not supported in Firebird).
    Version 5.21 GOLD (29 September 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • GUID generation uses upper chars and numeric chars only.
    • Change BLOB assignment (when converting to SQL and BLOB is being converted from a non-BLOB var type).
    • OldName (for field) does not require prefix.
    Version 5.20 GOLD (23 July 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Improved support for Multi-Proj in Clarion 9 (don't set compile switches for driver each time)
    • DCT/File user option - AddDateTimeChangedTriggers - will add a trigger to each table so that when a change occurs, the gMSSQLFile (field5) is stamped with the datetime stamp of the change. DCT user option can be overridden at the file user level.
    • Embed points added to the connect window template code.
    • Improved BLOB support - TPS -> SQL conversion blob support and string to blob support in TPS (and other flat files).
    • Fix for TPS ->SQL conversion for binary data (was adding 2 chars in the front of the binary data).
    Version 5.18 GOLD (28 March 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Support for PostgreSQL Enterprise edition ODBC driver (this is standard for version 9.2 and up). You must select the PostgreSQL Enterprise driver from the dropdown list in the Connect window
    • Added an extra embed in the EnableDisableButtons routine in the RuntimeFileManager window.
    • New feature - Adding the command line /BuildKeys when running your application will build each key individually when clicking the build button on the RuntimeFileManager (flatfiles only).
    • Runtime Warning if IgnoreDuplicates user option is set, but the external name is not set for the key.
    Version 5.17 GOLD (23 January 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for 5.16 regression - duplicate template symbol %FD
    • Added embed point at the top of the EnableDisableButtons routine in the FileManager control template.
    Version 5.16 GOLD (15 January 2014)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • By default clarion 7 and up (?) needs a closed file before building. Using /FM3CloseAfterBuilding command line parameter allows the user to build the keys prior to closing the file.
    • Added embed points to the connect window and the runtimefilemanager window control templates.

    Version 5.15 GOLD (21 October 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • MySQL fix - don't add quotes to field names when creating a key.
    • Fix - Adding a second field to an SQL file (where the original file only contains a single field) - was making the second field not null
    Version 5.14 GOLD (9 October 2013)

    Note: If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for GPF in BTrieve (where owner is set on the file).
    Version 5.13 GOLD (7 October 2013)

    Note: If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Template tweak - allow support for MultiProj driver substitution to call SQL_Connect window.
    • Template change - allow support for FM3 to create the file name, but for you to manually set the filename (check the I will set my filename variables checkbox).
    • Template change - moved AutoFix, AutoNet, Options, Translation to a sheet on the Options tab.
    • Template change - new Files tab. Allows files to be manually suppressed from being managed.
    • Template change - ds_FMKill set to be called at priority 4566 (rather than 5000).
    • MultiProj support - add the filedriver support for topspeed (upg.tps file) and DOS to the created cwproj files.
    • Template change - new embed points around the call to the SQL_Connect window (which allows MultiProj to inject code around the call).
    • Template change - only call the ds_SetOption('KEY:IgnoreDuplicates',address(%Key)) when the key is unique.
    Version 5.12 GOLD (3 September 2013)

    Note: If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Added code for Import and Export buttons on Runtime File Manager.


    Version 5.11 GOLD (27 August 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Global Template options re-arranged a bit so the screen isn't as tall.
    • Added Buttons to the Global Extension to Import the runtime File Manager and the Connect Windows (removed the template utility).
    • Updated cosmetics for controls on Runtime File Manager Control template.
    • Added Import and Export buttons to Runtime File Manager TXA (requires xFiles to activate them [WIP - not functional yet]).
    • Added template switch to disable duplicate file warnings.
    • Template change - if NoAutoNameCheck exists in the file user options, don't do the file auto name check (no longer requires the option to be set to 1).
    • Fix for Clarion 9 - when adding an identity, the C9 mssql driver requires both identity parameters (i.e. identity(1,1) ). Fm3 now makes provision for the missing second parameter.
    Version 5.10 GOLD (Released 5 July 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix collation error (experienced in upgrading a GUID field set to binary and some postgreSQL upgrades).
    • Template feature - 'Don't copy the FM3 DLL to the App dir', for those not wanting to use the Clarion 7 feature to copy dlls into the app directory.
    Version 5.09 GOLD (Released 26 May 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix regression in 5.06 - was adding an additional "double quotes" for field names in postgreSQL created keys.
    • Project include and MultiProj support improvement - use clafm3l and clafm3 for lib includes (rather than c%V%fm3) in Clarion 7.3 and up.
    Version 5.08 GOLD (Released 26 April 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Clarion 9 build
    Version 5.07 GOLD (Released 17 April 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • DLL Tweak - when creating a primary key with a descending component, don't add the DESC type - this is not supported by most dbs and is superfluous.
    • DLL Tweak - change trigger name for Firebird autonumber trigger to GN_<fileprefix>_<ColumnName> as there is a 31 char limit on the generator name.
    • Template tweak - add copy FM3 dll to C8 MultiProj projects.
    • Template tweak - oldname file and field user option continues checking if a number is missed (in sequence).
    Version 5.06 GOLD (Released 8 January 2013)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • DLL Tweak - ds_UsingFileEx has the ability to force an old version of a data file into the upg.tps file (by calling ds_UsingFileEx a second time with the old version number and old structure).
    • Template tweak - support for multi-dll apps in Clarion 8 - copies that fm3 dll to the app dir after compile.

    Version 5.05 GOLD (Released 23 October 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for SQL 2012 Server support sp_indexes no longer supported in SQL2012.
    Version 5.04 GOLD (Released 26 September 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix regression in 5.03 for identity fields - was generating identity (1,1,1) in some circumstances.
    • When altering a primary key field, applies the not null attribute (allowing the primary key to be re-created).
    Version 5.03 GOLD (Released 14 September 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Template tweak - Set default fm3.ini filename to use quotes (otherwise error for brand new apps).
    • Template tweak - allowed override in the template for gMSSQLFile (when specifying the schema).
    • DLL change - callback sends a group containing from and to prefix and version numbers of a file (to label used). Use FM3:UFDGroupType in your callback window to receive the correct info. See FAQ34 for details.
    • DLL change - callback sends EndUpgradeFile when a file is finished upgrading.
    • DLL change - fix for SQL 2012 - identity field wants both pars explicitly set when creating.
    Version 5.02 GOLD (Released 13 June 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Template tweak - removed 16 bit conditional compiled code from the TPL (about time) .
    • Fix for ODBC in MSSQL 2008.
    • Fix for GPF (in some circumstances an array GPF occurred in SQL).
    • Fix for if MSSQL datatype does not have brackets (for a size indicator) in datatype check.
    • Fix for MySQL - table type now uses ENGINE rather than TYPE. TYPE is deprecated from MySQL 5.5 and up (ENGINE is supported from 4.1).
    • Template tweak - support for MultiProj in Clarion 8.
    • Template tweak - fix default ini file name (quotes).
    • Template tweak - add FilePrefix local variable to RuntimeFileManager window (set when a file is selected).
    Version 5.01 GOLD (Released 6 March 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Template tweak - regression in 5.00 for running fmcwrt (adding path to call) for C55 users (no %cwroot symbol).
    • DLL tweak - regression in 5.00 for 7.3 users (made build of Clafm3.dll using C8 and croaked in C7.3). Build system now builds C7.3 dlls for C7.3 and C80 dlls for C8.
    Version 4.99 GOLD (Released 10 February 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • If GUIDs have ForceSQLDataType applied, then don't make then override the GUID case-sensitivity key in SQL.
    Version 4.99 GOLD (Released 10 February 2012)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for GPF in Array Index for Clarion 8
    • Override for GUID case-sensitive collation (a template setting).
    • SupportABC template utility primes the root folder with %cwroot (if exists)
    Version 4.98 GOLD (Released 8 November, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fix for longnamed files (was clipping the filename at 100 chars).
    Version 4.97 GOLD (Released 24 October, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • C7/8 linking support tweak (for those with a file with IDQ prefix).
    • MultiProj support for Clarion 8 users.
    Version 4.96 GOLD (Released 26 August, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • DLL change - regression in 4.89 fixed - was not creating descending keys in SQL correctly.
    • DLL fix - collation in 4.93 was not doing not null as well on a field requiring collation.
    Version 4.95 GOLD (Released 24 August, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • DLL change - error in ds_AlternateFileNameAndOwner if no new filename is specified (prevents a gpf).
    • TPL change - support for Firebird Embedded (see FAQs)
    • For DCTMasterFields - drop the index/constraint that contains a field that must be dropped in order for DCTMasterOfFields to operate correctly.
    • DLL change - fix for regression in 4.92 (thread lock moved). Thread lock is now around upgradefile only, allowing tables on other threads to open, but not upgrade. 4.92 allowed multiple files to upgrade on different threads, and some global vars got switched during upgrade between threads.
    Version 4.94 GOLD (Released 18 July, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fixed regression in 4.92 - was not counting BLOB fields in the file declaration.
    Version 4.93 GOLD (Released 15 July, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Fixed regression in 4.92 (Unknown collation: 'SQL_Latin1_general_CP1_CS_AS' when using a non MSSQL backend).
    Version 4.92 GOLD (Released 13 July, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes. For Replicate users: This release requires Replicate 2.53 or above.
    • Internal vars all moved to threaded. ThreadSafe critical section in ds_FileOpen moved to not include the upgrade file (now handled on a thread level).
    • IgnoreDuplicatesQ (ds_SetOption: key:ignoreduplicates, value is the keyname).
    • Fix - group,over string does not attempt to create the fields in the group on the backend.
    • Fix for MSSQL - drop both constraint and index for unique keys (not always a constraint, even if the Server returns IsConstraint in SQL2008).
    • Fix for SQL - don't drop key twice (if a key needs to be altered for 2 reasons).
    • Various additional embed points in the SQL_Connect window extension template.
    Version 4.91 GOLD (Released 28 June, 2011)

    Note:
    If you're upgrading from v4.87 checkout the 4.88 release notes.
    • MSSQL only: Force case sensitive collation on a specific field (using the CaseSensitive field useroption). Also the default case-sensitive collation (SQL_Latin1_General_CP1_CS_AS) can be overriden using the ds_SetOption('casesensitivecollation',MyCaseSensitiveCollation) function. Also manually forcing a column to case-sensitive collation using ds_SetOption('CaseSensitiveField',FieldName)
    • MSSQL only: GUID fields are forced to case-sensitive collation.
    Version 4.90 GOLD (Released 22 June, 2011)

    Note:
    FIf you're upgrading from v4.87 checkout the 4.88 release notes.
    • TPL regression fix for Clarion 7/8 introduced into 4.89
    Version 4.89 GOLD (Released 22 June, 2011)

    Note:
    FIf you're upgrading from v4.87 checkout the 4.88 release notes.
    • TPL change - fix for height of connect window (includes expand to allow servername prompt space).
    • Internal - (some old peek code exchanged for properties: prop:keys. prop:memos, file{prop:fields}, Clarion 6 (and up): all key props,
    Version 4.88 GOLD (Released 15 June, 2011)

    Note:
    FOR MSSQL users: It is recommended that you re-import the Connect window for Win7 64 bit support. See the FAQ section for more details.
    • fmcwrt.exe change (for C8 support for builtins.clw modification)
    • Set Identity insert off during FM3 conversion.
    • Internal: Removed the use of records() on the gSQLFile (after a query) and searching for a linked server. Caused continual upgrading in some cases.
    • GetLinkedServer - LinkedServer needs the server name (not the IP Address) to be ligit.
    Version 4.87 GOLD (Released 27 May, 2011)
    • Fix GPF in PostgreSQL and MySQL (for pdecimal datatypes with xx,0 types).
    • Clarion 8 fix - LenOwner (in the file header) uses a long, not a ulong (as in c7.3 and below).
    Version 4.86 GOLD (Released 3 May, 2011)
    • Template fix (regression in 4.82). SupportABC was not modifying the builtins.clw file.
    Version 4.85 GOLD (Released 19 April, 2011)
    • DLL fix - for oldname (where the old file was not the most recent version of the old file) - was not trying older versions of the old file.
    Version 4.84 GOLD (Released 7 April, 2011)
    • TPL Regression (4.82) fix %TMPRecordsRead Unknown. Prevents clearing the builtins.clw file when applying the mod.
    Version 4.83 GOLD (Released 31 March, 2011)
    • DLL fix - GPF when ForceSQLDataType < 6 chars long (with MSSQL driver).
    Version 4.82 GOLD (Released 15 March, 2011)
    • Function Callback - allows trapping of FileUpgrades, and during a file upgrade, fields can be altered on the fly (see FAQ34 for details)
    • Internal DLL fix - tracks the open status of the wait window.
    • C7 rename - backup->FM3backup. DropQ->FM3_DropQ, AddQ->FM3_AddQ, SqlQ->FM3_SQLQ
    • Fix for PostGreSQL - Blank strings, was not inserting correctly (the ''). Regression introduced in 4.80
    Version 4.81 GOLD (Released 26 January, 2011)
    • Fixed duplicate dstQueue declaration (internal lib name clash in C7.3).
    Version 4.80 GOLD (Released 12 January, 2011)
    • Fixed regression in C7 for PostgreSQL dbs. Was GPFing on a index out of range.
    Version 4.79 GOLD (Released 11 January, 2011)
    • Template Tweak for C7.3 - correct file name in the ship file and projected.
    Version 4.78 GOLD (Released 30 November, 2010)
    • Fix for BLOBs - when upgrading a TPS file, was not upgrading all the BLOBs (when MEMOs also exist in a file).
    Version 4.77 GOLD (Released 10 November, 2010)
    • Fix regression in IPDriver (registering an FM3 enabled IP application was failing because of use of ASCII driver in 4.72 - switched to using the DOS driver for the logging file)
    • IPDriver fix for "Memory block freed twice" error. Was not able to use prop:driver in IPServer DLL.
    Version 4.76 GOLD (Released 9 November, 2010)
    • Replace ':' in the filename with '_' for SQL tablenames.
    Version 4.75 GOLD (Released 14 October, 2010)
    • Support for Multi-Proj to add a second oldname attribute (for SQL conversions where a file already has the oldname file user option).
    Version 4.74 GOLD (Released 11 October, 2010)
    • Allows a callback to be called when newer files are located on the SQL backend. See FAQ33 for details on implementing this. includes a template utility to import the correct prototyped callback procedure into your application for this purpose.
    • Fix for when a prefix changes and the driver changes as well (was not looking at the correct file for upgrading).
    • Fix GPF when ds_AlternateFileNameandOwner is called with an omitted FILE parameter.
    Version 4.72 GOLD (Released 26 August, 2010)
    • DebugLogFile created for upgraded results. Each duplicate key error (during upgrade) is added to the logfile. A tally of records in the source file and records added is added to the DebugLogfile. In order to use the DebugLogfile - you need to enter a name for the file in the SQL 2 tab of the FM3 global extension template ('Log Errors To').
    • Clarion 7 - does not require SupportABC template utility to be manually run.
    • ds_SetOption function - can be used to set inisection, inifilename, fm3trnfilename, silentupgrading, thisisipserver, fm3upgradeerrorfilename.
    • SQL - search in the FM3SQLfile broadened to include a search for the prefix and the filelabel (for aliased files). In some cases was "always upgrading" because the matched entry was not inserted correctly in the db (duplicate entry on the prefix) - so search by prefix was needed. Internally, file label is added to the version queue (for tracking purposes.).
    • SQL - on altering null column status, dependencies (indices, constraints, etc.) must be handled.
    • C70FM3L.lib - removed driver libs from the lib file. They are projected into the app's project now.
    • Internal DLL - peek for record handle moved to procedure.
    Version 4.71 GOLD (Released 15 July, 2010)
    • Work around for Clarion 7 txa import problem (when creating the SQL_Connect window, the import did not like the field assigned to the drop combo).
    • DLL Fix (regression in 4.57) - occasional GPF when overshooting looking for an alternate prefix.
    • DLL Fix - occasional GPF when a blank UPG path was checked.
    Version 4.70 GOLD (Released June 23, 2010)
    • Fix hang on startup problem (very unusual circumstances).
    • Fix GPF when using a blank filename in ds_AlternateFileName.
    Version 4.69 GOLD (Released June 4, 2010)
    • Show unique External Name Warnings (asserts) - includes key names now as well.
    • Clarion 7.2 compatible release.
    Version 4.68 GOLD (Released March 29, 2010)
    • ds_FMCstringToStringOmitNullChar allows you to overwrite FM3 addition of the null char when converting a Cstring to a String (regression in 4.65). (There's a checkbox on the Options tab of the template to turn this on)
    Version 4.67 GOLD (Released March 17, 2010)
    • internal Variable name change (to avoid clashing in Clarion 7.1)
    Version 4.66 GOLD (Released March 15, 2010)
    • Template change - allows compile switches to be independent of MultiProj (if necessary). This is a setting on the Global Extension template (SQL 2 tab).
    • Template change - allow varchars > 256 to be created as text type.
    • Template fix - regression in 4.65 for IPServer apps. Was not opening the files correctly.
    • Template fix - FM2: Start of Initialization embed point added when using VLDS apps.
    • DLL fix - if changing from Cstring type to String type, don't add the null char in.
    Version 4.65 GOLD (Released January 28, 2010)
    • Clarion 5-6 build was not including general bin files.
    • Fix for IPDriver. Only open the files that must be managed by FM3.
    Version 4.64 GOLD (Released January 13, 2010)
    • Clarion 7.1 fix - renamed internal Infile to FM3InFile.
    • Template fix - support for windows authentication in SQL2008, connecting via ODBC.
    Version 4.63 GOLD (Released January 11, 2010)
    • Template fix - regression in 4.57 for VLDS support. Was duplicating init code.
    • Template fix (VLDS) - was not generating calls for all the tables in the VLDS procedures.
    Version 4.62 GOLD (Released January 6, 2010)
    • Clarion 7.1 support.
    Version 4.61 GOLD (Released December 23, 2009)
    • No Changes. Mis-release
    Version 4.60 GOLD (Released December 8, 2009)
    • AutoNet EXE recompiled with Vista Manifest file. (see AutoNet and Vista for details)
    • DLL change - don't try to connect to remote linked server if remote name is blank.
    Version 4.59 Beta (Released December 8, 2009)
    • Template fix - VLDS template was not including and end in some situations.
    • Template tweak - include the Glo:gODBCFile_Name with the file declaration.
    • MaxKeys upped to 180 (per table)
    • DLL tweak - SQL error message was not displaying Yes No button text.
    • Dll Tweak (for postgres) - Non UTF8 encoding was removed (put in a command case statement.
    Version 4.58 Beta (Released November 9, 2009)
    • DLL Change - In come cases was not dropping an index (when a dependent field was requiring alteration).
    Version 4.57 Beta (Released October 26, 2009)
    • DLL Change - ds_AlternatePrefix adds the passed info to the internal queue (for searching later - which now does the search).
    • Added additional clarifying debug info when file fails to upgrade.
    • FM3Error - you can copy the error info from the message box to the clipboard.
    • gSQLFile{prop:DBMSver} was causing a GPF in SQL 2008 applications (commented out that as it was not used).
    • PostgreSQL - handle escaped chars in binary strings.
    • MultiProj applications - uses the compile switch set in Multi-Proj (rather than requiring the driver switch in both places). Affects the way code is generated in the connect window, etc. No longer wraps code in compile/omit sections (except in MultiProj apps).
    • Template change - you can override a common dct datatype with a prefered SQL datatype (rather than then default). This is useful in the case of Dates (in particular).
    • AutoNet support included in VLDS apps.
    • C7 template workaround - if some vars already exist, don't re-declare on the fly.
    • RealField and UnRealField check were in the incorrect place in the template (required identity as well??).
    • Connect window - add support for SQL Server 2008.
    • ShortenDiskName - Called correctly after the file is opened.
    • Diskname - increased from 144 to 255
    Version 4.56 Beta (Released June 17, 2009)
    • DLL Change - if a SQL blob was null, then was causing a GPF when assigning to the new file.
    • Template Fixes (for C7 support) - BLOB support activated, TPSFIX call, Project define is added to the project, ds_FMKill is called.
    Version 4.55 Beta (Released June 9, 2009)
    • Template workaround for regression in Clarion 7 - 5675. Uses %cwversion instead of %cwtemplateversion when determining which lib to project.
    • DLL change - MySQL, when requiring tables to be created as InnoDB tables, the FM3 table is also created as an InnoDB table.
    Version 4.54 Beta (Released May 5, 2009)
    • Increase Max Keys to 120 (was 74) per table.
    • Fix for multiple element keys (in SQL). Was trying to add a already existing field (in some cases).
    Version 4.53 Beta (Released April 20, 2009)
    • C7 workaround. Build requires the files to be closed - so flat file's keys were not being built after upgrading - because in older version s of Clarion, the build could be applied when a file is opened in exclusive access mode.
    Version 4.52 Beta (Released April 20, 2009)
    • Incorrect DLLs shipped in main install (in 4.51)
    Version 4.51 Beta (Released April 16, 2009)
    • Template change - Warn if 2 drivers selected on the Connect window (for non-MProj applications).
    • Template change - Can run full upgrade from data dll init (multi-dll apps).
    • Template change - when projecting the fm3 dll, using %cwtemplateversion rather than %cwversion.
    • Template change - can force create tables on upgrade at startup.
    • DLL fix (for Oracle) - when binary type used, make raw (<2000 chars) or blob.
    • DLL fix (for MySQL) - when binary type used, make binary (with length if specified).
    Version 4.50 Beta (Released March 19, 2009)
    • Template change - 2 embed points allow handcoding for alternative ForceSQLDataTypes for different backends. (See FAQs for details)
    • Template change - connect window can set a global variable for the odbc database selected.
    • DLL fix - MSSQL. Fixed index search (for added indexes related to SetIfNew default addition). When upgrading the next time, FM3 was not detecting the default index created.
    Version 4.49 Beta (Released February 27, 2009)
    • Template and DLL change - support for the MySQLODBC 5.1 driver.
    • Template fix - support for Remote servers fixed (where a non-standard port is used).
    • DLL change - warn if MySQL odbc driver dll cannot be loaded - and avoid using the driver functions (prevents a GPF).
    • DLL fix - if not converting and convert is off, don't create the file on the SQL backend.
    • DLL change - don't select the file by prefix, but rather by table name. This means that both the file and any aliases use the same table entry in the FM3 sql table.
    Version 4.48 Beta (Released February 3, 2009)
    • C7 fix - SupportABC template utility modifies the builtins.clw file correctly (was looking in the incorrect place).
    • template change - Ignore overed groups when checking for unique external labels.
    • C7 work-around - Don't error after build() attempt. Build in C7 always returns an error if the file is open (even in 12h mode).
    Version 4.47 Beta (Released January 21, 2009)
    • mySQL fix - when 'Prime new fields zero / blank' was checked, was using a blank string for a default 0 date field.
    Version 4.46 Beta (Released November 24, 2008)
    • Clarion 7 fix - adds project define (FM2=>1) and the FM3 lib to the project.
    Version 4.45 Beta (Released November 10, 2008)
    • Clarion 7 compatible install.
    Version 4.44 Beta (Released October 17, 2008)
    • DLL fix - doesn't use '\' (the escape key for MySQL strings) in GUID generation.
    • DLL Fix - able to use ForceSQLDataType for BLOBs.
    • DLL fix - able to use oldname (in SQL) to copy data from an oldfield to a new one (was previously only supporting rename - and not copy)
    Version 4.43 Beta (Released September 23, 2008)
    • DLL fix - some fields were not being added (when multiple data/time groups occurred in the dct file).
    Version 4.42 Beta (Released September 18, 2008)
    • DLL fix (regression in 4.40 for MySQL) - was adding a space for other (previously) escaped characters (which were omitted in 4.41).
    Version 4.41 Beta (Released September 11, 2008)
    • DLL fix (regression in 4.40 for MySQL) - escape character not functioning for chars in newer versions of MySQL (just escapes on \ now).
    Version 4.40 Beta (Released September 9, 2008)
    • DLL fix - when increasing the over field dimension - was hanging.
    • DLL fix - provision for escaped characters (without requiring the binary attribute on the converted column).
    • DLL change - improved GUID generation for SQL compliant chars (taken from Replicate guid generator).
    • Template change - Checkbox to Hide the yellow upgrade window.
    • Template change - Fix ignore alias files (where the main file is fm3ignored).
    Version 4.39 Beta (Released August 6, 2008)
    • Template change - Options tab reduced to fit on a 1024x720 screen.
    • Template change - Assert (when duplicate external key names are discovered) indicates how to turn this assert off.
    • DLL (regression fix) - Display message when an illegal dct change is attempted. The SQL error message is included in the displayed message.
    Version 4.38 Beta (Released July 30, 2008)
    • DLL change - New function: ds_FMSetSilentUpgrading.
    • DLL fix - if a field with ForceSQLDataType field user option is the first element of a group, then it was not being created on the backend.
    • Template fix - auto-disable EasyAutoEntry in the SQL Connect window (if EasyAutoEntry has been added to the application).
    • Template fix - caters for spaces in the external field name (was attempting to create a field with blank field name on the backend)
    Version 4.37 Beta (Released June 9, 2008)
    • DLL change - Regression in 4.34. Was not setting the unique index name correctly in some circumstance (when creating an index in SQL). Resulting in a failed attempted index creation.
    Version 4.36 Beta (Released June 4, 2008)
    • DLL change - when upgrading a tps table, does a commit for every 2000 records (rather than a single transaction for the entire file).
    • DLL Change - use @d10- for PostgreSQL date entries
    • DLL Change - if a sql error occurs > 256 chars, then just show the first 256 chars (otherwise the buttons on the message are off the screen for long messages).
    • DLL Change - when doing a field name change in SQL, check if the var type (and other attributes) have changed, so that all changes can be implemented on one pass.
    • Template Change - save the UseWindowsAuthentication checkbox state (in the Connect window).
    Version 4.35 Beta (Released May 14, 2008)
    • Template Change - Remove forced inclusion of the FM3_ODBC.lib into the project.
    • Template Change - AutoFix code was duplicated in the template and the dll. Removed from the template.
    • Template change - use section name to detect whether the RuntimeFileManager must be run or not.
    • Template change - Include a Use Windows Authentication checkbox in the connect window (requires import of the connect window again).
    • DLL Change - If no files are entered into the Upgrade Files queue.
    • DLL Change - localmode also uses the runtime loading of the odbc.lib (a fix for older versions of windows where the ODBC dll is not present - so runtime loading is necessary).
    • DLL Change - fix for PostgreSQL - was not priming a datetime group when upgrading from TPS (now internally stores the datetime as upper as well as the normal field name).
    • Template fix - fix for Alias files - was incorrectly assigning the name of the file (in some circumstances).
    Version 4.34 Beta (Released April 29, 2008)
    • Template fix (regression in 4.34) - Alias name support broke in some circumstances (meaning the alias name was blank). Alias name support is now generic.
    Version 4.33 Beta (Released April 21, 2008)
    • Template change - Allow DriverString entry into the FM3 connect table (enables connectstring switches required at connect time to be set when FM3 connects to the database).
    • Template fix - sets the INI file for settings (that is set in the FM3 global extension template).
    • Template fix - Alias filename was overwriting the normal file name (in the Connect window) - when FM3 was setting filenames.
    • DLL Fix - if schema is used in SQL Server, then append the schema name to the index/constraint (required to maintain schema name uniqueness).
    • DLL Fix - when primary keys are compared, upper the attributes and compare case-insensitive. MSSQL does not always return upper case primary attribute.
    • DLL Fix - when querying SQL Server for the keys list, include the schema (if the default is not used).
    Version 4.32 Beta (Released April 2, 2008)
    • DLL fix - work around for a bug in the IPServer - if a variable name is used, the name returns to the default name temporarily during the open(File) command. New function: ds_FMSetIPServer to inform the FM3 dll that this is an IP server DLL. FM3 was not upgrading IpDriver data files with variable filenames.
    • DLL fix - was not correctly assigning NULLs characters to a CString when converting from String to CString. This meant files after conversion were bloated
    • DLL Fix - if path stipulated for the translation file, don't re-assign the path to the filename.
    • DLL Fix - don't use quotes when creating Unique Indexes in PostgreSQL.
    • DLL Fix - when adding a owner to a tps table, the table was not upgraded correctly.
    • DLL Fix - remove the trailing ';' in the index query for PostgreSQL. Workaround for a bug in the PostgreSQL 8.3.1 Server.
    • Template change - Allow the Connect window to set the filenames for FM3Ignore file (option in the SQL_Connect window template).
    Version 4.31 Beta (Released March 4, 2008)
    • DLL change - Support for schemas in SQL Server.
    • DLL change - Tweak to support PostgreSQL 8.3.
    • Template change - Allow the Connect window to set the filenames for FM3Ignore file (option in the SQL_Connect window template).
    Version 4.30 Beta (Released February 25, 2008)
    • DLL change - new function: ds_CreateSchema (for MSSQL driver maintained applications). Creates a non-default schema.
    • DLL change - TPS old file fix. If create file fails (not open) - then replace the old file.
    • Template change - default SQL_Connect procedure prompt in FM3 template to SQL_Connect
    • Template change - don't hide the Schema name for MSSQL driver applications.
    • Template change - new prompt: 'Don't show current file-check window during full upgrade'. If checked, will not sure any yellow windows during application startup if there are no files to upgrade.
    Version 4.29 Beta (Released February 13, 2008)
    • DLL fix - caters for WATCH and CHECKFORNULL field switches.
    • DLL fix - PostgreSQL - does not add default '' to the date.
    Version 4.28 Beta (Released February 2, 2008)
    • DLL fix - caters for NOWHERE and ZERONOTNULL field switches.
    • Template fix - regression in 4.27 - was not calling the VLDS procedures.
    Version 4.27 Beta (Released January 22, 2008)
    • Template Change Template does not generate code into the FileManager code sections for FM3Ignore files.
    • DLL Change - ds_SetFMTrnName replaces ds_SetFM2IniName function.
    • DLL Change - new function ds_SetFMIniName - sets the ini file name (and section) for FM INI settings (set in the global extension template).
    • Template Change - VLDS support increased to infinite number of VLDS procedures (was previously limited to 3).
    • Template Change - Connect Template checkbox: Only save if connect succeeds - allows saving of Connect properties, only if the Connect window connected successfully.
    • Template Change - don't setcommand() if respective commands are not added to the command lines.
    • Template change - Mapped functions in fm3map.clw instead of directly in the template.
    • Template change - In template trigger section - only check the FM_Upgrading flag if there is a trigger written.
    Version 4.26 Beta (Released December 7, 2007)
    • Dll Change - BLOBs supported in TPS files (from C55 and up)
    • Template Change - Ignore Multi_proj. Normally Multi-Proj will assign the filenames, but this enables FM3 to be king (over filenames).
    • Template Change - warn if OldName used in conjunction with a BLOB (not allowed).
    • Template Change - don't hide the Port if ODBC is not selected (in the Connect window).
    • DLL Fix (SQL) - if a Primary Key contains a decrementing element, then mark the Component for decrementing.
    Version 4.25 Beta (Released November 22, 2007)
    • DLL change - enhance linked server query (change in SQL Server Express).
    • DLL Change - allows force add of linked server, if querying the linked server fails.
    • DLL fix - if key not found in reference queue, key being queried was switched to the last key found.
    • Template change - merged fmcommon.tpw into the fm3 template.
    • Template change - Oracle support: if no server is specified and a db is, then include the db in the connection string.
    Version 4.24 Beta (Released October 22, 2007)
    • Template Change - fix clip in template screen view for RuntimeFileManager control template.
    • DLL Change - remove set and clear of the FileUpgrading flag in the FileOpen. This flag should only be used (set and cleared) in the UpgradeFile procedure.
    Version 4.23 Beta (Released October 15, 2007)
    • DLL Change - Increased ForceDataType length to 252 (was string50 - which did not allow enough space for default and not null attributes).
    • DLL Change - matches uniqueidentifier (in ForceSQLDataType) - with returned uniqueidentifier from the backend.
    • Template Change - If FM3Ignore is set, then don't add the file to the BuildListQueue in the runtime file manager window.
    Version 4.22 Beta (Released October 4, 2007)
    • Template Change - Moved array warning checkbox from advanced tab to AutoUp tab (with the other warning switches).
    • Template Change - warn if a dimensioned group is found in a file managed by FM3. Dimensioned groups are not supported by FM3.
    • Template Fix - if FM3 is disabled, don't add project defines (for various supported SQL drivers).
    • Template Fix - if a file is FM3Ignored, then don't attempt to set the filenames
    • New DLL function: ds_SetDebugging, allows debug to be set at compile time.
    • DLL - Progress bar expanded to fit the whole window in the upgrade window.
    • DLL fix - If AutoNumber FieldUserOption is not complete (i.e. contains only 1) - then supplement the missing ,1 (for MSSQL).
    • DLL fix - remove exposed owner variables in the debug output.
    Version 4.21 Beta (Released September 19, 2007)
    • Template Fix - ConnectWindow (if not ODBC - clear UseODBC and hide the checkbox)
    • Upgrade Window - fix justification of the wait message, increase the window size to display enough text to show the path of the file being upgraded.
    • MSSQL - Don't set a default when creating an identity field in MSSQL.
    • C7 build - was not exporting the ds_DoFullUpgrade function causing compile errors.
    • Template fix - don't declare file variables for ignored files (or try to export them).
    Version 4.20 Beta (Released August 13, 2007)
    • Fix - if user cannot obtain exclusive access (to the file requiring upgrading), then don't allow upgrade to continue. Retry cycles for the exclusive open, and Abort halts immediately.
    • Optimize TPS to TPS conversion (omit string building step required in TPS to SQL conversion).
    Version 4.19 Beta (Released August 6, 2007)
    • Connection Timeout adjustment allowed - which prevents an infinite connection if the details are incorrect. This can be set on the Connect Window control template.
    • Provision for connection checking if connection to the MSSQL backend hangs
    • Fix - Global variable set to prevent Connection window run again.
    • Internal - FMCommon template made specific for FM3.
    • Enlarged the string containing the name of the file upgrading (was chopping down to 55 chars).
    • Fix - if exclusive access cannot be obtained when upgrading, warn before continuing to upgrade.
    Version 4.18 Beta (Released July 13, 2007)
    • Fix - only remove file first (before creating new one) if definitely superfile - (workaround for regression fix in 4.04 introduced a regressino in non-superfiles). Otherwise if create fails, the data file will be left in tact.
    • Feature - no driver test (disable File Driver test for old file drivers no longer supported). This is a checkbox in the FM3 global extension template.
    • Fix (MySQL) - was reading a separate key for each field in the key - was deleting keys (with multiple fields in the key) after upgrading.
    • Feature - override for template asserts in the global template (I know BLOBs aren't supported - but I just want to get my app to compile without those asserts popping up every time).
    Version 4.17 Beta (Released June 28, 2007)
    • Fix - Was not checking DCTMasterKeys correctly for individual tables.
    • Fix - if using a constant name in the filename, don't set the name in the Connect Window.
    Version 4.16 Beta (Released June 25, 2007)
    • Fix - regression in 4.13 (only checking for | READONLY - forcing a single space between VBar and option).
    Version 4.15 Beta (Released June 22, 2007)
    • Fix - Template switch for fullupgrade was not being cleared when hidden.
    • Template Change - DoFullUpgrade on startup moved to it's own embed point (allowing a condition around the embed)
    • Change - DLL halt calls prefixed with FM3.
    Version 4.14 Beta (Released June 21, 2007)
    • Fix template regression in 4.13.
    • Feature - ability to set icon for select (in runtime filemanager).
    • Feature - ability to call additional actions in the upgrade on startup feature.
    Version 4.13 Beta (Released June 20, 2007)
    • Fix - remove owner from debug (reveals passwords).
    • Included history for 4.12
    • Fix (regression in 4.12) - If SetIfNew(AutoNumber), then don't force AutoNumber onto backend.
    Version 4.12 Beta (Released June 20, 2007)
    • Fix - was not including the Vertical bar in the search for BINARY in the external name (and readonly and checkfornulls).
    • Fix - Using file was using different code for debug mode and for non-debugmode to fetch the previous version of the file from the UPG file.
    • Feature - ability to turn off storedprocedure creation at runtime (with the /nostoredprocedures command line switch).
    • Feature - allow FM3 to force a call to the RuntimeFileManager window to upgrade all tables on application startup from the template (see the Global Extension Template section for more details).
    • Fix - MultiProj/FM3 relationship where MProj does not create a Filename for Driver substitution (FM3 does not try and use this filename).
    • Fix - FM3 uses the global variable in the dictionary instead of using it's own filename, where a table has it's own predefined global filename.
    • Fix - includes the FM3_ODBC.lib into a local project generated by Multi-Proj automatically.
    • Fix - If AutoNumber is set as a FieldUserOption in the dictionary, then FM3 will create this as an AutoNumber 1,1 in SQL (instead of ignoring it).
    • Fix - don't assign filenames of alias (uses filename) - if FM3Ignore on the real file, it must persist to the alias table.
    Version 4.11 Beta (Released March 21, 2007)
    • Internal Change - from C55 and up no longer uses valueobj function (replaced with the address() function).
    • Please review the support and debug information error changed to reveal the SQL Error that was caused.
    • All dbs - when adding constraints and/or index, encase the name in double quotes (for MSS, Oracle, Firebird and PostgreSQL)
    • MySQL5 - returns tinyint(5) and int(10) for these types instead of tinyint and int. Now caters for this incongruity in unsigned variables.
    • Firebird - NotNull was being incorrectly interpreted in the database return (hence fields not allowing nulls were continually attempted to change the null status on the field).
    Version 4.10 Beta (Released February 27, 2007)
    • Fix - allow 'Not Null' in ForceSQLDataType for a field in a primary key.
    • Fix - if a key is non-unique, then FM3 would try and create on the backend in some circumstances (and not check an existing key there already resulting in a key creation error because of the extant index).
    • PostgreSQL fix - was not comparing a SERIAL field correctly (between dct and database).
    Version 4.09 Beta (Released February 2, 2007)
    • Regression fix (owner not being properly set for SQL files - affects C5 and C55 DSN connections to MySQL databases).
    • In debug - prevented owner form being shown (no more passwords shown in debug).
    • Template fix - on connect window, if only ODBC is used, then force UseODBC to 1.
    Version 4.08 Beta (Released January 31, 2007)
    • Template fix - for legacy Multi-DLL applications, exports the filename variables to the other DLLs (Note: Your other DLLs will get a compile error, check the Compile Errors section of the FAQ.)
    • PostgreSQL fix - creates non-unique indices in lower case.
    • DLL fix - when adding keys to an existing table, add a index (not constraint) - regression in 3.96.
    • Firebird and PostgreSQL fix - Does not allow dates of date type to be primed with blank string data. Omit for blanks.
    Version 4.07 Beta (Released January 26, 2007)
    • Template and DLL change - allow OldOwner (to convert encrypted TPS files to be converted to SQL).
    • Template Change - extra embed points to place code within the upgrade progress window.
    Version 4.06 Beta (Released January 18, 2007)
    • Fix - ds_UsingFileEx - takes a LONG for the version number (instead of a short) - allowing more than 32000 versions.
    • Fix - compare cased name against the case required in the database. If Case-Insensitive then skip this test (for field present in backend).
    • Fix - if create is turned off and doing SQL to TPS conversion, does convert the file and export and import the data into the SQL tables.
    Version 4.05 Beta (Released January 15, 2007)
    • Fix - Check for AutoNumber was returning SetIfNew(AutoNumber).
    • Defined variables in the Connect window (for those using the old connect window)
    • Fix - debugging was showing password in one instance.
    • Checks for valid field names (Firebird is restricted to 32 characters).
    • Force initial fieldname creation (in Firebird) to uppercase (even if lower case exists in the external field name).
    • Alter Fieldnames with lower case to upper case (in Firebird) as lower case is not permitted.
    • Don't include tablespace (or schema) when dropping an index from Firebird.
    Version 4.04 Beta (Released December 20, 2006)
    • Fix - regression in 4.03 where SuperFiles are used. The alternate method for SuperFiles produces an Access Denied when multiple files are accessed within the SuperFile. If conversion fails, then the dstmp file is renamed back to the original file (that was attempted to being converted).
    • Oracle Fix - FM3 was attempting to create constraints with decrementing elements in them. If there is a decrementing element, then FM3 will create a Unique index instead.
    Version 4.03 Beta (Released December 12, 2006)
    • TPS Fix - use temp file to convert data to new file (rather than the actual file). If conversion fails, then the previous data file (with data) is still extant. The file is copied after successful conversion.
    Version 4.02 Beta (Released December 6, 2006)
    • PostGreSQL Fix - was not removing the BINARY suffix (in the external field name) when adding a field to a key.
    • PostGreSQL Fix - lowered key fields (when a field is created with upper case chars manually on the backend) so that Clarion recognizes them correctly.
    • Include checkbox in template to exclude ODBC.LIB file (for conflicting templates like Fomin Report Builder).
    • Template Fix - For ODBC applications, AutoLogon was not correctly obtaining the driver string.
    Version 4.01 Beta (Released November 27, 2006)
    • Superfiles workaround for CREATE() (not removing the deprecated table). This was causing a GPF in the program.
    Version 4.00 Beta (Released November 24, 2006)
    • Fix - Regression in 3.99 for FRB support (causing unresolved externals in all the ODBC functions used in the FM3 lib file).
    Version 3.99 Beta (Released November 23, 2006)
    • Fix - FM3 was creating lower cased BLOBs on the Firebird backend (which were permitted, but illegal and unusable). BLOBs now created in uppercase (like the other fields).
    • Fix - maximum string length in Firebird is 32762, not 32000.
    • Fix - does not error when creating a Firebird generator fails (in case it's there already, don't crash on error).
    • Fix - does not error when dropping a Key or column fails (if the key/column is not there).
    • Fix - Firebird renaming error, when renaming to the same name, Firebird was generating an error - ignore this error.
    • Fix - Firebird - recognise Blob sub_type 1 as a Blob.
    • Fix - for Fomin Report Builder compatibility - was causing duplicate function errors in local mode applications, where FRB and FM3 co-exist and the FRB lib was loaded after the FM3 lib. (This will affect MySQL apps - please test conversions before shipping)
    Version 3.98 Beta (Released November 8, 2006)
    • Don't warn if more than one AutoNumbered field exists on a backend that supports multiple AutoNumbered fields in a single table (like Topspeed).
    • Fix - for more than one BLOB field in a table - was getting confused between the BLOB fields (bug in the Alternate Field Name queue search for BLOBs).
    Version 3.97 Beta (Released November 3, 2006)
    • Check for valid Key names at template level (The list of reserved key names will be appended to from time to time, in the meantime: Key, Index, Constraint, Add, Alter, Update, Table are all reserved MSSQL words that cannot be used for key labelling). Also checks for valid key name at runtime (for ODBC - because different backends have different reserved words).
    • Check for correct length dbOwner variable (must be able to contain the complete connect string).
    • Fix - halt on error level:fatal was immediately exiting the program (without displaying a message).
    • Fix - supports ForceSQLDataType feature in blobs.
    • Optimized matching BLOBs on the backend.
    • Warn if attempted illegal change in a BLOB (one cannot change in IMAGE based datatype to a TEXT typed datatype and visa-versa).
    Version 3.96 Beta (Released October 24, 2006)
    • Feature - supports translation of the FM3 windows text and error messages (ds_FM3TranslateText). See Translating FM3 Error Messages for more details.
    • New function - CheckValidFieldsForUniqueKey - ensures that a unique key created on the backend contains valid fields (for a unique key component) - otherwise warning is issued.
    • Fix - Support for BTrieve files >2Gig (older versions of BTrieve split >2G over multiple files - was not deleting the temp files after use).
    • Fix - was including spurious characters in the password (for the SQLConnect api command).
    • Fix - does not reset owner (of FM3 SQL file) if owner string is clear.
    • Fix - MySQL: unique key was not checking components (when finding a match) - erroneous reporting that a key existed on the backend (when it may not have).
    • Fix - decimals with 0 scale (points to the right) were not being reported correctly.
    • Feature - checks for unique auto-names (for Topspeed files) and warns accordingly (if 2 different tables will both be issued the same file name).
    • New Connect window control template (easier interface) for ABC applications.
    • Support for Oracle Express (via ODBC).
    • Check for a multiple Identity fields in SQL tables in the dictionary (Template warning).
    Version 3.95 Beta (Released October 9, 2006)
    • Fix - Support for BTrieve files >2Gig (older versions of BTrieve split >2G over multiple files).
    Version 3.94 Beta (Released October 5, 2006)
    • Fix (regression in 3.90) - Non-SQL files were requiring a login.
    • Disable BUILD button on RuntimeFileManager (for SQL files). From Clarion 6 9051, BUILD builds all keys on the SQL backends. BUILD is not a necessary function for SQL backends (new fmcommon.tpw template).
    • Support for Oracle Express (ODBC) does not support the username in the filename prefix (which is required by some older versions of Oracle).
    • Support for BTrieve files >2Gig (older versions of BTrieve split >2G over multiple files).
    • Fix (regression in 3.90) was forcing LogonScreen when not necessary.
    • Fix - CheckCreateKey was including the Prefix in the table name, forcing key creation.
    • Fix (PostgreSQL) - invalid formula for decrementing indices (PostgreSQL does not support decrementing indices).
    • Fix (regression in 3.90) - Key lookup was not using cased name for file lookup
    Version 3.93 Beta (Released September 13, 2006)
    • Fix (regression in 3.90) - SetIfNew for SQL was not being implemented.
    • PostgreSQL - support for decrementing elements in indexes.
    • PostgreSQL - support for adding auto-incrementing keys, and removing auto-increment from a key.
    • PostgreSQL - support for altering or dropping an index in a schema (not public)
    • PostgreSQL - support for adding indexes in a schema (not public)
    • PostgreSQL - support for multiple elements in indexes.
    Version 3.92 Beta (Released September 5, 2006)
    • Variables used to insert values into tables are created (and disposed on exit) instead of a predefined size (New Functions - ds_SQLHexEx encodes binary using the created string; SaveToxFerString, SetFieldValue, AppendFieldValues, AppendFieldNames, SetInsertString).
    • Postgres - CharRequiresEncoding function is used to determine if a character in a binary string must be encoded or not. All strings aren't encoded - only binary ones. '\' character is doubled for insertion into datafields.
    • FieldValues were not being cleared correctly before entering the values into the database.
    • Postgres - WarnOnIllegalFieldChange - includes a change from a text based field (char, varchar, text) to a binary based field (bytea).
    • Template fix - if including both MSS and ODBC support, Connect window was always trying MSS first (if ODBC was selected).
    • Template fix - attempted open after problem creating FM3 SQL work table.
    Version 3.91 Beta (August 30, 2006)
    • Fix for overed fields (when doing a freshen).
    Version 3.90 Beta (August 28, 2006) - please thoroughly test this version on sample data before rolling out a release.
    • New feature PostgreSQL support (you must re-create the Connect window using the Template Utility). Furthermore, check out the note on PostgreSQL - Binary Strings. Limited to Clarion6 and up (because of the case-sensitivity of fieldnames in previous versions of Clarion).
    • Fix - not generate all code when FM3 is disabled.
    • Feature - enable 1,1 or '1,1' in Identity user option.
    • Feature - default to add the necessary project equates to the project defines (in the Connect window) where Multi-Proj is not present.
    • Connect window - Moved Port to normal options (instead of Advanced options).
    • Renamed 'Advanced' to 'Options'. Included 'Schema' field in Connect window for postgres schema support.
    • Feature - MakeGUIDsBinary - for Replicate support. Make GUID strings binary strings (bytea for Postgres) instead of chars.
    • New Functions (Exported Functions):
      ds_MakeIdentityFieldEx (takes a file parameter so that at entry point, only one Identity field per file is checked),
      ds_SetMakeGUIDsBinary - a function to set the MakeGUIDsBinary property.
      Internal functions:
      ds_GetSQLTableName - a function to return the SQL compliant table name (depending on the driver) (replaced duplicate code).
      ds_DropKey - a function to drop a key from a SQL table (replaced duplicate code)
      ds_BuildKey - a function to add a key to a SQL table (replaced duplicate code)
      CasedName - returns a correctly cased name (depending on the backend driver) (replaced duplicate code)
      IsFieldTypeABlobType - returns whether the field is a BLOB type or not (replaced duplicate code)
      SetCaseSensitivity - a function to set case sensitivity of the backend (replaced duplicate code)
      GetBlobType - get field type to use as a blob (depending on the backend driver) (replaced duplicate code)
      ds_SetMSSDatePicture - a function to set the DatePicture for MSS to use in the ds_ConvertClarionDate stored procedure.
      ds_OracleTableSpaces - creates an Oracle tablespace (replaced duplicate code)
      PostgreSQL functions: ds_PostGresStructure, ds_PostgresLoadFieldQ, ds_PostgresLoadKeyQ, CreatePOSTGRESFM3Table, ds_PostgresWarnForIllegalFieldChanges, ds_PostgresParseBinaryString, CharToOctet.
    • For Binary field checking, use CasedName function (rather than upper).
    • Check SQL BLOB types correctly (Binary or non-binary).
    • In SQL execute scripts Queue - errorlevel string (ignore, notify, warn, fatal)
    • MSS - ListServer call return error codes were language dependant.
    • MSS - uses the set date picture to format dates when using the ds_ConvertClarionDate stored procedure.
    Version 3.88 Beta (Released July 14 2006)
    • Ability to suppress external field names and/or key name checking.
    Version 3.87 Beta (Released July 13 2006)
    • New function - ds_SetAutoDowngradeEx(pNoWarnings) which allows programmatic auto file downgrading - use with caution only use unless you really know what you're doing!!
    Version 3.86 Beta (Released July 6 2006)
    • Fix for data structures where TPS contains an owner (password) - and connecting to a SQL backend (using an owner). The internal FM3 SQL file was using the incorrect owner. Two new internal functions - ds_ReturnDriverOwner and ds_ReturnDriverIsSQL to make this easier internally.
    Version 3.85 Beta (Released June 28 2006)
    • Fix for overed fields - was not interpreting fields (not groups) that were overed.
    Version 3.84 Beta (Released June 13 2006)
    • RuntimeFileManager (by default) takes the status of the 'Generate all file declarations in this App' checkbox for the UseFiles template prompt (previously was defaulting to 'Files used in this App') (New fmcommon.tpw which affects FM2 as well)
    Version 3.83 Beta (Released June 13 2006)
    • Template utility was being created with FM2 Runtime FileManager for ABC applications (instead of using the FM3 RuntimeFileManager control template)
    Version 3.82 Beta (Released May 31 2006)
    • Fix for BLOBs created on a SQL backend - was not creating the BLOB with an external name. Note: FM3 will rename existing BLOBs created with the field name to the external name (this could potentially break other programs using the old field name - but will mean that your existing Clarion programs work correctly).
    • Allows multiple field renaming (previously only one was permitted).
    • FM3 Template embeds grouped into one embed tree.
    • Fix - renamed fields were created with upper case (in MSSQL, MySQL, Oracle, SQLAnyWhere and BTrieve), but were created in entered case in Firebird. This should have been the other way around. Firebird now has renamed fields in upper case and the other backends without case adjustment.
    • Fix for Clarion6.1 and Clarion6.0 - could not assign a file handle to a queue in these versions of Clarion (new feature regression in 3.79)
    • Fix for regression in 3.80 - assert was warning on duplicate keys in alias files as well as normal files.
    Version 3.81 Beta (Released May 26 2006)
    • Fix for Regression in 3.80 Compiler Assert warning was checking every key (even the ones that aren't created on the backend). Now only checks the external names of the keys created on the backend.
    Version 3.80 Beta (Released May 25 2006)
    • Bug fix - ROWGUID (uniqueidentifier) is now supported in FM3. Previously FM3 was trying to modify the uniqueidentifier to a varchar(36)
    • Compiler Assert warning - checks for database unique key names in MSSQL (required in MSSQL).
    • Runtime Warning - warns if FM3 is attempting to change an IMAGE type (in MSSQL) which is not permitted.
    • Overridable template assert - checks if the backend supports arrays, and generates a template assert if there are arrays in the table declaration, but the backend doesn't support them. This assert is overridable in the Global Extension Template.
    Version 3.79 Beta (Released May 12 2006)
    • (Update to fmcommon.tpw) - warns when there's a BLOB added to a Topspeed table (as BLOBs are unsupported in FM3 at this stage). FM2 requires upgrading as well. (Moved %CheckFieldTypes to fmcommon.tpw for use in FM2 as well).
    • Template fix - regression in 3.78, &= file in a queue is not legal in Clarion5 and c5.5 (for feature in xFiles to export data to XML from the RuntimeFileManager). This feature will only be available for Clarion6 users.
    Version 3.78 Beta (Released May 2 2006)
    • Fix:Changed WorkFile and WorkFileName template variables to LocFMx:WorkFile and LocFMx:WorkFileName.
    Version 3.77 Beta (Released April 28 2006)
    • Fix: MySQL upgrading using a DSN connection was not working correctly.
    Version 3.76 Beta (Released April 27 2006)
    • Fix: Regression in 3.73 (with Driver substitution implementation). FM3 Template reads Multi-Proj settings, rather than detecting at runtime.
    Version 3.75 Beta (Released April 26 2006)
    • Fix: Support for MySQL 5.0 - was not converting DateTime, Byte, ushort, and ulong data correctly.
    Version 3.74 Beta (Released April 26 2006)
    • Template: Assert for unsupported File driver options (specifically /TURBOSQL).
    • Fix: Increased data to convert to string from 20 to 1024. This is to handle ForceSQLDataType useroption.
    Version 3.73 Beta (Released April 21 2006)
    • Template: Driver substitution (using Multi-Proj) was using the name of the file (not the label) - which was causing problems in databases not supporting points in them (like firebird). Now uses the label for .tps, .dat and superfiles - otherwise the name is used.
    Version 3.72 Beta (Released April 20 2006)
    • Template: Template utility to create a Conversion application.
    • DLL: MySQL fix - was not always opening the table correctly, sometimes indicating a file was not found when it is on the backend, but in a different form.
    Version 3.71 Beta (Released April 11 2006)
    • Template: Updated FMCommon.tpw.
    Version 3.70 Beta (Released April 4 2006)
    • Template: Merged more common FM2 functionality and FM3 functionality into the FMCommon.tpw.
    • Template Fix: FM3 was generating an assert for using a newer version of FMCommon.tpw. Now only makes sure that the tpw is not older (i.e. tpw will be backward compatible in future)
    • Template: New Template utility to import the RuntimeFileManager window into your application.
    Version 3.68 Beta (Released February 21 2006)
    • Template: Fixed DET/DEF support for global data.
    • Template: Fixed inability to place RunTimeFileManager control template on a window.
    • DLL: Fixed Create Table script for FireBird where it requires that the Default be set before the Not Null.
    Version 3.67 Beta (Released January 30 2006)
    • Template: Split template into 2, moving common code between fm2.tpl and fm3.tpl to fmcommon.tpw.
    • Template: Fixed VLDS support.
    • Template: Changed DET/DEF related code to allow for non-DET/DEF user options to use the word 'DATA'.
    • Template: Other tweaks and fixes.
    Version 3.66 Beta (Released December 22 2005)
    • Template: Work around for invalid external field names assertion. Clarion sometimes marks blank external field names as ''.
    Version 3.65 Beta (Released December 16 2005)
    • Template: Introduced 2 new asserts to warn of FM3 incompatibilities in the dictionary.
    Version 3.64 Beta (Released December 15 2005)
    • Template: Fixed Multi-DLL VLDS Support.
    • Template: Minor changes.
    Version 3.63 Beta (Released December 12 2005)
    • DLL: Fixed MySQL Unique Constraint detection.
    • DLL: Added support for Clarion's CHECKFORNULL.
    • DLL & Template: Added support for SoftVelocity In-Memory Database Driver v2.0.
    • Template: Fixed calls to AutoNET when using the VLDS support.
    • Template: Minor changes.
    • Docs: Completed Dictionary User Option Reference Guide.
    • Docs: Minor updates / tweaks.
    Version 3.62 Beta (Released August 31 2005)
    • DLL: Fixed FireBird AutoNumber detection.
    • DLL: Added support for Clarion 6.2 9047 internal data structures.
    • Docs: Minor updates / tweaks.
    Version 3.61 Beta (Released August 05 2005)
    • DLL: Fixed FireBird Not Null alteration.
    • DLL: Fixed PrimeBlankZero User Option.
    • DLL: Fixed creation of a "0" file in the application directory.
    • New Feature: You can now default new fields to SQL functions - e.g.: SetIfNew SQLFUNC_getDate()
    • Template: Fixed VLDS AutoFIX placement.
    • Other: Minor updates / fixes.
    Version 3.60 Beta (Released June 03 2005)
    • DLL: Fixed errors creating SQL table when certain SetIfNew values were used.
    • Template: Fixed resizing of Connect Control Template after an error occurred.
    • DLL / Template: Other minor updates.
    • Clarion6.2: First release supporting Clarion 6.2.
    Version 3.59 Beta (Released April 29 2005)
    • DLL: Minor Tweaks and Fixes, including SQL errors relating to Nullable fields and AutoNumber.
    • Template: Added support for specifying the PORT number on the Connect Control Template. (Note: You'll need to re-add the controls.)
    • Template: Added support for managing a Microsoft SQL Server over the internet.
    • Template: Fixed compile errors in the SQL Connect Extension Template for undefined global variables.
    • Template: Other minor Tweaks.
    • Examples: Added support for backing up old examples at install time.
    • Docs: Added Google Search functionality.
    Version 3.58 Beta (Released April 19 2005)
    • DLL: Fixed detection of not null fields in SQL.
    • Template: Fixed compile errors in the SQL Connect Template for undefined global variables.
    • Template: Fixed RuntimeFileManager including Alias files.
    Version 3.57 Beta (Released April 15 2005)
    • DLL: Fixed FM_Upgrading switch to be turned on during a Freshen.
    • DLL: Fixed problem where FM3 would try to run all upgrade scripts again if 1 had failed. i.e., not just the failed one(s).
    • DLL: Fixed FM3 create statement with conflicting Default and Identity attributes on a field.
    • DLL: Fixed MSSQL Blob support.
    • DLL: Fixed upgrading file when adding an External Name to a field.
    • DLL: Fixed occasional problem where files would be "upgraded" every time the program is run.
    • DLL: Added workaround for Access Denied Error occurring on SuperFiles during upgrade if 1 or more subtables were open on another thread.
    • Tested: MySQL v4.1.10a and MyODBC 3.51.11 have been tested, and show no problems with FM3.
    • Template: Minor tweaks to the RuntimeFileManager.
    • Template: Changed Global File Name declarations to only be declared for SQL Files.
    • Examples: New 'WashGuids' example added. This demonstrates adding your own functionality to the RuntimeFileManager, and in this example, cleans existing guid fields of NULLs.
    • Docs: Minor updates.
    Version 3.56 Beta (Released February 25 2005)
    • DLL: Fixed decimal to string conversions - now strips off leading zeros.
    • DLL: Fixed Multi-Proj support.
    • DLL: Fixed Altering SQL Primary keys to ensure fields not null.
    • DLL: Tweaked Downgrade messages.
    • DLL: New Feature: SetIfNew now works in SQL!
    • DLL: New Feature: New SQL Columns can be primed blank or zero instead of NULL.
    • Template: Fixed RuntimeFileManager List selection.
    • AutoNET: Fixed Error handling for running AutoNET.exe.
    • Translation: Updated French Translation file.
    • Docs: Minor updates.
    Version 3.55 Beta (Released February 7 2005)
    • UPGView: Previous release had a bad UPGView included that GPF'd.
    Version 3.54 Beta (Released February 4 2005)
    • DLL: Fixed upgrades re-occurring each time the program is run.
    Version 3.53 Beta (Released January 31 2005)
    • DLL: Fix to workaround for possible Clarion 6 bug (currently investigating).
    Version 3.52 Beta (Released January 28 2005)
    • DLL: Workaround for possible Clarion 6 bug (currently investigating).
    • DLL: Fixed Mssql Identity field problem.
    • DLL: Fixed Changing file names when fullpath is set in the OldName user option.
    • Template: Added Support for local and IPDriver files to co-exist and be managed by FM3.
    • AutoNET: New version available!
    • Examples: New FM3 / Multi-Proj example demonstrating Multi-Proj's Driver Substitution features! Must use Multi-Proj v2.64 or later.
    • Docs: Minor changes and improvements.
    Version 3.51 Beta (Released November 23 2004)
    • DLL: Fixed Sybase table Upgrading and Comparison.
    Version 3.50 Beta (Released November 23 2004)
    • NEW: First Release of SYBASE Support!! Please note, this is a very early release... all feedback and bug reports are welcome!
    • Template: Fixed template errors in Multi-DLL applications using the VLDS code template.
    • Examples: Updated Examples.
    • Examples: New SYBASE Example.
    Version 3.49 Beta (Released November 17 2004)
    • Template: Fixed template variable errors.
    • Template: Fixed generating of sql-like file names for non-sql drivers.
    • Examples: Updated ODBC Examples.
    • Examples: New MSSQL and ORACLE Examples.

    Version 3.48 Beta (Released November 16 2004)
    • Template: Fixed unknown template variable errors.
    Version 3.47 Beta (Released November 16 2004)
    • DLL: Fixed Auto new GUID field priming for SQL backends.
    • Docs: Added fuller documentation for the new ConnectToSQLBackend Control Template. (See the SQL Docs for details.)
    Version 3.46 Beta (Released November 15 2004)
    • DLL: Minor tweaks and fixes.
    • Template: Added support for IPDriver. (See the AutoUP Implementation section for details.)
    • Template: Added new ConnectToSQLBackend CONTROL Template. (See the SQL Docs for details.)
    • Examples: Added new ODBC examples - ABC and Legacy. (More to come later this week.)
    Version 3.45 Beta (Released October 27 2004)
    • DLL: Added support for creating Blob fields in SQL for Clarion 6. (Note: Does not transfer data from TPS.)
    • DLL: Fixed Oracle TableSpace Creation.
    • DLL: Fixed Handling Dependent SQL objects.
    • DLL: Fixed Table Name displayed on upgrade window.
    • DLL: Fixed Case-sensitivity during field and key comparison.
    • DLL: Now handles DateTime Group Over String structures in TPS.
    • DLL / Template: Now handles upgrades for files containing triggers (C6).
    • Template: Now conforms to the new CapeSoft Template Standards.
    Version 3.44 Beta (Released September 10 2004)
    • DLL: Fixed case-insensitive field comparison in sql.
    • DLL: Fixed TPS OldName feature.
    • DLL: Fixed dropping of fields when DCTMasterFields is set.
    • Docs: Updated FAQs.
    Version 3.43 Beta (Released September 03 2004)
    • DLL: Fixed FireBird TIME datatype support.
    • Docs: Added FAQs.
    Version 3.42 Beta (Released August 25 2004)
    • NEW: First release of FireBird support! All feedback welcome.
    • DLL: Added ds_UPGOpen function.
    • DLL: Various improvements and fixes.
    • DLL: Further optimisations - Clarion DAT file conversion now runs faster.
    • Examples: New FireBird example: ClarionDir\3rdparty\examples\filman3\odbc\FireBird
    • AutoNET: New version of AutoNET available. Added support for multiple command line parameters.
    Version 3.41 Beta (Released August 02 2004)
    • DLL: Fixed DateTime Group Over String upgrade bug.
    • DLL: Fixed Unique Constraint Comparison.
    Version 3.40 Beta (Released July 30 2004)
    • DLL: Major code restructure and cleanup.
    • DLL: Numerous bug fixes.
    • DLL: Major TPS to SQL Optimizations
    • DLL: Fixed Slow TPS conversions when Logout failed.
    • DLL: Fixed bug where SQL time fields were being created.
    • DLL: Fixed AutoNumber to work with External Field Names.
    • Template: Improvements and changes.
    • Docs: Newly written and revamped (Work in progress!)
    Version 3.30 beta (Released February 27 2004)
    • DLL: Bug fixes to Field structure comparisons in SQL.
    • DLL: Bug fixes to Key structure comparisons in SQL.
    • DLL: Bug fix to | READONLY fields in SQL.
    • BDE: New BDE version available.
    • Coming soon: Brand new, much improved, long awaited, documentation! (Unfortunately not ready for this release!)
    Version 3.29 beta (Released December 12 2003)
    • DLL: Fixed GPF on SQL upgrades.
    Version 3.28 beta (Released December 11 2003)
    • DLL: Fixed FM3 enabled Clarion 6 programs from running it's process at 100% CPU on close.
    • DLL: Fixed MySQL multi-component AutoNumber feature.
    • DLL: Fixed Clarion 5 compile errors.
    • DLL: Added support for Replicate to know when FM3 is upgrading.
    • BDE: New version of BDE available.
    Version 3.27 beta (Released November 14 2003)
    • FIX: fmXXcwrt.dll errors on IDE Loading Template Registry.
    Version 3.26 beta (Released November 13 2003)
    • Template: Fixed %OldPrefix Template error in Legacy applications.
    • Template: Fixed automatic running of Support ABC Template Utility which copied builtins.clw into the app source directory.
    • DLL: Changed default SQL Date format to YYYYMMDD.
    Version 3.25 beta (Released October 31 2003)
    • Template: Now automatically adds the FM2=>1 Project Define for C55 and above. NB: C5 users still need to do this manually!
    • Template: Now automatically runs the Support ABC Template Utility. NB: If you get an error 47, run this manually and retry before contacting Support.
    • Template: Added support for changing your file prefix. New File Level String User Option: OldPrefix
    • DLL: Fixed MySQL Drop Index syntax.
    • DLL: Fixed MySQL initial gODBCFile creation.
    • DLL: Added support for marking a field READONLY for AutoNumbered fields. e.g.: MyFieldName | READONLY
    • BDE: New version of BDE available.
    Version 3.24 beta (Released September 10 2003)
    • Template: Fixed GPF in AutoNET when calling ds_SyncDirEx.
    • Docs: Minor fixes and updates to docs.
    Version 3.23 beta (Released September 05 2003)
    • Template: Improved Very Large Dictionary Support (VLDS:FM3 Init Code).
    • Template: Changed AutoFIX to use Long Path Names in Clarion 6 (TPSFix v6.0).
    • DLL: Fixed Multi-table TPS file conversion.
    • DLL: Fixed occasional connection errors on converting SQL drivers ("phantom" files).
    • DLL: Fixed HALT on FM3 system table creation.
    • DLL: Fixed SQL conversion errors where string fields contained NULLs (<0>).
    • DLL: Changed Oracle Tablespaces check to support Oracle Light (user_tablespaces).
    • DLL: Extended ZeroNull support to all levels - Template / Dictionary level, File level, and Field level.
    • Runtime File Manager: Fixed Freshen emptying files.
    • Runtime File Manager: Added Build Error checks.
    • BDE: New version of Bulk Dictionary editor.
    Version 3.22 beta (Released August 06 2003)
    • DLL: Fixed the upgrading of Btrieve(DAT) files containing MEMOs where the FM2/3 "Keep old versions of files" switch is ON.
    • DLL: Fixed the conversion of multi-table TPS files (DiskFile.tps\!Table1) to SQL.
    • DLL: Fixed SQL upgrading of 1 file structure for many physical files.
    Version 3.21 beta (Released July 31 2003)
    • Template: Added embed points in FM3:Connect To SQL Backend Extension template.
    • Template: Added "/A" switch to TPSFIX.exe command line so that it runs visibly, but silently.
    • DLL: Fixed occasional decimal conversion problem.
    • DLL: Minor fixes and changes to messages and debugging.
    • DLL: AutoNET default ini file has changed to AutoNET.log in the operating systems user temporary directory.
    • Docs: Fixes and updates to docs.
    • CSCAN: Fixed.
    • UpgView: Fixed displaying of non Topspeed data file structures.
    Version 3.20 beta (Released July 08 2003)
    • Template: Minor template changes.
    • DLL: Fixed errors on overed fields.
    • DLL: Fixed Date Time inserts for conversion of more than 1 table in a session, and for Null date time data.
    • DLL: Fixed multiple conversions of the same file during 1 session.
    • DLL: Fixed and improved date time key creation.
    • DLL: Fixed Oracle table creation where no tablespace is specified.
    • Examples: Minor updates to examples.
    • Docs: Updated Docs.
    • BDE: New version of BDE available.
    Version 3.0 beta 19 (Released June 24 2003)
    • Template: Added CreateKey Option to Global extension Advanced SQL tab.
    • DLL: Fixed Create Table statements executing twice, and therefore causing "Object already exists" errors.
    • DLL: Fixed blank statements.
    • DLL: Error messages and debugging improved.
    • DLL: Fixed Oracle constraint management.
    • Docs: Updated Docs.
    • C6: Fixed CapeSoft Accessories Menu to File Manager 3 from File Manager 2.
    • BDE: New version of BDEavailable.
    Version 3.0 beta 18 (Released May 27 2003)
    • Template: Better DET/DEF support.
    • Template: Fixed SQL Server Name function call.
    • DLL: Improved Date Time Group over String handling during conversion, including handling "NULL" data.
    • DLL: Fixed SetIfNew for a new date or time field when converting to the group over string structure.
    • DLL: Support for Oracle Tablespaces. Please see Oracle TableSpaces for details.
    • DLL: Support for MySQL MyISAM and InnoDB file systems.
    • DLL: Changed default behaviour to create Unique constraints.
    • DLL: Checks and warns if more than 1 Identity / AutoNumber Field is declared for the backend.
    • DLL: Added Logout and Commit to data conversion for Clarion 5.5 and up.
    • DLL: Fixed Data corruption in TPS file upgrades where an Over exists.
    • Docs: Updated, and additional documentation. e.g. How to set up an ODBC Data Source Name.
    • BDE: New version of BDE available.
    Version 3.0 beta 17 (Released April 11 2003)
    • DLL: Fixed Primary Key creation on Creation of SQL tables where an external key name exists.
    • DLL: Fixed field comparison on identity fields.
    • DLL: Fixed hanging on file upgrades in Clarion 5.
    • DLL: Fixed MsSQL Float datatype comparison.
    • DLL: Added support for blank = null in TPS to SQL data conversion. Please note: This is activated with the Zero = Null Advanced SQL switch.
    Version 3.0 beta 16 (Released April 01 2003)
    • Template: Fixed "Unknown variable '%odbDB'" compile error.
    • DLL: Fixed broken Field Names if using External Names in building the SQL Insert Statement for TPS to SQL conversions.
    • DLL: Fixed broken CSTRING Field Values in building SQL Insert Statement where the null terminator was not being stripped off.
    • DLL: Changed default Case-sensitivity to Case-sensitive for MYSQL backends. This should not affect case-insensitive databases.
    • DLL: Fixed Case sensitive Field Comparison case-insensitive backends where FM3 was not original table creator.
    • Clarion 6: Fixed Installer.
    Version 3.0 beta 15 (Released March 28 2003)
    • Template: Fixed Multi-dll Legacy support for SQL drivers.
    • DLL: All new Debugging functionality.
    • DLL: Major change to default Key management in SQL engines. Please read the SQL Key Management section carefully.
    • DLL: Improved structure comparison routines.
    • DLL: Fixed error occurring on opening files not declared in the dictionary.
    • DLL: Fixed Alias files causing complete structure comparison on every access of the alias / file.
    • Docs: Updated docs.
    • CScan: Fixed some outstanding bugs.
    • BDE: New version released.
    • Clarion 6 build released.
    Version 3.0 beta 14 (Released March 11 2003)
    • DLL: Major bug fix: Beta 13 caused loss of data in file upgrades with non-SQL drivers.
    Version 3.0 beta 13 (Released March 07 2003)
    • Template: Added SQL Advanced tab for SQL specific advanced settings.
    • Template: Added Advanced Option: Create Utility Stored Procedures (default on).
    • Template: Added Advanced Option: SQL Conversion - Zero = NULL (default off).
    • DLL: Fixed adding multiple descending columns to a key.
    • DLL: Fixed error in MySQL Connection when FM3 table is not created.
    • DLL: Added support for DSN-less connections in ODBC against a MSSQL backend. (Please note Oracle and MySQL already supported).
    • DLL: Added new MSSQL Stored Procedure: ds_ConvertClarionDateTime. Please click here for more info. - Cool!!!
    • DLL: Added support for inserting NULL values to your backend during TPS to SQL conversion.
    • DLL: Added support for converting pre-existing TPS autonumbers to SQL (IDENTITY columns etc).
    • Docs: New documentation: SQL Specific Features Explored - check back regularly for updates.
    • BDE: Brand new version of BDE released. LOTS of new FM3 features, be sure to check this out!
    Version 3.0 beta 12a (Released February 14 2003)
    • Template: Minor correction.
    • DLL: Fixed ODBC engine GPF on startup.
    • DLL: Fixed FM3 SQL System table updates - case-sensitivity caused failed get - now case-insensitive.
    • Docs: New Look documentation!
    Version 3.0 beta 12 (Released February 13 2003)
    • Template: FM3IGNORE would override FM2IGNORE - Fixed.
    • Template: ConnectToSQLBackend local extension template would hang if creating FM3 table for the first time - Fixed.
    • DLL: Multi SQL Driver support - Fixed.
    • DLL: Dependent Column handling conflicted with ExactMatch dropping - Fixed.
    • DLL: Automatic GUID entry if new field now Replicate compatible.
    • Discontinued support for 16bit applications.
    Version 3.0 beta 11 (Released January 24 2003)
    • Template: Fixed Pragma Link ODBC template bugs.
    • Template: Fixed multiple calls to the FM3 Connect() procedure.
    • Template: Moved Connection parameters to local Connection Extension Template.
    • Template: Made Connect To SQL Backend Extension template more user driven.
    • Template: Enabled Autolan enabling on dlls.
    • Template: Added Field User Option AutoNumber for setting AutoIncrement on the backend (MSSQL, MySQL). (Note: Identity is still valid. They're synonymous!)
    • Template: Updated RuntimeFileManager template for SQL.
    • DLL: Fixed duplicate column name errors.
    • DLL: Fixed ExactMatch Column and Key dropping.
    • DLL: Increased OLDNAME attribute length to support long file names.
    • DLL: Fixed problem with Alias files where FM3 would try to alter column names.
    • DLL: Fixed errors on altering Index dependent columns. - This is a very good thing!!
    • Docs: Additions and changes to docs.
    • Examples: New Multi dll SQL example: \3rdparty\examples\filman3\multisql.
    • Examples: Updated SQL examples: fm3mss, fm3ora, msodbfm3, myodbfm3, and orodbfm3 - Check them out!!!
    • BDE: Please note: As BDE was primarily designed as a utility for CapeSoft's Replicate, additional FM3 features are on a waiting list. Please email "support at capesoft dot com" to add your FM3 feature wishes! They will be attended to as soon as we are able. Thanks.
    Version 3.0 beta 10 (Released December 24 2002)
    • Template: Fixed RuntimeFileManager generated code for SQL drivers.
    • DLL: Fixed MySQL Flush error.
    • DLL: Fixed big string support in MySQL.
    • DLL: Added support for DSN-less connections in MySQL.
    • DLL: Fixed Version number errors when only owner has changed.
    Version 3.0 beta 9a (Released December 17 2002)
    • Template: Fixed conditional Connect() procedure call.
    Version 3.0 beta 9 (Released December 12 2002)
    • Template: Fixed missing END from ODBC file declaration.
    • Template: Runtime File Manager Procedure template mysteriously disappeared - Fixed.
    • Template: NEW: FM3ConnectToSQLBackend local level extension template. Replaces old Connect code example.
    • DLL: Fixed ORACLE detection of Primary Key.
    • DLL: Fixed error detection for non-English windows settings.
    • DLL: Fixed ODBC for MSSQL support - Please note, the MSSQL ServerName is required on the template for FM3.
    • DLL: Added ODBC for Oracle support.
    • DLL: NEW: Added Support for MYSQL - Please note: First release - Please send feedback to "support at capesoft dot com".
    • Docs: Updated and added documentation: Driver and DataBase Specific Recommendations.
    • Bulk Dictionary Editor: Updated.

    Version 3.0 beta 8 (Released November 22nd 2002)
    • Template: Removed gORACLEFile primary key.
    • Template: Added support for priming Replicate's Site Field.
    • DLL: Removed hidden stop() accidently left in beta 7.
    • DLL: Fixed occasional link errors on compile (ds_AlternateFileNameEx and ds_SetFM2ININame).
    • DLL: Improved big string support where strings greater than 8192bytes may not have worked.
    • DLL: Improved MSSQL Primary key recognition for auto-named primary keys.
    • DLL: Improved case-sense on OldName.
    • DLL: Made MSSQL Server case check once per program run instead of once per file open.
    • Docs: Minor updates to docs and SQL Tips And Tricks.
    • Bulk Dictionary Editor: Updated, and improved, enhanced FM3 features!!!
    Version 3.0 beta 7 (Released November 11th 2002)
    • Template: Added Support for pending MultiProj release (actually since beta 6).
    • Template: FM2 Backward compatibility fixed (ds_AlternateFileNameEx).
    • Template: Fixed AlternateFileName with Alias files.
    • Oracle: Fixed group date structure trying to use MSSQL datatype.
    • Oracle: Fixed Key comparison of Constraints and Indexes.
    • Oracle: Improved datatype matching - NB: Please see the SQL TIPS AND TRICKS for Oracle Datatype matching.
    • DLL: Fixed detection of version change for ALL files.
    • DLL: Fixed use of SuperFiles in the OLDNAME attribute.
    • Other minor changes.
    • NEW: Free CapeSoft Bulk Dictionary Editor included!!! - This will help make your TPS to SQL conversion a breeze!
    Version 3.0 beta 6 (Released October 28th 2002)
    • Fixed key creation where various columns appear in more than 1 key.
    • Added a primary key to the FM3 sql table (e.g.: PK_GMSSSQLFILE).
    • New handling of DIM fields - Please see the Sql Tips and Tricks section for info.
    • Oracle field comparison improved.
    • Oracle key comparison fixed.
    • Oracle syntax improved.
    • NB: You will need to DROP the FM3 sql table (e.g.: gMSSQLfile) before running your FM3 enabled app again.
    Version 3.0 beta 5 (Released October 17th 2002)
    • Fixed multiple column Primary Key creation.
    • Fixed multiple column descending key creation.
    • Fixed OldName data conversion where data has a different path from the exe.
    • Fixed Null field creation on Primary key fields.
    • Improved faster detection of file structure change - no more pre-comparison!!
    • DATE and TIME handling improved.
    • REAL handling improved.
    • ORACLE key syntax fixed.
    • First release ODBC for MsSql. (Please send feedback to "support at capesoft dot com") (New example included!)
    Version 3.0 beta 4 (Released September 10th 2002)
    • Fixed creation of Not Null fields on FM3 file creation bug.
    • Fixed External Name check in Case-insensitive MSSQL Server field managing bug.
    • Fixed String / Cstring to create Text / Clob datatypes in the backend when the servers respective char / varchar byte limits are reached.
    • Improved detection of Primary Keys.
    • Improved detection of ExactMatch User option.
    • Added new field user option called Identity. This option declares an Identity field on the MSSQL Server with a Seed and Increment parameter. (For server-side Auto-Incrementing field values in Microsoft SQL.)
    Version 3.0 beta 3a (Released September 2nd 2002)
    • Improved detection of invalid data structures in the pre-comparison.
    • Now supports ORACLE! Please note: This is in early test stages - feedback welcome!
    • Fixed limited length of SQL statement bug.
    • Added support for table owners other than "dbo".
    Version 3.0 beta 3 (Released August 29th 2002 - Private Oracle Test Release)
    • Improved detection of invalid data structures in the pre-comparison.
    • Now supports ORACLE! Please note: This is in early test stages - feedback welcome!
    Version 3.0 beta 2 (Released August 28th 2002)
    • Added support and documentation for handling multiple MSSQL databases in one application.
    • Taken care of DATA ACCESS errors by checking and configuring linked servers for DATA ACCESS.
    • Improved function of the FM3IGNORE switch for ignoring certain files in FM3.
    • FM3 now creates the SQL tables instead of leaving it to the driver. This allows support for the REAL datatype previously causing an error 75 with the MSSQL driver.
    • Fixed the datatype mismatch error which seemed to occur due to inconsistent datatype structures of system tables in MSSQL versions.
    • FM3 now supports DESCENDING keys.
    Version 3.0 beta 1a (Released August 14th 2002)
    Minor change in template.

    Version 3.0 beta 1 (Released August 12th 2002)
    First public release. Includes all current File Manager 2 functionality and extends the power of AutoUP to Microsoft SQL databases.