See Also: Finding Specific Errors
This section lists all system errors in numeric order.
The system errors are those in the error number range of 4097-8192 and are stored in the DfErr001.dat database table.
4102 - Too many table structures
4109 - Data dictionary record not saved
4111 - File too large for edit
4112 - Temporary file number in use
4113 - Attribute value warning
4114 - Cannot create .VLD file
4115 - Cannot create .DAT file
4122 - Bad field type in index
4123 - Dynamic area of table header damaged
4124 - Static area of table header damaged
4125 - Argument size too large
4126 - Argument size too small
4127 - Error writing to device
4128 - Maximum records less than total records
4129 - Invalid number for maximum records
4130 - Error number out of range
4131 - Program created with incompatible version
4133 - Data entry subsystem not compatible
4134 - Embedded database table not compatible
4135 - Number too large to convert to integer
4136 - Real too large to convert to integer
4138 - Maximum number of objects reached
4139 - Cannot delete - related tables not open
4140 - Cannot delete - related records exist
4141 - Data set files must support transactions
4142 - Cannot recover from transaction error
4143 - Illegal operation during transaction
4146 - RECNUM not allowed as sequential device
4148 - Can't write to .HDR file
4149 - .HDR file is damaged or invalid
4150 - Attempt to reference invalid item number
4151 - Attempt to access an invalid page number
4152 - Maximum virtual memory locks exceeded
4153 - Attempt to unlock invalid virtual memory
4154 - Data_set constraint not for main file
4155 - Edit requires reread or find during lock
4156 - Referenced an invalid system integer
4157 - No shell program defined in environment
4159 - Error executing child process
4160 - Can't run print spooler
4163 - Spooler command line string too long
4164 - Referenced an Invalid System Indicator
4165 - Error outputting to spooler device
4166 - Error reading from child process's pipe
4168 - Invalid object used with RUNPROGRAM PIPE
4170 - Compression table is corrupt
4171 - Invalid directive in collate.cfg on line <line_number>
4172 - Redundant value in collate.cfg on line <line_number>
4174 - Incomplete sequence in collate.cfg
4175 - No printer type specified
4177 - File access violation,file may be in use
4179 - Unable to update FILELIST.CFG
4181 - Can't delete index file (.K*)
4182 - Can't create index file (.K*)
4183 - Can't delete table (.DAT)
4184 - Can't delete variable db table (.VLD)
4200 - Can't close variable db table (.VLD)
4216 - Physical file name not specified
4218 - File must be opened exclusively
4221 - Must copy record to identical structure
4222 - Destination file must be empty
4223 - Can't delete header file (.HDR)
4229 - DBMS Driver not supported System
4236 - Can't ABORT while in a transaction
4237 - Can't CHAIN while in a transaction
4238 - Can't RUNPROGRAM while in a transaction
4252 - Error in Transaction log
4256 - Restructure ok, check file for error
4259 - Error sorting: bad data
4260 - Error sorting: bad index number
4261 - Maximum record length exceeded
4262 - Unable to access index file
4264 - Header integrity checking disabled
4266 - Unable to read header of datafile
4269 - Not a valid file definition
4271 - Can't open intermediate file
4272 - Can't close intermediate file
4273 - Intermediate file not opened
4274 - Error reading sequential file
4275 - Error writing to sequential file
4277 - Invalid intermediate file keyword
4278 - Invalid intermediate file value
4279 - Invalid intermediate file sequence
4280 - Invalid intermediate file field
4281 - Invalid intermediate file index
4282 - Cannot logout with open tables
4283 - Unable to write .FD file
4284 - Max index key length exceeded
4285 - Attempt to access unsupported attribute
4286 - Illegal attribute value
4289 - DBMS operations not allowed in callback
4290 - Error accessing system table for file
4291 - Error updating system table for file
4292 - Cannot copy structure on table with data
4354 Dates are unconverted <FileName.ext>
4355 - External function not found
4357 - GUI Subsystem not compatible
4361 - Cannot Find Evaluation DLL
4362 - Evaluation DLL Has Expired
4367 Function Not Found in Expression
4379 Wrong Number of Arguments
4381 Illegal Datatype Conversion
4383 External Class Not Registered
4386 - Bad registerInterface method declaration
4387 - Too many arguments in registerInterface
4388 - Illegal object name definition
4389 - Illegal property name definition
4390 - Illegal method name definition
4394 - Invalid object reference
4395 - Obsolete command is unsupported
4397 - Illegal external function definition
4398 - Unable to instantiate COM object
4399 - COM object method invocation error
4402 - DDO re-entrant operation attempted
4415 - Application/Workspace error
4416 - Web Object not found in WebApp
4417 - File Field name not found in Web Object
4418 - DDO Not found in Web Object
4419 - Changed State required by Web Object
4420 - Bad Data passed to Web Object
4421 - Xml/Http Transfer error
4422 - Soap/Http Transfer error
4424 - Text too large for database field
4500 - Missing Debug Information
4501 - Incompatible Debug Information
4502 - Server Web Service Exception
4504 - Driver Number Out of Range
4505 - Attempt to Reference Invalid Grid Column
4506 - Column does not Support Combo Messages
4508 - Invalid Use of Non-Main Table
4509 - Referenced Array Index Out of Bounds
4510 - Invalid RowId - Cannot Deserialize
4511 - Specified Dimension not Valid in Array
4512 - Illegal Attempt to Resize Static Array
4513 - Recursive struct definition
4514 - Obsolete or Ambiguous Syntax
4515 - Can't Compare this Element Type
4516 - Bad User Function Return Value
4518 - System Table Has More Than One Record
4519 - Invalid System Table Record Creation
4520 - Missing end metadata tag set
4522 - Changes detected in precompiled package
4523 - The specified DateTime contains an invalid value
4524 - The specified TimeSpan contains an invalid value
4525 - The specified Time contains an invalid value
4526 - Change in Parent record not allowed
4530 - Json Object not Initialized
An incorrect value was supplied using the Set_Attribute command.
Supply an appropriate and legal attribute value.
open Customer
move Customer.File_Number to hFile
move 0 to iField
Structure_Start hFile "DATAFLEX"
create_field hFile at iField
set_attribute DF_FIELD_TYPE of hFile iField to DF_BCD
set_attribute DF_FIELD_LENGTH of hFile iField to 8
set_attribute DF_FIELD_PRECISION of hFile iField to 999
set_attribute DF_FIELD_NAME of hFile iField to "Balance_Due"
Structure_End hFile DF_STRUCTEND_OPT_NONE
The example above supplies 999 to the DF_FIELD_PRECISION attribute, which indicates that the new field being created in the Customer table should have 999 digits behind the decimal point. Clearly, this is inappropriate and illegal. the sample code below correctly supplies 2 as the number of digits desired behind the decimal point.
open Customer
move Customer.File_Number to hFile
move 0 to iField
Structure_Start hFile "DATAFLEX"
create_field hFile at iField
set_attribute DF_FIELD_TYPE of hFile iField to DF_BCD
set_attribute DF_FIELD_LENGTH of hFile iField to 8
set_attribute DF_FIELD_PRECISION of hFile iField to 2
set_attribute DF_FIELD_NAME of hFile iField to "Balance_Due"
Structure_End hFile DF_STRUCTEND_OPT_NONE
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 or ASCII fields of the same length.
Ensure that related fields are of the same type and size. For example, do not relate a numeric 6.0 field to a numeric 4.0 field.
Note: Some developers using DataFlex 2.3b used record number relationships, where a field in one database file is related to the RECNUM field in another file. When upgrading more recent revisions of DataFlex, 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. However, record number relationships should be avoided whenever possible and even with legacy applications efforts should be made to remove them.
Attempt to access a field of a database table that does not exist, for example, by using the get_FieldNumber or Field_Map commands.
Verify table field names. Check spelling of the field name. Verify the table name or number being used.
A lock attempt was made and failed in the time allotted. This can be caused by:
1. The code in your application may not correctly apply a lock. This is often caused by improper coding of Alias tables.
2. Another application that is keeping a lock on the tables that you are trying to lock.
1. See the lock command for details on how to properly lock tables. See Working with Alias Tables and DDs for more information.
2. See the DF_LOCK_TIMEOUT attribute for more information about lock timeouts.
An attempt was made to exceed the database limitation of the number of indexes allowed.
Stay within the index limitations of the database you are using. The embedded (DataFlex) database has a limit of 15 indexes (16 if you include the predefined index 0, which is always used by the Recnum field). Other databases have other limitations. Consult the documentation of the database you are using regarding the limits of that database.
An attempt was made to exceed the database limitation of record length.
Stay within the record length of the database you are using. The embedded (DataFlex) database has a record length limit of 16 kilobytes (KB). Other databases have other limitations. Consult the documentation of the database you are using regarding the limits of that database.
An attempt was made to change the structure of a database table without first executing a valid structure_start statement.
Execute a valid structure_start statement before attempting to change a database table structure.
integer iMaxRecs
handle hFile
Open Customer
move Customer.File_Number to hFile
move 1000000 to iMaxRecs
set_Attribute DF_FILE_MAX_RECORDS of hFile to iMaxRecs
Structure_End hFile DF_STRUCTEND_OPT_NONE
The incorrect code above attempts to change the maximum number of records of the Customer table without first executing a structure_start command, like the corrected code below.
integer iMaxRecs
handle hFile
Open Customer
move Customer.File_Number to hFile
move 1000000 to iMaxRecs
Structure_Start hFile "DATAFLEX"
set_Attribute DF_FILE_MAX_RECORDS of hFile to iMaxRecs
Structure_End hFile DF_STRUCTEND_OPT_NONE
A file cannot be found.
Check disk folder for correct file name.
An field of an incorrect type is being added to an index or is in an existing index.
Most databases have limitations of the types of fields that can be added to indexes. The embedded (DataFlex) database can only use Numeric, ASCII, Date and Overlap fields in indexes. Other databases have other limitations. Consult the documentation of the database you are using regarding the limits of that database.
Database table or disk directory is damaged.
Generally the disk should be reformatted and data
recovery techniques used. Usually, database tables triggering this
error are irrecoverably damaged. Restoring data from a good backup is
the best recovery method.
Verify proper configuration of Read
Caching and Opportunistic Locking on your network.
Database table or disk directory is damaged.
Generally the disk should be reformatted and data
recovery techniques used. Usually, database tables triggering this
error are irrecoverably damaged. Restoring data from a good backup is
the best recovery method.
Verify proper configuration of Read
Caching and Opportunistic Locking on your network.
An attempt was made to set the argument size to a value exceeding the maximum argument size.
Do not set the argument size to a value exceeding the maximum argument size. See the DataFlex Specifications list for more information.
1. An attempt was made to set the argument size to less than 256.
2. An attempt was made to set the argument size to a value exceeding the maximum argument size.
1. Never set the argument size to a value less than 256.
2. Do not set the argument size to a value exceeding the maximum argument size. See the DataFlex Specifications list for more information.
An attempt was made to set the maximum records attribute of a database table is less than the current number of records in the table.
Do not attempt to set the maximum records attribute to less than the current number of records in the table.
An attempt was made to enter an invalid value for the maximum records attribute of a database table.
The maximum number of records a database table can hold varies between databases. For the embedded (DataFlex) database this value must be a positive integer between 1 and 16.7 million (16,700,000). Other databases have other limitations. Consult the documentation of the database you are using regarding the limits of that database.
1. Database tables (.dat files) created under revisions of DataFlex prior to 2.3 (2.2 and earlier) cannot be used under DataFlex without conversion by the DFConver utility.
2. A corrupted database table.
1. Run DFConver on all your database tables (.dat files before attempting to use them with DataFlex. The DFConver utility was supplied with DataFlex 2.3, but can be obtained separately from the Data Access Corporation Web Site or by contacting Data Access Corporation.
2. Restore affected table from backup
An attempt was made to convert a number that is larger than the largest value allowed for an integer to an integer variable.
Reduce the value being moved to the integer to be within the range allowed for integers (-2,147,483,647 to +2,147,483,647), or keep the value in a number variable.
An attempt was made to convert a real that is larger than the largest value allowed for an integer to an integer variable.
Reduce the value being moved to the integer to be within the range allowed for integers (-2,147,483,647 to +2,147,483,647), or keep the value in a real variable.
The maximum number of objects allowed in DataFlex has been reached.
Reduce the number of objects in your program.
Child tables related to the table in which a record is being deleted are closed.
In order to delete a record in a table, all child tables related to the table in which the record is being deleted must be open.
You cannot delete a record with child records if Cascade_Delete_State is set to False.
If you see this error, Cascade_Delete_State is most likely set to False to protect from deleting parent records with related child records. Doing so would leave orphaned records in related child tables.
The transaction type of one or more tables used by a DataFlex application is set to None.
The transaction type of tables in DataFlex applications using DataDictionaries must be set to either Client Atomic, it cannot be set to None. Server Atomic only applied to Novell Netware's Transaction Tracking System (TTS), but Novell Netware is no longer supported in DataFlex.
An operation that is not allowed during a transaction was attempted during a transaction.
Certain operations are not allowed during a database transaction. This list includes any commands that execute another program, such as runprogram, or commands that exit a program, such as abort and exit_application.
A transaction is a lock...unlock, reread...unlock or begin_transaction...end_transaction block of code.
1. This could be a permissions problem.
2. Database table or disk directory is damaged.
1. Make sure that the current user has rights to the location where the .HDR file is to be created.
2. Generally the disk should be reformatted and data
recovery techniques used.
Verify proper configuration of Read
Caching and Opportunistic Locking on your network.
This could be a permissions problem.
Make sure that the current user has rights to the location where the .HDR file is to be created.
Database table or disk directory is damaged.
Generally the disk should be reformatted and data
recovery techniques used. Usually, database tables triggering this
error are irrecoverably damaged. Restoring data from a good backup is
the best recovery method.
Verify proper configuration of Read
Caching and Opportunistic Locking on your network.
No parent-file constraint
Incorrect multi-user programming code.
A reread (of data from disk) of the affected table is required before data in an active record buffer is to be changed. This ensures that no other user or process has changed the data since it was last retrieved from disk.
If the value of the API attribute DF_REREAD_REQUIRED is true and a reread is not performed, DataFlex error 4155 will be triggered. This attribute can be used to debug code that does not properly reread data.
This particular runtime error points out errors in multi user coding logic. The rules for correcting these coding errors are simple and straightforward:
Whenever a new record is created (i.e., a value is moved to a table.field) a lock command must first be issued. A lock command locks all open tables that are not in read_only mode.
Whenever an existing record is edited, a reread command of the corresponding table must first be issued. A reread command rereads all tables specified as arguments for the command and then issues a lock command.
Whenever an existing record is deleted, the affected table must be in a locked state.
For each lock command issued one unlock command must be issued.
For each reread command issued one unlock command must be issued.
Creating a new record:
clear NEWTABLE
lock
move VAR to NEWTABLE.FIELD
saverecord NEWTABLE
unlock
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 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:
reread TABLE
move VAR to TABLE.FIELD
saverecord TABLE
unlock
Copying data from an existing record in TABLE to a new record in NEWTABLE:
reread TABLE
move TABLE.FIELD to NEWTABLE.FIELD
saverecord NEWTABLE
unlock
Note: There are important differences between the saverecord and save commands. The difference is that the save command attaches related ancestral file (parent, grandparent, etc) information, so that information from the related parent record will overwrite information moved manually into the child record buffer when saving. Saverecord does not do anything at all with related files, it only affects the file(s) listed as parameter(s).
This error is usually caused by an outdated version of collate.cfg, from an older version of DataFlex or DataFlex.
Check for older and duplicate copies of collate.cfg in the workspace subfolders and the folder or folders where the DataFlex runtime components are installed.
This error can be triggered during reindexing of an embedded database table if the table returns a last record with a record number higher then MAX_RECORD_COUNT (16,711,679) records. This could be caused by a corrupted table header.
1. Database table or disk directory is damaged.
2. This error may indicate problems with the operating systems directory structure of the disk drive. Power failure is a common cause of disk directory corruption. If you have had other media errors, they can show up later as directory problems. If this happens repeatedly, there may be a subtle problem with the operating system or equipment.
1. & 2. Generally, the disk should be reformatted and data
recovery techniques used. Usually, database tables triggering this
error are irrecoverably damaged. Restoring data from a good backup is
the best recovery method.
Verify proper configuration of Read
Caching and Opportunistic Locking on your network.
This could be a permissions problem.
Make sure that the current user has rights to the location where the .TAG file is to be created.
The table records are being copied from and the table that records are being copied to do not have the same table structure.
Verify that the structure of both tables is identical.
1. This could be a permissions problem.
2. The .HDR file may not exist.
1. Make sure that the current user has rights to the location where the .HDR file is to be deleted.
2. Ensure that the .HDR file exists and can be found along DFPATH.
An abort command was attempted during a transaction.
Certain operations are not allowed during a database transaction. This list includes any commands that execute another program, such as runprogram, or commands that exit a program, such as abort and exit_application.
A transaction is a lock...unlock, reread...unlock or begin_transaction...end_transaction block of code.
An chain command was attempted during a transaction.
Certain operations are not allowed during a database transaction. This list includes any commands that execute another program, such as runprogram, or commands that exit a program, such as abort and exit_application.
A transaction is a lock...unlock, reread...unlock or begin_transaction...end_transaction block of code.
A runprogram command was attempted during a transaction.
Certain operations are not allowed during a database transaction. This list includes any commands that execute another program, such as runprogram, or commands that exit a program, such as abort and exit_application.
A transaction is a lock...unlock, reread...unlock or begin_transaction...end_transaction block of code.
An attempt was made to change the structure of a database table to exceed the database limitation of record length.
Stay within the record length of the database you are using. The embedded (DataFlex) database has a record length limit of 16 kilobytes (KB). Other databases have other limitations. Consult the documentation of the database you are using regarding the limits of that database.
This table does not have header integrity checking enabled.
To enable header integrity checking, open the table in Database Builder and go to the Parameters tab page.
There are dates with a 2-digit year in the specified table.
Caution: If viewing the data with Database Explorer, depending on the options you have set in Database Explorer, you may not see the dates in the database exactly as they are stored.
Convert all dates in the specified table to 4-digit years.
The function specified in the External_Function call is not found in the specified DLL.
Check the DLL's documentation for the function name. Sometimes the function names are followed by an additional letter.
External_Function ShellExecute "ShellExecute" Shel32.Dll ;
Handle hwnd ;
String sOperation ;
String sFile ;
String sParameters ;
String sDirectory ;
Integer nShowCmd ;
Returns VOID_TYPE
In the incorrect code above, the function name of ShellExecuteA is misspelled as ShellExecute and Shell32.Dll is misspelled as Shel32.dll. The code below is correct.
External_Function ShellExecute "ShellExecuteA" Shell32.Dll ;
Handle hwnd ;
String sOperation ;
String sFile ;
String sParameters ;
String sDirectory ;
Integer nShowCmd ;
Returns VOID_TYPE
Ensure that the DLL's name is spelled correctly and that the DLL is found.
Windows applications search for DLLs in the following order:
1. The folder from which the application loaded.
2. The current folder.
Windows XP: If HKLM\System\CurrentControlSet\Control\SessionManager\SafeDllSearchMode is 1, the current folder is the last folder searched. The default value is 0.
3. The Windows system directory.
Windows NT/2000/XP: The name of this directory is System32.
4. Windows NT/2000/XP: The 16-bit Windows system folder. There is no function that obtains the path of this folder, but it is searched. The name of this folder is System.
5. The Windows folder.
6. The folders that are listed in the PATH environment variable.
A DLL cannot be found by Windows.
Ensure that the DLL's name is spelled correctly and that the DLL can be found.
Windows applications search for DLLs in the following order:
1. The folder from which the application loaded.
2. The current folder.
Windows XP: If HKLM\System\CurrentControlSet\Control\SessionManager\SafeDllSearchMode is 1, the current folder is the last folder searched. The default value is 0.
3. The Windows system directory.
Windows NT/2000/XP: The name of this directory is System32.
4. Windows NT/2000/XP: The 16-bit Windows system folder. There is no function that obtains the path of this folder, but it is searched. The name of this folder is System.
5. The Windows folder.
6. The folders that are listed in the PATH environment variable.
This is a sequential I/O (input/output) error where a raw file access command, such as direct_input, is trying to access a file or folder that does not exist.
Ensure that the file or folder being accessed exists before trying to access it. You can do so using the File_Exist command.
This sample procedure checks whether a file exists before trying to read it. This is a simplified I/O sample that shows how to prevent error 4358 from happening. Read more about Sequential File Input and Output here.
Procedure ReadFromFile
Boolean bExists
String sFileToAccess
move "C:\MyFile.txt" to sFileToAccess
File_Exist sFileToAccess bExists
if (bExists = True) begin
direct_input sFileToAccess
// add code to read from the file here...
close_input
end
End_Procedure // ReadFromFile
This copy of DataFlex is registered as an evaluation license, but the evaluation DLL cannot be found.
Register a full DataFlex license, so that the evaluation DLL is not needed.
This can also be a symptom of something more serious. It indicates that files are missing from the DataFlex installed location. You may want to reinstall DataFlex to correct this.
This copy of DataFlex is registered as an evaluation license, and the evaluation time frame has expired.
Register a full DataFlex license. You can obtain this license through your sales channel.
Can occur when overflow is detected in use of BigInt and UBigInt arithmetic/conversion.
Review your code to ensure the data type you are using is correct for the values you are working with.
A function that has not been declared was used in an expression.
1. This error is often a result of a mistyped function name in the code.
2. It can also be caused by referencing a function that is declared later in the code.
1. Check the function name and correct the spelling of the reference.
2. Either move the function declaration to a place in the code prior to the line calling it or use the Register_Function command to tell the compiler that the function will be defined at a later point in the code.
1. An incorrect number of arguments is passed to a message.
2. A calling convention clash when calling an external_function.
1. See the documentation for the message you are using for more information on the required number of arguments.
2. The standard Win32 API calling convention is called stdcall. This calling convention must be used in a DLL to allow it to be called from DataFlex.
Procedures that fail when creating nodes generate an error. Any of the Send AddXxxxxx messages (Send AddElement, Send AddChildComment, etc.) will generate this error if the object can not be created and added.
See the documentation for the message you are using or the cXMLDOMDocument class for more information.
1. This error occurs if data is moved from one type to another that is inappropriate for the destination data type.
UInteger uiQty
DateTime dtNow
move -3 to uiQty
move uiQty to dtNow
This example will result in error 4382 followed by error 4381 because a variable of type DateTime cannot contain a negative value.
2. If you use static arrays with StrSplitToArray, but if your source string {StringVar} contains more elements than the target array, it will trigger error 4381:"
Illegal Datatype Conversion. Incompatible size of 0. dimension - Cannot convert array of 'STRING[]' to array of 'STRING[3]'
3. This can happen when an array is referenced instead of an array element, such as:
String[] names
Move "Casanave" to names
1. Be sure to use variables of appropriate data types for the values they need to contain.
2. We recommend using dynamic arrays instead.
3. The error in this case is that a string cannot be moved to a string array, but only to an element in the array. The correction would be something like:
String[] names
Move "Casanave" to names[0]
This error occurs if data that exceeds the limitations of a particular type is moved to a variable of that type.
UInteger uiQty
Move -3 to uiQty
This example will result in error 4382 because a variable of type uinteger cannot contain a negative value.
Be sure to use variables of appropriate data types for the values they need to contain.
1. A required DLL is missing.
2. A manifest file for the application that specifies the correct DLL version is missing. For example, when using a cLinklabel control without a manifest file that specifies that version 6 of the DLL should be used if it is available.
1. Make sure the required DLL is installed and registered (if necessary) in the operating system.
2. Make sure the program has the required manifest file with the required specification. All classes that require such a manifest file or statement state so in their documentation.
The code for a call to RegisterInterface is incorrect.
Double check the code of your RegisterInterface call.
The simplest way to ensure that the RegisterInterface call is correct is to use the Publish Method option in the DataFlex Studio to have the Studio write this code for you.
Too many arguments were passed to a RegisterInterface method.
Double check the code of your RegisterInterface call.
The simplest way to ensure that the RegisterInterface call is correct is to use the Publish Method option in the DataFlex Studio to have the Studio write this code for you.
A property is illegally defined.
1. The property name may conflict with an internal identifier or reserved word.
2. The property may be defined inside of a class inside of a method, which is not legal.
1. Resolve the naming conflict by renaming the property.
2. Move the property definition outside any methods.
Attempt to redefine a method that is already defined.
Attempt to register a global method using Register_Procedure or Register_Function.
Do not register global methods.
1. A property is defined in a class, but outside of a constructor method.
2. Error detail text is 'Multi Dimensional array variables must be defined one per line'.
1. Properties defined in a class must be defined inside a Construct_Object.
2. You must define multi-dimensional array variables one per line.
Incorrect:
Integer[][] ints1 ints2
Correct:
Integer[][] ints1
Integer[][] ints2
This error can be caused by many different types of coding errors.
Search for the message specifics in the Compiler Error Messages.
If the full error text reads:
"Invalid message syntax TOO MANY PARAMS AFTER 'TO' [Error: 4393] on Line: LineNumber (PRNFileLineNumber) of File: SourceFileName.
then the error specifics are:
TOO MANY PARAMS AFTER 'TO'
If you search for this error text on the Compiler Error Messages page, or the Search tab of this help file, you will find the detailed explanation of the specific error.
The ActiveX control is not registered on the PC.
Use regsvr32 to register the control.
This error is a Generic Error. Please see Generic Errors for more information.
This error is a Generic Error. Please see Generic Errors for more information.
This error is a Generic Error. Please see Generic Errors for more information.
This error will only be reported if using the Data Dictionary Inspector with the Report DD Reentrancy Errors" checkbox checked.
Many DDO methods are not reentrant. The messages that are not reentrant are Clear, Clear_All, Request_Save, Request_Delete, Request_Assign, Request_Find, Request_Superfind and Find_by_Recnum. For example, you cannot send the Request_find message in the middle of a Request_Save process (even if the message is being sent to another DDO).
When these types messages are sent in a reentrant state, the normal behavior of the DDO is to ignore them. This creates a problem for testing. If you are sending these messages, you are probably doing so in error. Rather than performing whatever action you are expecting, the message is being silently ignored.
When the Data Dictionary Inspector is used, these reentrant messages are reported back to you as errors. This will make it easy for you to find and correct these problems.
See Reentrancy of DDO Methods for more information regarding reentrant operations.
This error is a Generic Error. Please see Generic Errors for more information.
This is a generic error message that forwards errors from the WinPrint viewer or WinPrint engine. Please read the text or the error message for the specific cause and/or resolution.
The Workspace file identifying the Workspace cannot be found.
Check the code of the cApplication object in your program to see which workspace file it is trying to open. If no code exists in the object specifying a workspace to open, it is trying to open the file "config.ws".
By default, the workspace (.ws) file is located in the same folder as the compiled program (.exe) file.
WBO name not found. A call from an ASP page refers to a WBO name that cannot be found.
A call from an ASP page refers to a "file.field" name that cannot be found.
No filename specified or could not find the DD for passed filename.
Changed_State not supported or available from browser/script. The WBO needs to do changed-state checking for each data being posted. Either the ASP page is not properly set up to provide this information or the browser did not support the scripting required to make this work.
Internal error with the CALL mechanism resulting in bad data. This should never happen.
An error occurred during a cXmlHttpTransfer. More error detail is provided by checking the cXmlHttpTransfer property peXmlTransferStatus.
Code values are:
xtsOk - No error
xtsHttpRequestFailed - HTTP request failed -- no response
xtsBadRequest - Bad or missing data sent
xtsInvalidContentType - Return content type is not as expected
xtsNoData - No data was received
xtsNotXml - Received data is not XML
An error occurred with the soap client request. peTransferStatus has more details. All errors are reported here except SOAP-fault errors.
An error occurred with the SOAP client request resulting in a SOAP fault. See peTransferStatus for more details.
This gets triggered if you try to save an RTF (rich text format) stream that is too large in a cDbRichEdit control. It occurs during the save when you attempt to move the data from the control to the database field.
Decrease the size of the text in the control or increase the size of the database field. If you cannot do either, consider storing the text in an RTF document that is stored outside the database.
All errors in the cDRReports class use error 4425. The error details will be displayed in the error text.
Refer to the DataFlex Reports documentation for more information.
This is the generic Access Denied user error for the web application framework. If there are more details, they should be displayed in the error text.
This is typically caused by a user attempting to access parts of a web application the user does not have correct permissions for. See cWebSessionManager to read more about rights in web applications.
The precompile debug (.PBG) file is missing. IOW, if you use a precompiled package, but the .DBG file is missing.
The precompile debug (.PBG) file is found, but is not a current .PBG file. IOW, the .PBG file was created with an older compiler, or if the .PBG file is not a valid debug file.
This is a private error used to generate soap-faults on the server. This error will never be reported.
Attempt to reference an invalid grid column. Either the columns have not yet been created or it is out of range.
Reference grid columns after they have been created or keep within the range of columns of the grid.
Attempt to access a column_combo message for a column that does not support combos.
The columns must first be defined using the Column_Combo_State message.
Set Column_Combo_State iColumn to True
This is a DataDictionary Object (DDO) / Data Entry Object (DEO) programming error that has one of two causes.
1. Your DEO has a mismatch between its Server and its data file/field binding. In a DEO data file/field binding (e.g., Entry_Item Orderhea.Order_Number) should be a field from your Server table or one of its parent (or ancestor) servers. It may also have no binding at all. In particular, you do not want to refer to a child table with a parent server. When that happens and you attempt a find on this DEO, you may get this error.
For example:
// this is valid, binding table and DDO are the same
Object oOrderheaOrderNr is a dbForm
Set Server to oOrderHea_DD
Entry_Item OrderHea.Order_Number
End_Object
// this is valid, binding table is a parent of the DDO
Object oCustomerCustNr is a dbForm
Set Server to oOrderHea_DD
Entry_Item Customer.Customer_Number
End_Object
// this is valid, no binding or an expression
Object oOrderheaOrderNr is a dbForm
Set Server to oOrderHea_DD
Entry_Item (Whatever-you-want)
End_Object
// this is *not* valid, binding table is a child of the DDO
Object oOrderheaOrderNr is a dbForm
Set Server to oCustomer_DD
Entry_Item OrderHea.Order_Number
End_Object
This last example is most likely a programming error. There are few cases where this will have desired results and a find on this DEO may generate this error.
This can also occur if a DDO’s Main_File is set improperly, if a DEO’s Set Server is set improperly (or is missing) or the DEO’s Entry_Item is referring to the wrong table.
1. Add or correct the appropriate Entry_Item, "set Server" or "set Main_File" statement.
<or>
2. It is a DataSet legacy feature that should not be in use (probably using the private and obsolete Add_Parent interface in a DataSet). Support of this feature has been removed in DataFlex 11.0 due to RowId changes. This is unlikely.
The specified index reference is out of bounds.
Reference an index within the bounds of the array.
An attempt was made to deserialize a RowId from a string that is not a valid serialized RowId.
The specified dimension is not a valid dimension in the array. For example, querying for the size of the 2nd dimension in a one-dimensional array using SizeOfArray() would result in this error.
Reference only dimensions the array has. For example, reference only one dimension of a one-dimensional array.
Attempting to dynamically resize a static array is illegal.
Attempt to create an illegal recursive struct declaration.
Struct tMyStruct
tMyStruct MyStruct
End_Struct
or
Struct tMyStruct
integer iVar
tMyStruct MyStruct
End_Struct
Note that structs can be defined recursively with arrays:
Struct tMyStruct
integer iVar
tMyStruct[] MyStruct
End_Struct
Struct definitions cannot be nested. Correct the code.
Left of '[' is not array, use '(' if indicator
This can happen with an array indexer or indicator. This error occurs if left of [ is a variable reference, but determined not to evaluate to type array. It can also occur if what's between [] is an indicator and it's simply a case of two arguments.
You can resolve this by enclosing the indicator with () instead. For example, instead of [Found] use (Found).
"Left of '.' is not of type struct or table"
This error occurs if left of . is a variable reference but determined not to evaluate to type struct.
Only struct members and table column names may follow a dot.
Raised when code calls an array function and supplies an array of a complex data type (struct, RowId, etc.) and the virtual machine cannot compare the arguments.
DataFlex implements different sorting algorithms for different data types in the virtual machine, in order to provide developers with the most efficient sorting method based on the data type. Algorithms provided in the virtual machine will also run faster. Some data types cannot be sorted using the internal algorithms: struct, RowId, variant.
For example:
Struct tFriend
String First
String Last
End_Struct
Procedure OnClick
// declare array of 10 tFriend structs
tFriend[4] MyFriends
integer iMinFriend
// fill MyFriends array
move "Janet" to MyFriends[0].First
move "Smith" to MyFriends[0].Last
move "Pedro" to MyFriends[1].First
move "Rodriguez" to MyFriends[1].Last
move "Judy" to MyFriends[2].First
move "Smith" to MyFriends[2].Last
move "Fred" to MyFriends[3].First
move "Jones" to MyFriends[3].Last
move (MinArray(MyFriends)) to iMinFriend
End_Procedure
The above code will trigger error 4515, because struct is one of the data types that cannot be sorted by the virtual machine using an internal algorithm. To use the MinArray array function with a structured data type, create a custom sort function as described in the help for the array functions that cause this error.
Raised when developer supplied function returns anything other than (EQ), (GT) or (LT) to array functions SortArray or BinarySearchArray.
For example:
Struct tFriend
String First
String Last
End_Struct
// Custom comparison function:
// Will return (EQ) if the tFriend struct passed as the first argument
// has the same Last member value as the tFriend struct passed in the second argument
Function MyComparison tFriend MyFriend tFriend SearchFriend Returns Integer
integer iRetVal
if (MyFriend.Last = SearchFriend.Last) ;
move (GE) to iRetVal
else ;
move (LE) to iRetVal
Function_Return iRetVal
End_Function
// fires when the button is clicked
Procedure OnClick
// declare array of 10 tFriend structs
tFriend[10] MyFriends
// declare tFriend struct that will hold search value(s)
tFriend SearchFriend
integer iSearchIndex i iArraySize
// move value to compare array values to the Comparison struct
move "Jones" to SearchFriend.Last
// fill MyFriends array
move "Janet" to MyFriends[0].First
move "Smith" to MyFriends[0].Last
move "Pedro" to MyFriends[1].First
move "Rodriguez" to MyFriends[1].Last
move "Judy" to MyFriends[2].First
move "Smith" to MyFriends[2].Last
move "Fred" to MyFriends[3].First
move "Jones" to MyFriends[3].Last
move "Martin" to MyFriends[4].First
move "Anderson" to MyFriends[4].Last
move "Michael" to MyFriends[5].First
move "Schmidt" to MyFriends[5].Last
move "Jacques" to MyFriends[6].First
move "Verne" to MyFriends[6].Last
move "Enrico" to MyFriends[7].First
move "Ricci" to MyFriends[7].Last
move "Karl" to MyFriends[8].First
move "Sorensen" to MyFriends[8].Last
move "Juan" to MyFriends[9].First
move "Garcia" to MyFriends[9].Last
// call MyComparison function to search array elements for value(s) in SearchFriend
move (BinarySearchArray(SearchFriend, MyFriends, Self, get_MyComparison)) to iSearchIndex
showln "The search value was found in element number " (string(iSearchIndex))
move (SizeOfArray(MyFriends)) to iArraySize
for i from 0 to (iArraySize-1)
showln ":" MyFriends[i].First ":" MyFriends[i].Last ":"
loop
End_Procedure
The above code will trigger error 4516, because function MyComparison returns (GE) and (LE), instead of (EQ), (GT) or (LT).
Correct developer supplied functions to only return (EQ), (GT) or (LT).
This occurs when a operation on a decimal data type results in an overflow. Prior to DataFlex 11.1, an overflow would result in a truncated value. Other data types (besides decimal), notably the number data type, do not raise an error when an overflow occurs.
DataFlex has never raised errors on overflows. If you are dealing with very large numbers, where an overflow is possible, you should use the decimal data type. This gives you the largest range possible (decreasing the chance of an overflow) and it reports when an overflow actually occurs.
This error occurs when a system table is opened and it has more than one record. A multi-record system table is a bug. This is non fatal error and the table will still be opened.
Existing applications from revisions of DataFlex older than 11.1 may contain system tables with multiple records. The extra records may be the residual effect of an old error. While this may problem may be fixed in your application and the extra records are not creating any problems with your existing application, you will get an error which was not encountered in previous releases. You are encouraged to fix these tables by removing the extra records. If you cannot immediately correct these errors you can suppress the reporting of these errors by telling the error handler to ignore these errors. This is accomplished by adding the following line to the top of your windows or web application (after the inclusion of the error handler package).
Use ErrorNum.inc
Send IgnoreError of Error_Object_Id DFERR_SYSTABLE_TOO_MANY_RECORDS
This will allow you to continue to use your system table as before. It will not allow you to add more records to this table -- this is a more serious bug which should not be suppressed.
This error occurs if you attempt to save a new record that would result in more than one record in a system table. Prior to DataFlex 11.1, it was possible to save multiple records to a system table. This was a bug, which is no longer allowed.
You should not try to suppress or work around this error. If your application is attempting to save new records to a system table, you have a serious error which needs to be fixed. Either your table should not really be marked as a system table, or you should not be saving new records to it.
End of file was found before the end of the meta- data tag set, missing '}'.
Correct the meta-data tag to include the missing '}'.
See Studio Meta-Data for more information on meta-data.
The embedded ActiveX resource data between Embed_ActiveX_Resource/End_Embed_ActiveX_Resource is invalid or incorrect.
Delete the Embed_ActiveX_Resource/End_Embed_ActiveX_Resource block of code and allow the Studio to recreate it. You can do so by right-clicking on the ActiveX control in question and selecting "ActiveX Properties" from the context menu. When you set the ActiveX properties, the Studio will save the resource data in an Embed_ActiveX_Resource/End_Embed_ActiveX_Resource block of code.
Changes were detected in precompiled package while attempting to include it.
The precompiled package must be recompiled for the changes to take effect.
This error is triggered whenever DateTime arithmetic is attempted with invalid values. The result is always a Null value.
Ensure that valid values are supplied for DateTime arithmetic. See the DateTime command for details.
This error is triggered whenever TimeSpan arithmetic is attempted with invalid values. The result is always a Null value.
Ensure that valid values are supplied for TimeSpan arithmetic. See the TimeSpan command for details.
This error is triggered whenever Time arithmetic is attempted with invalid values. The result is always a Null value.
Ensure that valid values are supplied for Time arithmetic. See the Time command for details.
If an error occurs this is most likely a programming error. You've told the DD it will not change, but it has. This can be particularly useful with alias files because you most often use alias files as parents and you most often do not want them to be changed. Setting this true in the DD provides a quick and easy way to make sure that this is really the case. If this happens, it is expected that the developer will want to fix their code.
See pbForeignReadOnly.
The purpose of this error is to notify the developer or the user that a record that was previously found can now not be found. Request_Validate, Request_Save and Request_Delete return this error when records cannot be refound/reread. The intent is to notify the user that someone must have deleted this record since it was last found by the user and that this is not a bug, but normal multi-user behavior when one user deleted a record that another user has pulled up in a view, etc.
In most cases, this is simply a user notification that another user or process has deleted a record that the current user had previously found and displayed. No action is needed.
This error indicates that a JSON string being parsed has an invalid structure.
Examine the JSON string and correct the code creating it. The cJsonObject class has members to help create and validate JSON data.
This error indicates that the structure of the JSON DOM is invalid for cJsonObject operation.
Examine the JSON DOM object data and cJsonObject structure and correct the inconsistency. The cJsonObject class has members to help create and validate JSON data. Sometimes JSON data is returned without all members of the Json object present. Setting pbRequireAllMembers to False can help get around this issue.
If This error indicated that the cJsonObject instance does not represent a valid JSON object.
Examine the cJsonObject instance and correct the code creating it. The cJsonObject class has members to help create and validate JSON data.