Upgrading to DataFlex 3.2: Difference between revisions

m
Added note about the DataFlex debugger
m (Code)
m (Added note about the DataFlex debugger)
 
(35 intermediate revisions by 2 users not shown)
Line 4: Line 4:


The content of this page is based on a whitepaper originally written in May 1998 by Dennis Piccioni from Data Access Worldwide. Updates were made to the content up until 2002, but nothing after that, so some references will be dated.
The content of this page is based on a whitepaper originally written in May 1998 by Dennis Piccioni from Data Access Worldwide. Updates were made to the content up until 2002, but nothing after that, so some references will be dated.
'''Note:''' One very good reason to upgrade is that if you are using DataFlex 3.2, you can use the '''[https://docs.google.com/document/d/1a7DOX7bULiEqAkNXmKA-T91n0RfLFzh8V-CjXwMW0x0/edit#heading=h.mxjauxfaio71 DataFlex Debugger]''' to run your programs in debug mode with features such as single stepping, variable inspection, call stack and record buffer inspection. Read the help and get the DataFlex Debugger download, from the [https://www.dataaccess.eu/resources/downloads/download-category/download-subcategory-842?dagapsg=64 DataFlex Debugger download page].


== Why Upgrade? ==
== Why Upgrade? ==
Line 78: Line 81:
:If you are writing applications for DOS/Windows and Linux/Unix platforms, you should use the Sysconf function with the Sysconf_Dir_Separator to obtain the path separator in your program code:
:If you are writing applications for DOS/Windows and Linux/Unix platforms, you should use the Sysconf function with the Sysconf_Dir_Separator to obtain the path separator in your program code:


::String sDirSeparator
<source lang="vdf">
::move (Sysconf (SYSCONF_DIR_SEPARATOR)) to sDirSeparator
String sDirSeparator
move (Sysconf (SYSCONF_DIR_SEPARATOR)) to sDirSeparator
</source>


*;Install Location
*;Install Location
:The default install location for DataFlex 3.2 on DOS/Windows is c:\df32.
:The default install location for DataFlex 3.2 on DOS/Windows is '''c:\df32'''.
:The default install location for DataFlex 3.2 on Linux/Unix is /usr/local/df32.
:The default install location for DataFlex 3.2 on Linux/Unix is '''/usr/local/df32'''.


*;Batch files versus Shell Scripts
*;Batch files versus Shell Scripts
Line 93: Line 98:
:On the new DataFlex 3.2 for Linux CD (part # 555260cd), we have provided 2 shell scripts to aid you in converting your existing files to lowercase names: lcase and lcaser. The lcase script lowercases all files in a single directory and the lcaser script lowercases all files in a directory and all subdirectories of that directory. To execute either script, simply type the script name, with no arguments, in a terminal changed to the directory you wish to affect:
:On the new DataFlex 3.2 for Linux CD (part # 555260cd), we have provided 2 shell scripts to aid you in converting your existing files to lowercase names: lcase and lcaser. The lcase script lowercases all files in a single directory and the lcaser script lowercases all files in a directory and all subdirectories of that directory. To execute either script, simply type the script name, with no arguments, in a terminal changed to the directory you wish to affect:


::cd /usr/local/df32/mysourcecode
<source lang="vdf">
::lcase
cd /usr/local/df32/mysourcecode
lcase
</source>


*;Binary Compatibility
*;Binary Compatibility
Line 146: Line 153:
# Run DFMaint.exe.
# Run DFMaint.exe.
# Select "Filelist" from the "Maintenance" menu.
# Select "Filelist" from the "Maintenance" menu.
# Highlight the file to convert.
# Highlight the file to convert - To select all files, choose "Select All" from the "Filelist" menu.
:: To select all files, choose "Select All" from the "Filelist" menu.
# Choose "Convert" from the "Database" menu.
# Choose "Convert" from the "Database" menu.
# You will be prompted whether to use a temporary file or convert in place. We recommend the default, "Use temp file".
# You will be prompted whether to use a temporary file or convert in place. We recommend the default, "Use temp file".
Line 164: Line 170:
This was never supported and will no longer work, because DataFlex now has the ability to use other database drivers, make API calls and other such options, which cannot support such characters at the runtime and driver levels. Even the DataFlex 2.3 User's Guide documented that the only characters allowed for field names are letters, numbers, underscore ("_") or the pound sign ("#"), and the field name must start with a letter.
This was never supported and will no longer work, because DataFlex now has the ability to use other database drivers, make API calls and other such options, which cannot support such characters at the runtime and driver levels. Even the DataFlex 2.3 User's Guide documented that the only characters allowed for field names are letters, numbers, underscore ("_") or the pound sign ("#"), and the field name must start with a letter.


Filelist Entries
'''Filelist Entries'''


In order to remove the invalid characters from filelist entries, you can run the DataFlex File Maintenance Utility (dfmaint).
In order to remove the invalid characters from filelist entries, you can run the DataFlex File Maintenance Utility (''dfmaint'').


1. From the Maintenance pulldown menu, select Filelist to display the current filelist entries.
1. From the '''Maintenance''' pulldown menu, select '''Filelist''' to display the current filelist entries.


2. Select the filelist entry you wish to edit and press <Enter>.
2. Select the filelist entry you wish to edit and press <Enter>.


Common symptoms experienced are the inability to open the menu.dat file in the menu program. In this case, you want to select filelist entry number 49, the DataFlex Menu File.
:Common symptoms experienced are the inability to open the menu.dat file in the menu program. In this case, you want to select filelist entry number 49, the '''DataFlex Menu File'''.


3. Make sure that the rootname does not contain any illegal characters such as "@" or ":", such as a commonly used rootname entry in DataFlex 2.3b: "@:menu".
3. Make sure that the rootname does not contain any illegal characters such as "@" or ":", such as a commonly used rootname entry in DataFlex 2.3b: "@:menu".


Data File Field Names
'''Data File Field Names'''


In order to remove invalid characters from File.Field definitions, you need to open the file using DFFile, the DataFlex File Definition Utility. Some commands, make_file for example, will not work properly with invalid characters in front of file.field names.
In order to remove invalid characters from ''File.Field'' definitions, you need to open the file using DFFile, the ''DataFlex File Definition Utility''. Some commands, ''make_file'' for example, will not work properly with invalid characters in front of file.field names.


Note: You can still use the "@" character in front of a data file's User Display Name to hide that data file from the user in DFQuery.
Note: You can still use the "@" character in front of a data file's User Display Name to hide that data file from the user in DFQuery.
Line 184: Line 190:
== Upgrading Source Code to DataFlex 3.2 ==
== Upgrading Source Code to DataFlex 3.2 ==


Properly written source code from prior revisions of DataFlex is fully compatible with revision 3.2 and should compile and operate without problem. The DataFlex 2.3 compiler and runtime were not as strict as the newer versions. In some cases, improper code was allowed to compile and/or run under DataFlex 2.3b, but will generate compiler or runtime errors when used with a newer revision of DataFlex. Data Access Corporation cannot warrant the validity of source code written by someone outside of DAC in every case.
Properly written source code from prior revisions of DataFlex is fully compatible with revision 3.2 and should compile and operate without problem. The DataFlex 2.3 compiler and runtime were not as strict as the newer versions. In some cases, improper code was allowed to compile and/or run under DataFlex 2.3b, but will generate compiler or runtime errors when used with a newer revision of DataFlex.


== Troubleshooting DataFlex 3.2 ==
== Troubleshooting DataFlex 3.2 ==
Line 220: Line 226:
Here are some batch file examples for easy switching between versions of DataFlex. These batch files will run only on DOS-based operating systems or in DOS sessions under Windows.
Here are some batch file examples for easy switching between versions of DataFlex. These batch files will run only on DOS-based operating systems or in DOS sessions under Windows.


Many programmers, as well as end users, run multiple versions of DataFlex and use batch files to switch from version to version. Here at DAC we are always switching among versions: 3.1d, 3.2, Visual DataFlex 8.1, Visual DataFlex 8.2, etc..
Many programmers, as well as end users, run multiple versions of DataFlex and use batch files to switch from version to version.  


Following are some batch file examples for switching among versions. You’ll want to place these batch files in a directory that is included in your  PATH environment variable (e.g. use a directory c:\batch to be included in your  PATH, to contain all batch files).
Following are some batch file examples for switching among versions. You’ll want to place these batch files in a directory that is included in your  PATH environment variable (e.g. use a directory c:\batch to be included in your  PATH, to contain all batch files).
Line 251: Line 257:


Note: The DFPROG environment variable is used by DataFlex revisions 2.3 and 3.01 to find the location of its executable files (i.e. dfrun.exe).
Note: The DFPROG environment variable is used by DataFlex revisions 2.3 and 3.01 to find the location of its executable files (i.e. dfrun.exe).
Note: Writing batch files and using environment variables are advanced operating system topics. If you want to learn more about these topics, you can consult your operating system manuals or the maker of your operating system. You can also go to your local bookstore and find hundreds of books on using operating systems like DOS, Unix and Windows and creating batch processes for these systems. These topics are NOT supported by Data Access Corporation.


== Creating Shortcuts for Running DataFlex on Windows ==
== Creating Shortcuts for Running DataFlex on Windows ==
Line 293: Line 297:
2. The Menu Program (menu.flx)
2. The Menu Program (menu.flx)


DataFlex 3.2 comes with a brand new, object-oriented,  CUA compliant menu program. This is the default menu that will run with DataFlex 3.2.
DataFlex 3.2 comes with an object-oriented,  [[#CUA]] compliant menu program. This is the default menu that will run with DataFlex 3.2.
If you wish to use a menu program that more closely resembles the 2.3b style menu program, you can compile menuold.src (\df32\src\source\menuold.src) and then either execute "dfrun menuold" to access this menu or rename menuold.flx to menu.flx to have this menu be used as the default.
If you wish to use a menu program that more closely resembles the 2.3b style menu program, you can compile menuold.src (\df32\src\source\menuold.src) and then either execute "dfrun menuold" to access this menu or rename menuold.flx to menu.flx to have this menu be used as the default.
Note: Do not compile and/or run the 2.3b menu.src in DataFlex 3.2. This will not work, which is why menuold.src was provided with DataFlex 3.2.
Note: Do not compile and/or run the 2.3b menu.src in DataFlex 3.2. This will not work, which is why menuold.src was provided with DataFlex 3.2.
Line 301: Line 305:
== Accelerator Keys (FlexKeys) ==
== Accelerator Keys (FlexKeys) ==


DataFlex 3.2 uses CUA compliant accelerator keys, such as F2 to Save, F8 for "find gt", Shift+F2 to delete, etc.. These keys are quite different from their 2.x predecessors, but it is useful for your end users to learn these keys, because many other applications share the same accelerator keys, making it easier to remember them in the long run. Nevertheless, in the short term, your end user may want to continue using the accelerator keys that they are used to.
DataFlex 3.2 uses [[#CUA]] compliant accelerator keys, such as F2 to Save, F8 for "find gt", Shift+F2 to delete, etc.. These keys are quite different from their 2.x predecessors, but it is useful for your end users to learn these keys, because many other applications share the same accelerator keys, making it easier to remember them in the long run. Nevertheless, in the short term, your end user may want to continue using the accelerator keys that they are used to.


For this purpose, we have provided a file that contains the accelerator key definitions as they were in DataFlex 2.3b (\df32\usr\df23ini.cfg) and a second file with the DataFlex 3.2 accelerator key definitions (\df32\usr\df32ini.cfg). You can add a line of code to any DataFlex 3.2 program to read either of these files:
For this purpose, we have provided a file that contains the accelerator key definitions as they were in DataFlex 2.3b (\df32\usr\df23ini.cfg) and a second file with the DataFlex 3.2 accelerator key definitions (\df32\usr\df32ini.cfg). You can add a line of code to any DataFlex 3.2 program to read either of these files:
Line 308: Line 312:
  read_dfini "df32ini.cfg" - program starts using definitions from DataFlex 3.2
  read_dfini "df32ini.cfg" - program starts using definitions from DataFlex 3.2


Note: If a program uses a dfini.cfg file and chains to another program, the second program will also use the settings defined in that dfini.cfg file.
'''Note:''' If a program uses a dfini.cfg file and chains to another program, the second program will also use the settings defined in that ''dfini.cfg'' file.


By default, the DataFlex 3.2 runtime does not use a dfini.cfg file, all the defaults are hardcoded into the runtime. However, if the runtime encounters a file called dfini.cfg along dfpath, or if a read_dfini statement is in a DataFlex program, it will use the definitions in that file.
By default, the DataFlex 3.2 runtime does not use a dfini.cfg file, all the defaults are hardcoded into the runtime. However, if the runtime encounters a file called ''dfini.cfg'' along dfpath, or if a read_dfini statement is in a DataFlex program, it will use the definitions in that file.


== Do's and Don'ts of Running DataFlex 3.2 and Prior Revisions Concurrently ==
== Do's and Don'ts of Running DataFlex 3.2 and Prior Revisions Concurrently ==
Line 340: Line 344:
There have been some changes in the way logical expressions are evaluated in DataFlex revisions 3.2:
There have been some changes in the way logical expressions are evaluated in DataFlex revisions 3.2:


The standard mathematical logical operators (<, >, >=, <>,etc.) can be used in addition to the DataFlex logical operators used in DataFlex 2.3b (LT, GT, GE,etc.), provided the expression is used in parentheses.
*The standard mathematical logical operators (<, >, >=, <>,etc.) can be used in addition to the DataFlex logical operators used in DataFlex 2.3b (LT, GT, GE,etc.), provided the expression is used in parentheses.
The Boolean logic operators AND and OR have been added.
*The Boolean logic operators AND and OR have been added.


The MIN and MAX operators have been added to replace the use of < and > for this purpose, since < and > are now used as logical operators. It is important to realize how this affects evaluation of program code:
*The MIN and MAX operators have been added to replace the use of < and > for this purpose, since < and > are now used as logical operators. It is important to realize how this affects evaluation of program code:
Let's use an example to illustrate this. Look at the following line of DataFlex code:
:Let's use an example to illustrate this. Look at the following line of DataFlex code:


<source lang="vdf">
<source lang="vdf">
Line 350: Line 354:
</source>
</source>


In DataFlex 2.3b, this line would evaluate to show "5".
:In DataFlex 2.3b, this line would evaluate to show "5".


In DataFlex 3.2, this line will evaluate to show "0" (meaning "False", since 4 is not greater than 5).
:In DataFlex 3.2, this line will evaluate to show "0" (meaning "False", since 4 is not greater than 5).


The corrected line of code for DataFlex 3.2 to evaluate as it did in DataFlex 2.3 would be:
:The corrected line of code for DataFlex 3.2 to evaluate as it did in DataFlex 2.3 would be:


<source lang="vdf">
<source lang="vdf">
Line 360: Line 364:
</source>
</source>


The mathematical operators can now be used on strings, making their function more intuitive and compatible with other programming environments. However, this will result in some expressions evaluating differently in DataFlex 3.x than they did in 2.3.
*The mathematical operators can now be used on strings, making their function more intuitive and compatible with other programming environments. However, this will result in some expressions evaluating differently in DataFlex 3.x than they did in 2.3.


Once again, let's look at an example to illustrate the differences. Consider the following lines of DataFlex code, and look at the results they will produce in DataFlex 2.3 and DataFlex 3.2:
:Once again, let's look at an example to illustrate the differences. Consider the following lines of DataFlex code, and look at the results they will produce in DataFlex 2.3 and DataFlex 3.2:


<source lang="vdf">
<source lang="vdf">
Line 371: Line 375:
</source>
</source>


Result:
 
Expression     DataFlex 2.3b DataFlex 3.2
:{| class="wikitable"
showln (A + B)     5           "32"
!colspan="1"|
showln (A * B)     6           "3 2"
!colspan="2"|'''Results'''
showln (A - B)     1           "32"
|-
|'''Expression'''
|'''DataFlex 2.3b'''
|'''DataFlex 3.2'''
|-
|showln (A + B)
|style="text-align:center;" | 5
|style="text-align:center;" | "32"
|-
|showln (A * B)
|style="text-align:center;" | 6
|style="text-align:center;" | "3 2"
|-
|showln (A - B)
|style="text-align:center;" | 1  
|style="text-align:center;" | "32"
|}
 


In DataFlex 2.3, addition of 2 string variables would result in the mathematical addition of the values in the 2 variables; in DataFlex 3.2, the 2 strings are concatenated instead.
In DataFlex 2.3, addition of 2 string variables would result in the mathematical addition of the values in the 2 variables; in DataFlex 3.2, the 2 strings are concatenated instead.
Line 381: Line 402:
== Compiler Errors ==
== Compiler Errors ==


In DataFlex 3.2, a compiled DataFlex program (a .flx file) will only be created if your source code compilation does not generate any errors.
* In DataFlex 3.2, a compiled DataFlex program (a .flx file) will only be created if your source code compilation does not generate any errors.
The DataFlex 2.3 compiler was very forgiving; it allowed numerous types of incorrect syntax without generating error messages. The newer compiler version has been improved and will often catch errors the 2.3b compiler did not.
* The DataFlex 2.3 compiler was very forgiving; it allowed numerous types of incorrect syntax without generating error messages. The newer compiler version has been improved and will often catch errors the 2.3b compiler did not.
For example, the "Check=" entry option allowed checking for ascii characters without enclosing them in quotes. The DataFlex 3.2 compiler creates an error in this case.
: For example, the "Check=" entry option allowed checking for ascii characters without enclosing them in quotes. The DataFlex 3.2 compiler creates an error in this case.


Incorrect syntax (but not caught by 2.3 compiler):
: Incorrect syntax (but not caught by 2.3 compiler):
     Accept FILE.FIELD {Check=1|2|3}
     Accept FILE.FIELD {Check=1|2|3}


Correct syntax:
: Correct syntax:
     Accept FILE.FIELD {Check="1|2|3"}
     Accept FILE.FIELD {Check="1|2|3"}


The -x23 Compiler Flag
'''The -x23 Compiler Flag'''


For backward compatibility purposes, DAC provided the compiler flag -x23 (i.e. "dfcomp source.src -x23") for compiling programs as if they had been compiled in 2.3b. This flag was provided until revision 3.04 to allow time for developers to bring their existing programs up to date. Most of the changes in DataFlex that are outlined in this paper and affect existing 2.3 DataFlex code were made to DataFlex with revision 3.0, in about 1990. At some point, a choice must be made between backward compatibility and progress, and as of revision 3.05, the -x23 flag is no longer supported, so you must make the appropriate source code changes to existing DataFlex 2.3 programs.
For backward compatibility purposes, the compiler flag -x23 is provided (i.e. "dfcomp source.src -x23") for compiling programs as if they had been compiled in 2.3b. This flag was provided until revision 3.04 to allow time for developers to bring their existing programs up to date. Most of the changes in DataFlex that are outlined in this article and affect existing 2.3 DataFlex code were made to DataFlex with revision 3.0, in about 1990. At some point, a choice must be made between backward compatibility and progress, and as of revision 3.05, the -x23 flag is no longer supported, so you must make the appropriate source code changes to existing DataFlex 2.3 programs.


== Runtime Errors ==
== Runtime Errors ==


Error 4155 "Edit Requires Reread or Lock During Save"
===Error 4155 "Edit Requires Reread or Lock During Save"===
 
DataFlex 3.2 and Visual DataFlex are much stricter about enforcing proper rules, for multiuser coding, database design and many other areas than prior revisions of DataFlex.
DataFlex 3.2 and Visual DataFlex are much stricter about enforcing proper rules, for multiuser coding, database design and many other areas than prior revisions of DataFlex.


Line 410: Line 432:
You must use multiuser licenses for all versions of DataFlex that share data files, because file locking is suppressed in single-user runtimes.
You must use multiuser licenses for all versions of DataFlex that share data files, because file locking is suppressed in single-user runtimes.


=== How to write correct code for Multiuser Coding Examples: ===
====How to write correct code for Multiuser Coding Examples:====


Creating a new record:
'''Creating a new record:'''


<source lang="vdf">
<source lang="vdf">
Line 424: Line 446:
Note: In many instances a reread command instead of a lock command will work with a new record. In this case, you MUST use the reread command without any files listed as parameters. If you try to reread a specific file (e.g. reread CUSTOMER) which does not have an active record, you will get an error "status <<25>> record not found". There is a slight penalty (time) for using the reread command without any parameters, which is that all open files with an active record that are not flagged read-only will be reread.
Note: In many instances a reread command instead of a lock command will work with a new record. In this case, you MUST use the reread command without any files listed as parameters. If you try to reread a specific file (e.g. reread CUSTOMER) which does not have an active record, you will get an error "status <<25>> record not found". There is a slight penalty (time) for using the reread command without any parameters, which is that all open files with an active record that are not flagged read-only will be reread.


Editing an existing record:
'''Editing an existing record:'''
<source lang="vdf">
<source lang="vdf">
reread FILE
reread FILE
Line 432: Line 454:
</source>
</source>


Copying data from an existing record in FILE to a new record in NEWFILE:
'''Copying data from an existing record in FILE to a new record in NEWFILE:'''
<source lang="vdf">
<source lang="vdf">
reread FILE
reread FILE
Line 450: Line 472:
You can find additional information on multiuser coding in the white paper Transactions in DataFlex 3.1.
You can find additional information on multiuser coding in the white paper Transactions in DataFlex 3.1.


Error 4098 "Bad Relationship"
===Error 4098 "Bad Relationship"===
We have received some reports of encountering this error from developers upgrading to DataFlex 3.2 or Visual DataFlex. This error will occur at runtime whenever a relationship is found between 2 database fields that are not of exactly the same type and length. Overlap fields are the only exception to this rule; they may relate to either other overlap fields or ASCII fields of the same length.
Error encountered by developers upgrading to DataFlex 3.2 or Visual DataFlex. This error will occur at runtime whenever a relationship is found between 2 database fields that are not of exactly the same type and length. Overlap fields are the only exception to this rule; they may relate to either other overlap fields or ASCII fields of the same length.


Note: Many developers using 2.3b used record number relationships, where a field in one database file is related to the RECNUM field in another file. When upgrading to 3.2, suddenly this message appears. This is usually because the "relating from" field was defined as Numeric 6.0, instead of Numeric 8.0, which is the type and length of the RECNUM field.
Note: Many developers using 2.3b used record number relationships, where a field in one database file is related to the RECNUM field in another file. When upgrading to 3.2, suddenly this message appears. This is usually because the "relating from" field was defined as Numeric 6.0, instead of Numeric 8.0, which is the type and length of the RECNUM field.


Error 4141 "Data set files must support transaction"
===Error 4141 "Data set files must support transaction"===
If you are using Data_Sets or DataDictionaries in your programs, you must set the affected data files' transaction type to either Client Atomic or Server Atomic, you cannot leave it as None.
If you are using Data_Sets or DataDictionaries in your programs, you must set the affected data files' transaction type to either Client Atomic or Server Atomic, you cannot leave it as None.


Zerofile command
===Zerofile command===
Older revisions of DataFlex allowed execution of the zerofile command while other users had access to the data file. This is no longer the case. For data integrity reasons, starting with DataFlex 3.2, a data file must be opened exclusively to zerofile it. Otherwise, the error message status 4177 "File access violation, file may be in use filename"  will be triggered.
Older revisions of DataFlex allowed execution of the zerofile command while other users had access to the data file. This is no longer the case. For data integrity reasons, starting with DataFlex 3.2, a data file must be opened exclusively to zerofile it. Otherwise, the error message status 4177 "File access violation, file may be in use filename"  will be triggered.


Modified Runtimes
===Modified Runtimes===
If you are using a modified DataFlex runtime, check with the provider of that runtime in regards to any of the issues discussed in this paper.
If you are using a modified DataFlex runtime, check with the provider of that runtime in regards to any of the issues discussed in this paper.


Graphics Commands
===Graphics Commands===


Graphics commands for character-mode DataFlex are no longer supported in any revision newer than 3.01b, so any such commands will have to be removed from the source code of your program(s).
Graphics commands for character-mode DataFlex are no longer supported in any revision newer than 3.01b, so any such commands will have to be removed from the source code of your program(s).
Line 472: Line 494:
All of the following utilities are documented in the DataFlex 3.2 User's Guide.
All of the following utilities are documented in the DataFlex 3.2 User's Guide.


DFAdmin
===DFAdmin===


DFAdmin is a superset of various other utilities, including, most notably, DFMaint and DFSort. Here are some of its features:
DFAdmin is a superset of various other utilities, including, most notably, DFMaint and DFSort. Here are some of its features:


Editing of filelist entries, even for multiple filelists, not just the current one (like DFMaint allows).
*Editing of filelist entries, even for multiple filelists, not just the current one (like DFMaint allows).
 
*It allows for mass-manipulation of data files unlike other utilities, like DFFile, which can only manipulate one file at a time.
It allows for mass-manipulation of data files unlike other utilities, like DFFile, which can only manipulate one file at a time.
*Accepts command line parameters for all filelist and index manipulation.
*Can convert datafiles to and from other database formats (i.e. Btrieve, DB2, ODBC) using DataFlex loadable drivers.


Accepts command line parameters for all filelist and index manipulation.
===DFConfig===
 
Can convert datafiles to and from other database formats (i.e. Btrieve, DB2, ODBC) using DataFlex loadable drivers.
 
DFConfig


The DFConfig utility now provides much of the functionality provided by DFSetup in DataFlex 2.X, and some new features as well.
The DFConfig utility now provides much of the functionality provided by DFSetup in DataFlex 2.X, and some new features as well.
Line 490: Line 509:
Some of the features of DFConfig are:
Some of the features of DFConfig are:


Accelerator key definition
*Accelerator key definition
*Color settings
*Appearance settings for things like currency
*Date and number format settings
*Other miscellaneous settings


Color settings
===DFMaint===
 
Appearance settings for things like currency
 
Date and number format settings
 
Other miscellaneous settings
 
DFMaint


One of the best new features for developers in DataFlex 3.2 is in the DFMaint utility: The ability to edit the filelist entries! Here you can add, remove, and edit individual entries in your current filelist.cfg.
One of the best new features for developers in DataFlex 3.2 is in the DFMaint utility: The ability to edit the filelist entries! Here you can add, remove, and edit individual entries in your current filelist.cfg.
Line 508: Line 523:
The DataFlex maintenance utility provides access to the following:
The DataFlex maintenance utility provides access to the following:


Indexing utility
*Indexing utility
 
*Cleanup utility
Cleanup utility
*Editing of filelist entries
 
Editing of filelist entries


DFQuery
===DFQuery===


In DataFlex 3.2, the DFQuery utility has been replaced with DFQ, a DataFlex program with the same functionality as DFQuery. Since DFQ is a DataFlex program, it can load database drivers using any available Connectivity Kit for DataFlex.
In DataFlex 3.2, the DFQuery utility has been replaced with DFQ, a DataFlex program with the same functionality as DFQuery. Since DFQ is a DataFlex program, it can load database drivers using any available Connectivity Kit for DataFlex.


DFSetup
===DFSetup===


As of DataFlex revision 3.0, the DFSetup utility only validates and registers serial number, registration name and registration code into the binary file termlist.cfg. All other functionality DFSetup had in DataFlex 2.X has been moved to the DFConfig utility.
As of DataFlex revision 3.0, the DFSetup utility only validates and registers serial number, registration name and registration code into the binary file termlist.cfg. All other functionality DFSetup had in DataFlex 2.X has been moved to the DFConfig utility.


DFSort - Index Utility
===DFSort - Index Utility===


In DataFlex 3.2, dfsort.exe was introduced as a new utility for reindexing. Dfindex was dropped from the product entirely starting with revision 3.1.
In DataFlex 3.2, dfsort.exe was introduced as a new utility for reindexing. Dfindex was dropped from the product entirely starting with revision 3.1.
Line 532: Line 545:
Now a brief discussion of Year 2000 issues. You can find additional information on this issue in the following:
Now a brief discussion of Year 2000 issues. You can find additional information on this issue in the following:


DataFlex and the Year 2000, N. Joe Potts, Data Access Corporation, December 2, 1997.
*DataFlex and the Year 2000, N. Joe Potts, Data Access Corporation, December 2, 1997.
Installation & Environment Guide for all Y2K Enhanced revisions of DataFlex.
*Installation & Environment Guide for all Y2K Enhanced revisions of DataFlex.
Online Documentation for Visual DataFlex (all revisions of VDF).
*Online Documentation for Visual DataFlex (all revisions of VDF).
 
DataFlex has always been Y2K (Year 2000) capable, meaning that developers have always been able to write Y2K-compliant applications. In prior revisions, such as 2.3b, it was usually up to the developer to ensure data was displayed and saved with 4-digit years, but DataFlex already had the capability to store dates with 4-digit years. This meant creating on-screen and report date images with enough room for 4-digit years, and adding 693975 (the integer equivalent of 01/01/1900) to a 2-digit year, wherever dates were used.
DataFlex has always been Y2K (Year 2000) capable, meaning that developers have always been able to write Y2K-compliant applications. In prior revisions, such as 2.3b, it was usually up to the developer to ensure data was displayed and saved with 4-digit years, but DataFlex already had the capability to store dates with 4-digit years. This meant creating on-screen and report date images with enough room for 4-digit years, and adding 693975 (the integer equivalent of 01/01/1900) to a 2-digit year, wherever dates were used.


In newer revisions of DataFlex (Visual DataFlex, DataFlex 3.2), we have provided an easier method, both for creating new applications that are Y2K compliant and for updating existing, noncompliant applications to full Y2K compliance.
In newer revisions of DataFlex (Visual DataFlex, DataFlex 3.2), there is an easier method, both for creating new applications that are Y2K compliant and for updating existing, noncompliant applications to full Y2K compliance.


DataFlex has always had the capability to store dates with 4-digit years, so a properly written DataFlex application in any version of DataFlex will be Year-2000 (Y2K) compliant. However, in DataFlex 3.2 (caution: revisions of DataFlex prior to 3.1c do not have the Y2K-Enhancements), we have implemented additional support for easily making your applications Y2K compliant.
DataFlex has always had the capability to store dates with 4-digit years, so a properly written DataFlex application in any version of DataFlex will be Year-2000 (Y2K) compliant. However, in DataFlex 3.2 (caution: revisions of DataFlex prior to 3.1c do not have the Y2K-Enhancements), additional support has been implemented for easily making your applications Y2K compliant.


There are numerous additional enhancements and bug fixes to DataFlex 3.2. Please consult the DataFlex 3.2 Readme file for more details on these enhancements and fixes.
There are numerous additional enhancements and bug fixes to DataFlex 3.2. Please consult the DataFlex 3.2 Readme file for more details on these enhancements and fixes.


Y2K-Enhanced Features
===Y2K-Enhanced Features===


There are common methods used in all of these Y2K-Enhanced revisions:
There are common methods used in all of these Y2K-Enhanced revisions:


Epoch_Value
'''Epoch_Value'''
 
This is a value between 0 and 99 which determines a "cutoff year", which determines at which year 2-digit entered year becomes a 19XX year or a 20XX year.
This is a value between 0 and 99 which determines a "cutoff year", which determines at which year 2-digit entered year becomes a 19XX year or a 20XX year.


For example, if the Epoch_Value is set to 30 (the default):
For example, if the Epoch_Value is set to 30 (the default):


If a user enters "010198" into a date window, it will be converted to "01/01/1998".
*If a user enters "010198" into a date window, it will be converted to "01/01/1998".
If a user enters "010102" into a date window, it will be converted to "01/01/2002".
*If a user enters "010102" into a date window, it will be converted to "01/01/2002".
SysDate4_State
 
'''SysDate4_State'''
 
When turned on, the runtime returns a date with a 4-digit year wherever the sysdate command is used.
When turned on, the runtime returns a date with a 4-digit year wherever the sysdate command is used.


Date4_State
'''Date4_State'''
 
When turned on, this state ensures that whenever a date is displayed or stored, it is automatically converted to a date with a 4-digit year.
When turned on, this state ensures that whenever a date is displayed or stored, it is automatically converted to a date with a 4-digit year.


In character-mode revisions, in date windows with only 2 digits for the date, the LAST 2 digits are displayed:
In character-mode revisions, in date windows with only 2 digits for the date, the LAST 2 digits are displayed:
For example: "09/17/2002" is displayed as "09/17/02"


Conv2000 Utility
*For example: "09/17/2002" is displayed as "09/17/02"
 
===Conv2000 Utility===
This is a DataFlex program that changes all dates in existing data files from 2-digit year dates to 4-digit year dates. This utility does not change the format of any date fields or data files containing date fields, it only changes the content (value) of the date field. The utility can loop through all files on the current filelist or allow you to select a file to convert. Conv2000 is written in DataFlex and all source code for it is provided.
This is a DataFlex program that changes all dates in existing data files from 2-digit year dates to 4-digit year dates. This utility does not change the format of any date fields or data files containing date fields, it only changes the content (value) of the date field. The utility can loop through all files on the current filelist or allow you to select a file to convert. Conv2000 is written in DataFlex and all source code for it is provided.


Implementation of Y2K-Enhanced Features
===Implementation of Y2K-Enhanced Features===
 
'''DataFlex 3.2'''


DataFlex 3.2
In DataFlex 3.2, there is a file called y2k.pkg, which contains the set_Date_Attribute command and default settings for Date4_State (dfTrue), SysDate4_State (dfTrue) and Epoch_Value (30).
In DataFlex 3.2, DAC has provided a file called y2k.pkg, which contains the set_Date_Attribute command and default settings for Date4_State (dfTrue), SysDate4_State (dfTrue) and Epoch_Value (30).


To make an existing DataFlex 2.3b program Y2K enhanced, simply add this line to the beginning of your program and recompile the program under DataFlex 3.2:
To make an existing DataFlex 2.3b program Y2K enhanced, simply add this line to the beginning of your program and recompile the program under DataFlex 3.2:


<source lang="vdf">
Use y2k.pkg
Use y2k.pkg
</source>


TIP: In DataFlex 2.3b, all images had to be at the very top of the program. In DataFlex 3.2, this is no longer necessary, so you can place code in between images and even before any images at the top of the program. If you have a lot of programs (source files) to which you need to add the "Use y2k.pkg" statement, you could write a small DataFlex program to do this for you. See the DAW Technical Knowledge Base for more information.
'''TIP:''' In DataFlex 2.3b, all images had to be at the very top of the program. In DataFlex 3.2, this is no longer necessary, so you can place code in between images and even before any images at the top of the program. If you have a lot of programs (source files) to which you need to add the "Use y2k.pkg" statement, you could write a small DataFlex program to do this for you. See the DAW Technical Knowledge Base for more information.


A Brief Overview of Y2K.pkg
'''A Brief Overview of Y2K.pkg'''


There are only 3 lines of code in y2k.pkg, which turn on all the automatic Year-2000 enhancements in DataFlex. Here is a brief look at each of the 3 lines of code in y2k.pkg:
There are only 3 lines of code in y2k.pkg, which turn on all the automatic Year-2000 enhancements in DataFlex. Here is a brief look at each of the 3 lines of code in y2k.pkg:


<source lang="vdf">
Set_Date_Attribute Sysdate4_State to DFTrue
Set_Date_Attribute Sysdate4_State to DFTrue
</source>


This line of code toggles the runtime to execute sysdate4 instead of sysdate wherever sysdate is used in a program. This returns the computer's system date with a 4-digit year.
:This line of code toggles the runtime to execute sysdate4 instead of sysdate wherever sysdate is used in a program. This returns the computer's system date with a 4-digit year.


<source lang="vdf">
Set_Date_Attribute Date4_State to DFTrue
Set_Date_Attribute Date4_State to DFTrue
</source>


This line toggles the runtime to automatically convert dates to 4-digit years whenever a date is moved to a data variable or a date field.
:This line toggles the runtime to automatically convert dates to 4-digit years whenever a date is moved to a data variable or a date field.


<source lang="vdf">
Set_Date_Attribute Epoch_Value to 30
Set_Date_Attribute Epoch_Value to 30
</source>


This line of code tells the runtime the cutoff year that determines whether a date is converted to a 19XX year or a 20XX year during automatic conversion.
:This line of code tells the runtime the cutoff year that determines whether a date is converted to a 19XX year or a 20XX year during automatic conversion.


If you want to use a different cutoff year (Epoch value) from the default of 30, you can change the value here, then recompile all programs that contain "Use y2k.pkg". If you want a specific project to have a different cutoff year, you can copy y2k.pkg to the source code area for that project, then edit the Epoch_Value in that copy of y2k.pkg and recompile all programs containing "Use Y2K.pkg" for that project.
:If you want to use a different cutoff year (Epoch value) from the default of 30, you can change the value here, then recompile all programs that contain "Use y2k.pkg". If you want a specific project to have a different cutoff year, you can copy y2k.pkg to the source code area for that project, then edit the Epoch_Value in that copy of y2k.pkg and recompile all programs containing "Use Y2K.pkg" for that project.


== Separating Applications and Runtimes ==
== Separating Applications and Runtimes ==
Line 599: Line 627:
DataFlex 2.3 was designed in simpler days of computing. Hard disks were smaller, less memory was available and applications were generally smaller and did fewer things. Developers usually had relatively few development tools (and revisions thereof) installed on their PCs. Those times have changed. Today, it seems one can never have enough hard disk space or RAM and most applications do a gazillion things, whether they are needed or not.
DataFlex 2.3 was designed in simpler days of computing. Hard disks were smaller, less memory was available and applications were generally smaller and did fewer things. Developers usually had relatively few development tools (and revisions thereof) installed on their PCs. Those times have changed. Today, it seems one can never have enough hard disk space or RAM and most applications do a gazillion things, whether they are needed or not.


For programmers things have changed as well. It is common for application designers to develop with many different tools, even for a single application. We often have multiple versions of the same tools installed, if not for development, then to support customers who use these different tools and versions.
For programmers things have changed as well. It is common for application designers to develop with many different tools, even for a single application.  


In DataFlex 2.3b, many developers kept the runtime files in the same directory as the application files (i.e. data and .flx files). In order to successfully upgrade to DataFlex 3.2, or to run the two (or more) versions of DataFlex simultaneously, these files need to be separated. Runtime files from the two versions will interfere with each other.
In DataFlex 2.3b, many developers kept the runtime files in the same directory as the application files (i.e. data and .flx files). In order to successfully upgrade to DataFlex 3.2, or to run the two (or more) versions of DataFlex simultaneously, these files need to be separated. Runtime files from the two versions will interfere with each other.


The Separation Process (a Step-by-Step Outline)
'''The Separation Process''' (a Step-by-Step Outline)


The following steps will show you how to: Divide the source code and data files from your existing installation into separate areas. This makes maintenance easier and gets you ready to easily upgrade to DataFlex 3.2, as well as Visual DataFlex.
The following steps will show you how to: Divide the source code and data files from your existing installation into separate areas. This makes maintenance easier and gets you ready to easily upgrade to DataFlex 3.2, as well as Visual DataFlex.
Keep one copy of the source code in the 2.3b area and another copy in the 3.2 area.
 
This allows you to edit either version of the source code without affecting the other.
*Keep one copy of the source code in the 2.3b area and another copy in the 3.2 area. This allows you to edit either version of the source code without affecting the other.
Create a shared data directory.
*Create a shared data directory.
You can access your data files using programs compiled under DataFlex 2.3b and DataFlex 3.2 at the same time. (This works for other revisions, such as 3.1, as well.)
*You can access your data files using programs compiled under DataFlex 2.3b and DataFlex 3.2 at the same time. (This works for other revisions, such as 3.1, as well.)
How to run DataFlex 3.2 and other (prior) revisions concurrently.
*How to run DataFlex 3.2 and other (prior) revisions concurrently.
 
You can keep existing programs running in an older revision of DataFlex until you have all components working in DataFlex 3.2.
You can keep existing programs running in an older revision of DataFlex until you have all components working in DataFlex 3.2.
1. Create separate directories for the runtime files and application files, and separate data and source code in the process.


For the remainder of this paper we will assume that the directory where your 2.3b license resides is c:\df23 – you can substitute your actual installed directory name and drive letter for c:\df23.
'''1. Create separate directories for the runtime files and application files, and separate data and source code in the process.'''


c:\df23 - original 2.3b directory
:For the remainder of this paper we will assume that the directory where your 2.3b license resides is c:\df23 – you can substitute your actual installed directory name and drive letter for c:\df23.
              - 2.3 runtime files will remain here
              - a copy of the source code files will remain here to be used with 2.3


c:\app - directory for your application files
: c:\df23 - original 2.3b directory
                \data - data files to be shared between revisions 2.3 and 3.2 (subdirectory of \app)
::- 2.3 runtime files will remain here
                \src - source code files to be used with 3.2 (subdirectory of \app)
::- a copy of the source code files will remain here to be used with 2.3


Separating your existing 2.3b directory this way will give you numerous operating options:
: c:\app - directory for your application files
::\data - data files to be shared between revisions 2.3 and 3.2 (subdirectory of \app)
::\src - source code files to be used with 3.2 (subdirectory of \app)


Concurrently run DataFlex 2.3b and 3.2 (or just 3.2)
:Separating your existing 2.3b directory this way will give you numerous operating options:
Have an existing directory structure to easily upgrade to Visual DataFlex
A. Files to be moved into c:\app\data directory:


all data files for your application (*.dat, *.k*, *.tag, *.fd, *.def)
::1. Concurrently run DataFlex 2.3b and 3.2 (or just 3.2)
filelist.cfg
::2. Have an existing directory structure to easily upgrade to Visual DataFlex
B. Files to be copied into c:\app\src directory:


One copy of the source code can remain in \df23 for use with (and to keep up) currently running 2.3b applications, and one copy will go into this directory for use with the new 3.2 version.
:::A. Files to be moved into c:\app\data directory:


all source code files (*.frm, *.src, *.inc, *.rpt, )
:::*all data files for your application (*.dat, *.k*, *.tag, *.fd, *.def)
C. Files to remain in c:\df23 (runtime) directory:
:::*filelist.cfg


the most important are the executable files (*.exe) and termlist.cfg
:::B. Files to be copied into c:\app\src directory:
see Appendix A for a complete list of files that are installed by a DataFlex 2.3b Development License – these are the files that should remain in the c:\df23 directory
2. Install 3.2 into a separate directory and install your DataFlex 3.2 registration code


For the remainder of this paper we will assume that the directory where your 3.2 license resides is c:\df32 – you can substitute your actual installed directory name and drive letter for c:\df32.
::::One copy of the source code can remain in \df23 for use with (and to keep up) currently running 2.3b applications, and one copy will go into this directory for use with the new 3.2 version.


Note:
:::*all source code files (*.frm, *.src, *.inc, *.rpt, …)


DOS/Windows: Remember to execute the c:\df32\usr\setpath.bat batch file before running DFSetup.exe to install your registration code.
:::C. Files to remain in c:\df23 (runtime) directory:
Linux/Unix: Remember to execute the /usr/local/df32/usr/setpath script before running dfsetup to install your registration code.
3. Concurrently Running DataFlex 2.3b and 3.2


A. Running DataFlex 3.2
:::*the most important are the executable files (*.exe) and termlist.cfg
:::*see Appendix A for a complete list of files that are installed by a DataFlex 2.3b Development License – these are the files that should remain in the c:\df23 directory


1. Edit the c:\df32\usr\dfenv.cfg file:
'''2. Install 3.2 into a separate directory and install your DataFlex 3.2 registration code'''


Change the DFPATH= statement to include the c:\app\data directory
:For the remainder of this article we will assume that the directory where your 3.2 license resides is c:\df32 – you can substitute your actual installed directory name and drive letter for c:\df32.


Before:
:'''Note:'''


dfpath=.;c:\df32\usr;c:\df32\usr\help;c:\df32\lib;c:\df32\bin;
*DOS/Windows: Remember to execute the c:\df32\usr\setpath.bat batch file before running DFSetup.exe to install your registration code.
c:\df32\src\pkg;c:\df32\usr\examples\expense;
*Linux/Unix: Remember to execute the /usr/local/df32/usr/setpath script before running dfsetup to install your registration code.
c:\df32\usr\examples\dar;c:\df32\usr\examples\ordentry;
c:\df32\usr\examples\big;c:\df32\usr\examples\report;
c:\df32\usr\examples\data;


After:
'''3. Concurrently Running DataFlex 2.3b and 3.2'''


dfpath=.;c:\app\data;c:\df32\usr;c:\df32\usr\help;c:\df32\lib;
:A. Running DataFlex 3.2
c:\df32\bin;c:\df32\src\pkg;c:\df32\usr\examples\expense;
c:\df32\usr\examples\dar;c:\df32\usr\examples\ordentry;
c:\df32\usr\examples\big;c:\df32\usr\examples\report;
c:\df32\usr\examples\data;


Note: the DFPath statements above may appear different depending on the software you use to view or print this document, but each DFPath statement is a single continuous statement.
::1. Edit the c:\df32\usr\dfenv.cfg file:


2. Switch to c:\app\src directory
::Change the DFPATH= statement to include the c:\app\data directory
3. Execute c:\df32\usr\setpath.bat
4. Run DataFlex (dfrun programname, dfcomp, dfquery, etc.)


Note: You may want to use different dfenv.cfg files for different applications so that you can place numerous application specific environment variables into each file.
::Before:


B. Running DataFlex 2.3b
:::dfpath=.;c:\df32\usr;c:\df32\usr\help;c:\df32\lib;c:\df32\bin;</br>c:\df32\src\pkg;c:\df32\usr\examples\expense;</br>c:\df32\usr\examples\dar;c:\df32\usr\examples\ordentry;</br>c:\df32\usr\examples\big;c:\df32\usr\examples\report;</br>c:\df32\usr\examples\data;


Switch to c:\df23 directory
Set the DFPATH environment variable:
set DFPATH=.;c:\app\data
Make sure c:\df23 is in your PATH environment variable
Run DataFlex (dfrun ProgramName, dfcomp, dfquery, etc.)


== Moving on to Visual DataFlex ==
::After:


Now that Windows is the world's most prevalent operating system, the next step for many DataFlex programmers is moving on to Windows programming. When DataFlex 2.3 was released in 1987, the auto-design facility was so easy to use to create database applications that it was years ahead of the competition. With Visual DataFlex you can experience that feeling again in Windows. Visual DataFlex is a great environment for designing Windows applications and allows you to utilize your existing DataFlex knowledge.
:::dfpath='''.;c:\app\data;'''c:\df32\usr;c:\df32\usr\help;c:\df32\lib;</br>c:\df32\bin;c:\df32\src\pkg;c:\df32\usr\examples\expense;</br>c:\df32\usr\examples\dar;c:\df32\usr\examples\ordentry;</br>c:\df32\usr\examples\big;c:\df32\usr\examples\report;</br>c:\df32\usr\examples\data;


Data files can be shared among DataFlex 2.3b, 3.2 and Visual DataFlex, so your customers can continue to run their existing character-mode applications while you incrementally upgrade them to Visual DataFlex. User interface components, such as data entry screens (views) must be redesigned in VDF using Windows GUI object classes. The Visual DataFlex tools, such as the Integrated Development Environment (IDE) and Database Builder, make writing Windows applications quite enjoyable.
::'''Note:''' the DFPath statements above may appear different depending on the software you use to view or print this document, but each DFPath statement is a single continuous statement.


Some parts of your character-mode DataFlex (2.3b or 3.2) source code can be reused (i.e. non-interfaced batch processes such as reports). You will be able to simply cut and paste many parts of your existing programming logic into your VDF applications.
::2. Switch to c:\app\src directory
::3. Execute c:\df32\usr\setpath.bat
::4. Run DataFlex (dfrun programname, dfcomp, dfquery, etc.)


Visual DataFlex, as well as the DataFlex 3.2 console-mode runtime, has the ability to load Windows drivers, such as the Pervasive.SQL Connectivity Kit (which provides an easy yet powerful client-server solution), ODBC drivers and native drivers for other databases such as DB2 and Oracle. You'll never again have to turn down a project because a prospective client is using DB2 and you do not have time to learn a new programming environment.
::'''Note:''' You may want to use different dfenv.cfg files for different applications so that you can place numerous application specific environment variables into each file.


For more information on upgrading to Visual DataFlex, see John Tuohy's white paper Migrating to Windows with Visual DataFlex.
:B. Running DataFlex 2.3b
 
#Switch to c:\df23 directory
#Set the DFPATH environment variable - '''set DFPATH=.;c:\app\data'''
#Make sure c:\df23 is in your PATH environment variable
#Run DataFlex (dfrun ProgramName, dfcomp, dfquery, etc.)


== Appendix A: Directory Listing of a DataFlex 2.3b Development License ==
== Appendix A: Directory Listing of a DataFlex 2.3b Development License ==
Line 742: Line 757:
== Glossary ==
== Glossary ==


CUA - Common User Access, part of IBM's  SAA
===CUA===
- Common User Access - Part of IBM's  SAA.


SAA - Systems Application Architecture - a series of interfaces, conventions and protocols which provide a framework for consistent application development and execution
===SAA ===
(Source: DataFlex 3.1 User's Guide, page 241.; DataFlex 3.1 UIMS Handbook)
- Systems Application Architecture - A series of interfaces, conventions and protocols which provide a framework for consistent application development and execution
(Source: DataFlex 3.1 User's Guide, page 241.; DataFlex 3.1 UIMS Handbook)====


== Additional Reading ==
== Additional Reading ==


You may want to check for an updated version of this white paper on our Web site from time to time. Many of our White Papers are updated as information changes. For those papers, the Last Edited date is always at the top of the paper.
You may want to check for an updated version of this white paper on our Web site from time to time. Many of our White Papers are updated as information changes. For those papers, the Last Edited date is always at the top of the paper.
Visit the Data Access Worldwide Support Home page for information about all of our support offerings, including free support offerings, such as the Technical Knowledge Base, White Papers and Peer Support Newsgroups: http://www.dataaccess.com/support.
 
Transformation - Converting DataFlex 2.3b Applications to Revision 3.0, Doug Goldner, Data Access Corporation, 1992, 168 pages. Available from Data Access Corporation or your local distributor.
Visit the '''Data Access Support Forums''': https://support.dataaccess.com/.
Migrating to Windows with Visual DataFlex, White Paper, John J. Tuohy, Data Access Corporation, June 6, 1997, Location: http://www.dataaccess.com/WhitePapers.
 
DataFlex and the Year 2000, White Paper, N. Joe Potts, Data Access Corporation, December 2, 1997, Location: http://www.dataaccess.com/WhitePapers.
'''Transformation - Converting DataFlex 2.3b Applications to Revision 3.0''', Doug Goldner, Data Access Corporation, 1992, 168 pages. Available from Data Access Corporation or your local distributor.
DataFlex and DLLs, White Paper, Application Engineering Group, Data Access Corporation, April 25, 1996, Location: http://www.dataaccess.com/WhitePapers.
 
Data Definition in Visual DataFlex, White Paper, Data Access Nederland, December 17, 1998, Location: http://www.dataaccess.com/WhitePapers.
'''Migrating to Windows with Visual DataFlex''', White Paper, John J. Tuohy, Data Access Corporation, June 6, 1997, Location: http://www.dataaccess.com/WhitePapers.
Transactions in DataFlex 3.1, White Paper, Application Engineering Group, Data Access Corporation, April 25, 1996, Location:
 
DataFlex 3.2 Installation & Environment Guide, DataFlex 3.2 CD, Data Access Corporation.
'''DataFlex and the Year 2000''', White Paper, N. Joe Potts, Data Access Corporation, December 2, 1997, Location: http://www.dataaccess.com/WhitePapers.
Online Documentation for Visual DataFlex (all revisions of VDF).
 
Windows User's Guide to DOS : Using the Command Line in Windows 95/98, Carolyn Z. Gillay & Bette A. Peat, September 1998, Franklin Beedle & Assoc; ISBN: 1887902422.
'''DataFlex and DLLs''' White Paper, Application Engineering Group, Data Access Corporation, April 25, 1996, Location: http://www.dataaccess.com/WhitePapers.
DFConver utility, Location: ftp://ftp.dataaccess.com/pub/products/dataflex/tools.
 
'''Data Definition in Visual DataFlex''', White Paper, Data Access Nederland, December 17, 1998, Location: http://www.dataaccess.com/WhitePapers.
 
'''Transactions in DataFlex 3.1''', White Paper, Application Engineering Group, Data Access Corporation, April 25, 1996, Location: 3.2 Installation & Environment Guide, DataFlex 3.2 CD, Data Access Corporation.
 
'''Online Documentation for DataFlex''': https://docs.dataaccess.com/
 
'''Windows User's Guide to DOS : Using the Command Line in Windows 95/98''', Carolyn Z. Gillay & Bette A. Peat, September 1998, Franklin Beedle & Assoc; ISBN: 1887902422.
 
'''DFConver utility''', Location: ftp://ftp.dataaccess.com/pub/products/dataflex/tools.
 
Note: There is a lot of useful information in all of the DataFlex documentation. Some of the most useful files for the topic of this paper are in the electronic documentation files that can be read with the Adobe Acrobat reader.
Note: There is a lot of useful information in all of the DataFlex documentation. Some of the most useful files for the topic of this paper are in the electronic documentation files that can be read with the Adobe Acrobat reader.


'''The Data Access Knowledge Base''': https://www.dataaccess.com/Resources/Knowledge-Base-1114.


Many answers to technical problems can be found online in the Data Access Technical Knowledge Base. Here, you can access the same live data that Data Access Worldwide technical support and development staff use to enter and track technical articles.


Data Access Technical Knowledge Base    http://www.dataaccess.com/kbase.asp
[[Category:DataFlex (Character Mode)]]
Many answers to technical problems can be found online in the Data Access Technical Knowledge Base. Here, you can access the same live data that Data Access Worldwide technical support and development staff use to enter and track technical articles.