Date: 03-31-2011 Subject: RELEASE 9.5 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.5 31 Mar 2011 9,5,0,500 MAKECLI 9.5 31 Mar 2011 9,5,0,500 MAKECON 9.5 31 Mar 2011 9,5,0,500 MAKECONET 9.5 31 Mar 2011 9,5,0,500 MAKEDEF 9.5 31 Mar 2011 9,5,0,500 MAKEMFD 9.5 31 Mar 2011 9,5,0,500 PLBCLI 9.5 31 Mar 2011 9,5,0,600 PLBCLICON 9.5 31 Mar 2011 9,5,0,500 PLBCLIENT 9.5 31 Mar 2011 9,5,0,500 PLBCLINET 9.5 31 Mar 2011 9,5,0,500 PLBCON 9.5 31 Mar 2011 9,5,0,500 PLBCONET 9.5 31 Mar 2011 9,5,0,500 PLBDSIGN 9.5 31 Mar 2011 9,5,0,500 PLBNET 9.5 31 Mar 2011 9,5,0,500 PLBRUN 9.5 31 Mar 2011 9,5,0,600 PLBSERVE 9.5 31 Mar 2011 9,5,0,500 PLBSERVET 9.5 31 Mar 2011 9,5,0,500 (Threaded Server) PLBWIN 9.5 31 Mar 2011 9,5,0,500 SETGUID 9.5 31 Mar 2011 9,5,0,500 SUNAAMDX 9.5 31 Mar 2011 9,5,0,500 SUNINDEX 9.5 31 Mar 2011 9,5,0,500 SUNLS 9.5 31 Mar 2011 9,5,0,500 SUNMOD 9.5 31 Mar 2011 9,5,0,500 SUNSORT 9.5 31 Mar 2011 9,5,0,500 EMBEDINI64 9.5 31 Mar 2011 9,5,0,500 HEXDUMP64 9.5 31 Mar 2011 9,5,0,500 OBJMATCH64 9.5 31 Mar 2011 9,5,0,500 SUNAAMDX64 9.5 31 Mar 2011 9,5,0,500 SUNINDEX64 9.5 31 Mar 2011 9,5,0,500 SUNMOD64 9.5 31 Mar 2011 9,5,0,500 SUNSORT64 9.5 31 Mar 2011 9,5,0,500 ODSBAC32.DLL 9.5 31 Mar 2011 PLBNETSUP.DLL 9.5 31 Mar 2011 9,5,0,500 Required for PLBNET PLBWSEC.DLL 9.5 31 Mar 2011 9,5,0,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.5 31 Mar 2011 9,5,0,500 SUNWADO.DLL 9.5 31 Mar 2011 9,5,0,500 SUNWMSQL.DLL 9.5 31 Mar 2011 9,5,0,500 SUNWODBC.DLL 9.5 31 Mar 2011 9,5,0,500 SUNWSRV.DLL 9.5 31 Mar 2011 9,5,0,500 ODSBAC64.DLL 9.5 31 Mar 2011 PLBCMP 9.5 31 Mar 2011 PLBDBUG 9.5 31 Mar 2011 ADMEQU.INC 9.5 31 Mar 2011 PLBEQU.INC 9.5 31 Mar 2011 PLBMETH.INC 9.5 21 Mar 2011 *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual, change the EVENTSEND instruction description as follows: "Flags Affected: OVER (Automation Server Only)" Add the following sentences to the Note 4. "The OVER flag is affected when the *CLIENT internal object is specified. The OVER flag is set to be TRUE when there are no client programs connected to the Automation Server that can receive the event. Otherwise, the OVER flag is cleared." - In the PL/B Language Reference manual, the 'InsertTab' method for a TABCONTROL object should include a description for an '*PARAM={param}' parameter. This method was added in release 9.4C. However, I forgot to document the *PARAM parameter. [label] {object}.InsertTab [GIVING {return}]: USING [*INDEX=]{index}: [*LABEL=]{label}: [*IMAGE=]{image}: [*PARAM=]{param} Where: {param} Optional. A decimal number or Numeric Variable whose value is a user-defined value. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Modified the SETPROP to prevent unexpected PLB error values when executing using the Application Server. This corrects a problem where an I45 error was being returned by a SETPROP instruction accessing an ActiveX control. ------------------------------------------------------------------------------- PLBSERVE(WINDOWS) - Modified the icon tray statistics output to include the Application Server serial number. - Modified the startup processing to report the server OS information in the log file as follows: Processor Architecture Number of Processors Active Processor Mask Processor Type Processor Speed This information is being reported in the log file to aid in the evaluation of performance issues that may arise. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Modified the server and client modules to allow a FASTEVENT to be processed when the event is generated by executing a method for a control and the method has a GIVING parameter specified. For this case, the fastevent does not get dispatched if the GIVING parameter is not specified. Note: 1. The modifications that allow a FASTEVENT to be generated/dispatched requires that a 9.4E Application Server and a 9.4E client MUST be used. 2. When a FASTEVENT is generated/dispatched by executing a method, the PLB logic is suspended at the instruction where the method is executed. The PLB logic only continues to execute at the instruction following the method after the fastevent routine is completed and returns. 3. The PLB logic that is executed for a fastevent routine, should NEVER execute any OS API or PLB instructions that suspend the program execution. This includes the PLB instructions like the ALERT, WAITEVENT, CHECKEVENT, ... 4. The PLB logic that is executed for a fastevent routine, MUST NEVER executed any operations that cause a second fastevent to be generated/dispatched while the first fastevent is being processed. Unexpected program execution will occur and the OS message processing can be interrupted to cause unpredictable results or hanging situations that outside of the control of the Sunbelt runtimes. 5. Any PLB routines created to process a fastevent should be simple and should be implemented to avoid excessive logic that can cause Windows OS message operations that can cause conflicts. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Modified the COMCHECK operation for a Unix platform to reduce the OS CPU usage for long timeout periods. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified to log OS information in a debug log file as follows: Processor Architecture Number of Processors Active Processor Mask Processor Type Processor Speed This information is being reported in the log file to aid in the evaluation of performance issues that may arise. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - SQLIO support has been added to the Sunbelt runtimes. The SQLIO features allow normal PLB IO instructions to be used where io operations are performed to SQL database tables. Before the SQLIO operations can be performed, user schema information must be created/provided to specify the record layouts which define the field positions that correspond to a column in a SQL table. Definitions SQLIO Sub system that has been implemented into the Sunbelt runtimes to allow PLB IO instructions to be executed using SQL language statements to access and manipulate SQL database tables. SQLIO Schema Text file using the XML data format that specifies the file names and record layouts that defines how SQL database table columns are to be associated and used during the SQLIO operations. SQLIO System Tables SQL database tables that contain the SQLIO schema information and are used to during the execution of PL/B instructions for the SQLIO implementation. The system table are automatically created if they do not exist when SQLIO schema data is being loaded. The SQLIO system tables are named: Sun_Sqlio_Afile Sun_Sqlio_alias Sun_Sqlio_Columns Sun_Sqlio_Databases Sun_Sqlio_File Sun_Sqlio_Ifile Sun_Sqlio_Version Runtime INI Keywords The SQLIO keywords are placed into the [Environment] section for the INI files for normal runtimes. In the case of an Application Server the SQLIO keywords that are placed in the [Environment] section are used for normal Windows clients. However, when Windows CE clients are being used, these keywords must be specified in the specific Windows CE sections named [Env_wincepk], [Env_wincene], and [Env_console]. PLB_SQLIO_HOST={hostname} This keyword defines the initial/default SQL database source that is connected to when executing SQLIO operations. The {hostname} string is unique to the SQL database engine that is connected. If this keyword is not specified, the runtime looks for the PLB_SCHEMA keyword to get a default SQLite database source. If the PLB_SCHEMA keyword is not found, the runtime uses the runtime default SQLite database source named 'sunschema.db' that is located with the runtime executable. The explicit behavior invoked by this keyword is the same as described for the {host} parameter in the DBCONNECT instruction. PLB_SQLIO_USER={username} This keyword defines the username is used to make the connection. This keyword may or may not be required to make a connection. The explicit behavior invoked by this keyword is the same as described for the {user} parameter in the DBCONNECT instruction. PLB_SQLIO_PASS={password} This keyword defines the password for the user that is used to make the connection. The explicit behavior invoked by this keyword is the same as described for the {pass} parameter in the DBCONNECT instruction. PLB_SQLIO_CONN={login} This keyword defines additional login information that may be needed to make the connection. The explicit behavior invoked by this keyword is the same as described for the {conn} parameter in the DBCONNECT instruction. PLB_SQLIO_EXT={extension} This keyword defines optional extension data that is used to specify some unique parameters used during the connection process. The explicit behavior invoked by this keyword is the same as described for the {ext} parameter in the DBCONNECT instruction. PLB_SQLIO_FLAGS={flags} This keyword defines any special settings used to make the connection. The explicit behavior invoked by this keyword is the same as described for the {flags} parameter in the DBCONNECT instruction. PLB_SQLIO_DRIVER={drivernumber} This keyword defines a driver number that identifies the type of SQL connection to be used. The {drivernumber} is a numeric value from 1 to nnn that specifies the SQL database connection type. If this keyword is not specified in the configuration INI file, the {drivernumber} defaults a value of 1. {drivernumber} Database Connection Type 1 SQLite native connection 2 DBFILE connection PLB_SQLIO_SQLTYPE={sqllanguagenumber} This keyword defines the type of SQL syntax to be used. If this keyword is not specified, the {sqllanguagenumber} defaults to a value of 1. This keyword is required to ensure proper execution of SQL statements to perform the PLB IO instructions relative to a specific SQL database engine type. {sqllanguagenumber} Language Descriptions 1 SQLite language type 2 SQL Server language type 3 MYSQL language type PLB_SQLSCHEMADB={dbname} This keyword defines a schema database name found in the Sun_Sqlio_Databases SQLIO system table. This keyword defines the database name where current schema information is to be accessed and retrieved. The SETMODE *SQLSCHEMADB keyword can be changed to allow a program to set the current schema database name under program control. PLB_SQLTABLEDB={tabledbname} This keyword defines a schema database name found in the Sun_Sqlio_Databases SQLIO system table. This keyword defines the database name where current application SQL data tables are accessed and used. The SETMODE *SQLTABLEDB keyword can be changed to allow a program to set the current schema database name under program control. PLB_SQLIO_DEBUG_LOG={logname} This keyword is only used when debugging issues for the SQLIO support. The {logname} is a file name with path where the runtime writes SQL statements that are executed when performing the PLB IO instructions. If the leading character for the {logname} is a '>' character, only SQL statement execution errors are appended to the log file. If the leading character for the {logname} is a '+' character, all new log entries are appended to the log file. Getting Started 1. Add a PLB_SQLIO_HOST, PLB_SQLIO_DRIVER, and PLB_SQLIO_SQLTYPE keyword to the PLBWIN INI file. These keywords specify the database source, driver type and SQL language syntax type used to make a connection to a SQL database engine. 2. Define the record layout and create a SQLIO XML schema file. See the 'Schema File Format' section for more information. 3. Modify a PLB program as follows: A. Load a SQLIO schema using the SCHEMA instruction. The SQLIO schema only needs to loaded once or as needed when SQLIO schema updates are required. Example: SCHEMA "default", IMPORT="myschema.xml", FLAGS=10 SCHEMA "default", IMPORT="myschema.xml", FLAGS=12 B. Modify the OPEN and/or PREP instructions to include the tag with or without attributes keywords. The tag identifies that a database table is being accessed for use. The tag is included in the file name fields of the instructions. Example: xI IFILE . OPEN xI, "test.isi" ... ....... OPEN xI, "test.isi" ... ....... PREP xI, "test.txt", "test.isi", "5", "10" ... ....... PREP xI,"test","test","5","10" ... C. Compile and execute the PLB program. SQLIO Schema Administrative Tables Sun_Sqlio_Afile This SQLIO system table contains the schema information that associates a PLB program AFILE file reference to a SQL data table name. In addition, this table contains the AFILE key information that allows the runtime to identify the SQL data table columns associated with the key information. The columns defined for this system table are: id - Integer unique row identification value. name - Text column that contains the PLB AAM file name as specified in a PLB OPEN instruction. file_name - Text column that identifies the TXT file name associated with the AAM file. The data in this column is used to look up information contained in the 'SUN_SQLIO_FILE' system table. key_info - Text column that contains AFILE key specifications same as specified for an AFILE PREP instruction. description - Text column for user information as desired. Sun_Sqlio_alias This SQLIO system table contains information that allows a PLB program file name reference to be substituted by another program file name reference. After all substitution actions, the final file name reference must exist in the 'SUN_SQLIO_FILE', 'SUN_SQLIO_IFILE' or 'SUN_SQLIO_AFILE', system table exactly as specified by the final name. The columns defined for this system table are: id - Integer unique row identification value. name - Text column that is the file name specified in the PLB instruction. alias_name - Text column that contains a name string that replaces the name column data. description - Text column for user information as desired. Sun_Sqlio_Columns This SQLIO system table contains all column definitions defined for all PLB files to be processed using SQLIO operations. The information contained in this table identifies the expected fields and position in a record for a data file in a PLB application. The columns defined for this system table are: id - Integer unique row identification value. file_id - Integer unique row identification value of the associated Sun_Sqlio_File row. name - Text column containing the name of the column. description - Text column for user information as desired. type - Integer column that specifies the PL/B type for a column. The values can be: 0 - PL/B data type is a DIM variable. 1 - PL/B data type is a FORM variable. 2 - PL/B data type is an INTEGER variable. offset - Integer column that specifies the 0 based offset of the column in the PL/B record. length - Integer column that specifies the length of the column in the PL/B record. scale - Integer column that specifies the number of fractional digits in a field. The scale value is only applicable for a PL/B FORM variable type. sql_type - Integer column that specifies the SQL type. This can be one of: 0 - Char data type with trailing spaces dropped. 1 - Char data type with binary collated sequence and trailing spaces are dropped. 2 - Char data type that is not case sensitive and trailing spaces dropped. 3 - Char data type. 4 - Char data type with binary collating sequence. 5 - Char data type that is not case sensitive. 6 - Integer data type. 7 - Decimal(length) or Decimal(length-1,scale). 8 - Real data type. Note: 1. All types are case sensitive unless they are documented to be not case sensitive. 2. If the binary collated is not specified in the type description, the database default collating sequence is used. 3. If the ordering of row data relative to the keys being used give unexpected results, the SQL data type should be reviewed to make sure that the proper collating sequence is being applied. zero_fill - Integer column that defines how the data for a SQL numeric column is to be filled when translating the data to a PL/B record field. A value of 1 causes the PL/B record field to be zero filled to the left of the column data. Otherwise, the field will be blank filled to the left of the column data. unique_col - Integer column that specifies that the column only contains unique values. On a CREATE TABLE, a value of 1 will cause the 'unique' attribute to be used. nullable - Integer column that specifies the nullable state. On a CREATE TABLE, a value of 0 will cause the 'not null' attribute to be used. format_mask - Reserved for future use. Sun_Sqlio_Databases This SQLIO system table contains information to define end-user database references that allows a connection to a specified SQL Database Engine. id - Integer unique row identification value. name - Text column that store the user defined name for this database connection information. description - Text column for user information as desired. driver - Integer column that contains the same information as described by the PLB_SQLIO_DRIVER keyword for the INI configuration file. sql_type - Integer column that contains the same information as described by the PLB_SQLIO_SQLTYPE keyword for the INI configuration file. host - Text column that contains the same information as described by the PLB_SQLIO_HOST keyword for the INI configuration file. user_name - Text column that contains the same information as described by the PLB_SQLIO_USER keyword for the INI configuration file. pass - Text column that contains the same information as described by the PLB_SQLIO_PASS keyword for the INI configuration file. conn - Text column that contains the same information as described by the PLB_SQLIO_CONN keyword for the INI configuration file. ext - Text column that contains the same information as described by the PLB_SQLIO_EXT keyword for the INI configuration file. flags - Text column that contains the same information as described by the PLB_SQLIO_FLAGS keyword for the INI configuration file. Sun_Sqlio_File This SQLIO system table contains the schema information that associates a PLB program FILE file reference to a SQL data table name. file_id - Integer unique row identification value. file_name - Text column that contains the PLB FILE file name as specified in a PLB OPEN instruction. table_name - Text column that contains the associated relational database table name. If not provided, the default will be the value from the name column with the 4 characters '.', '/', '\', and ':' converted to the '_' character. description - Text column for user information as desired. Sun_Sqlio_Ifile This SQLIO system table contains the schema information that associates a PLB program IFILE file reference to a SQL data table name. In addition, this table contains the IFILE key information that allows the runtime to identify the SQL data table columns associated with the key information. The columns defined for this system table are: id - Integer unique row identification value. name - Text column that contains the PLB ISI file name as specified in a PLB OPEN instruction. index_name - Text column that contains the SQL object name used in a CREATE INDEX SQL statement. If not provided, the default will be the value from the name column with the 4 characters '.', '/', '\', and ':' converted to the '_' character. file_name - Text column that identifies the TXT file name associated with the ISI file. The data in this column is used to look up information contained in the 'SUN_SQLIO_FILE' system table. key_info - SQL text column that contains one or more comma separated column names for an associated table. unique_idx - Integer column that specifies whether the index key column or combined columns for the key make a unique value. A value of 0 indicates that the key is not unique. A value of 1 is unique. upper_case - Integer column that specifies case sensitivity when matching keys. A value of zero is case sensitive. A value of 1 is case insensitive. no_create - Integer column that indicates if a CREATE INDEX SQL statement should be executed on a PL/B PREPARE. A value of 0 indicates that it should be execute, and a value of 1 indicates that it should not be executed. Note: 1. Depending on the operations of the SQL database, it may be more performant to not have a SQL INDEX on smaller SQL TABLES. The 'no_create' column provides a means of optionally eliminating a SQL INDEX for some scenarios. description - Text column for user information as desired. Sun_Sqlio_Version This SQLIO system table contains the schema version information. id - Integer unique row identification value. schema_version - Integer column that contains a version number that identifies the schema system table formats that are being used. Schema File Format A SQLIO schema file is implemented as a XML file format that contains the basic record/column layout that is used to access the SQL database engine tables. XML Schema Tag Type Descriptions This XML tag is the root tag identifier for a SQLIO schema definition file. Schema Record This XML tag identifies a record that contains database schema information for the Sun_Sqlio_Databases system table. The element tag references in the XML record directly relate to the column descriptions that are documented for the Sun_Sqlio_Databases system table. The element tag names are as follows: Text data that has the user defined name that used as a reference to name a database connection. Text data to describe a database connection to provide information about the intended use of a database connection. This XML tag element contains a numeric value that defines a driver number that identifies the type of SQL connection interface to be used. The data for this tag is a numeric value from 1 to nnn that specifies the SQL database connection interface type. If this keyword is not specified, the default value is 1. The allowed values are as follows: {drivernumber} Database Connection Type 1 SQLite native connection 2 DBFILE connection This XML tag element contains a numeric value that defines the type of SQL syntax to be used for this database connection definition. If this XML tag element is not specified, the default value is 1. This XML tag element needs to be specified to ensure proper execution of SQL statements when performing the PL/B IO instructions relative to a specific SQL database engine type. The allowed values are as follows: {sqllanguagenumber} Language Descriptions 1 SQLite language type 2 SQL Server language type 3 MYSQL language type This XML tag element defines the SQL database source that is to be connected when executing SQLIO operations for the database referenced using the name specified in the XML tag. The string is unique to the SQL database engine that is connected. The explicit behavior invoked by the data is the same as described for the {host} parameter in the DBCONNECT instruction. This XML tag element defines the username to be used when making the connection. The username may or may not be required to make a connection depending on the SQL database engine configuration. The explicit behavior invoked by the data is the same as described for the {user} parameter in the DBCONNECT instruction. This XML tag element defines the password for the user_name that is used to make the connection. The explicit behavior invoked by the data is the same as described for the {pass} parameter in the DBCONNECT instruction. This XML tag element defines additional login information that may be needed to make the connection. The explicit behavior invoked by the data is the same as described for the {conn} parameter in the DBCONNECT instruction. This XML tag element defines optional extension data that is used to specify some unique parameters used during the connection process. The explicit behavior invoked by the data is the same as described for the {ext} parameter in the DBCONNECT instruction. This XML tag element defines any special settings used to make the connection. The explicit behavior invoked by the is the same as described for the {flags} parameter in the DBCONNECT instruction. Schema Record The XML record has schema information for the Sun_Sqlio_Afile system table. The element tag references in the XML record directly relate to the column descriptions that are documented for the Sun_Sqlio_Afile system table. The element tag names are as follows: This XML tag element has text data that provides the PL/B AAM file name as specified in a PL/B OPEN instruction. This XML tag element has text data that identifies the TXT file name associated with the AAM file. This schema data is used to look up information contained in the 'SUN_SQLIO_FILE' system table. This XML tag element has text data that contains the AFILE key specifications same as specified for an AFILE PREP instruction. This XML tag element has text data to describe the end-user application use for this AFILE schema table. Schema Record The XML record has schema information for the Sun_Sqlio_Ifile system table. The element tag references in the XML record directly relate to the column descriptions that are documented for the Sun_Sqlio_Ifile system table. The element tag names are as follows: This XML tag element has text data that provides the PL/B IFILE file name as specified in a PL/B OPEN instruction. This XML tag element has text data that contains the SQL object name used in a CREATE INDEX SQL statement for this record definition. If this XML tag element is not provided, the default action by the runtime will be to use the data from the name column after the 4 characters '.', '/', '\', and ':' are converted to the '_' character. This XML tag element has text data that identifies the TXT file name associated with the AAM file. This schema data is used to look up information contained in the 'SUN_SQLIO_FILE' system table. SQL text column that contains one or more comma separated column names of the associated table. This XML tag element contains a numeric value that specifies whether the index key column or combined columns for the key make a unique SQL key value. A value of 0 specified by this XML tag element indicates that the key is not unique. A value of 1 indicates that the key unique. This XML tag element contains a numeric value that specifies case sensitivity when matching keys. A value of 0 indicates that case sensitivity is used. A value of 1 indicates that the key matching is not case sensitive. This XML tag element contains a numeric value that indicates whether a CREATE INDEX SQL statement should be executed on a PL/B PREPARE. A value of 0 indicates that it should be execute. A value of 1 indicates that it should not be executed. Note: 1. Depending on the operations of the SQL database, it may be more performant to not have a SQL INDEX on smaller SQL TABLES. The 'no_create' column provides a means of optionally eliminating a SQL INDEX for some scenarios. This XML tag element has text data to describe the end-user application use for this IFILE schema table. Schema Record This XML tag identifies a record that contains database schema information for the Sun_Sqlio_File and Sun_Sqlio_Columns system tables. The XML tag elements specified in the record definition are directly related to the columns defined for the Sun_Sqlio_File and Sun_Sqlio_Columns. The element tag names are as follows: This XML tag element has text data that provides the PL/B FILE file name as specified in a PL/B OPEN instruction. This XML tag element has text data that contains the associated relational database table name. If this XML tag element is not provided, the default will be to use the data from the tag element after the 4 characters '.', '/', '\', and ':' are converted to the '_' character. This XML tag element has text data to describe the end-user application use for this FILE schema definition. This XML tag is an embedded record tag that contains the column schema definitions that identifies a PL/B field with a record. The XML tag elements in this record tag correspond directly to the columns as found in the Sun_Sqlio_Columns system table. The tag elements for are defined as follows: This XML tag element has text data that defines the name of the column within a SQL table. This XML tag element has text data that contains user information to describe this column. This XML tag element is an integer value that specifies the PL/B type for a SQL column within a SQL table. The allowed values can be: 0 - PL/B data type is a DIM variable. 1 - PL/B data type is a FORM variable. 2 - PL/B data type is an INTEGER variable. This XML tag element is an integer value that specifies a 0 based offset of the column data in the PL/B record. This XML tag element is an integer value that specifies the length of the column data in the PL/B record. This XML tag element is an integer value that specifies the number of fractional digits in a field. The scale value is only applicable for a PL/B FORM variable type. This XML tag element is an integer value that specifies the SQL type. The allowed values are defined as follows: 0 - Char data type with trailing spaces dropped. 1 - Char data type with binary collated sequence and trailing spaces are dropped. 2 - Char data type that is not case sensitive and trailing spaces dropped. 3 - Char data type. 4 - Char data type with binary collating sequence. 5 - Char data type that is not case sensitive. 6 - Integer data type. 7 - Decimal(length) or Decimal(length-1,scale). 8 - Real data type. Note: 1. All types are case sensitive unless they are documented to be not case sensitive. 2. If the binary collated is not specified in the type description, the database default collating sequence is used. 3. If the ordering of row data relative to the keys being used give unexpected results, the SQL data type should be reviewed to make sure that the proper collating sequence is being applied. This XML tag element is an integer column that defines how the data for a SQL numeric column is to be filled when translating the data to a PL/B record field. A value of 1 causes the PL/B record field to be zero filled to the left of the column data. Otherwise, the field will be blank filled to the left of the column data. This XML tag element is an integer column that specifies that the column only contains unique values. On a CREATE TABLE, a value of 1 will cause the 'unique' attribute to be used. This XML tag element is an integer column that specifies the nullable state. On a CREATE TABLE, a value of 0 will cause the 'not null' attribute to be used. This XML tag element is reserved for future use. PLB Language Changes OPEN FILE/AFILE/IFILE PREP FILE/AFILE/IFILE ERASE There is a tag identifier that can be appended to a file name for the OPEN/PREP/ERASE instructions. For an AFILE, the tag is appended to the '.aam' file name. For an IFILE, the tag is appended to the '.isi' file name. When the tag identifier is detected by the runtime, the SQLIO is used to perform the PLB OPEN/PREP/ERASE operation when there is a SQLIO schema that has been pre-defined and loaded into the default schema database for the runtime. If a SQLIO schema is not available for the requested operation, an I86 error occurs. In addition, the tag identifier can have specialized attributes that are used to override current SQLIO schema settings that are being used for the PLB instruction. If the attribute is the same as defined in the current schema settings, the attribute is not used. Also, a attribute does not permanently change the current schema settings. The tag attributes are defined as follows: Tag Attributes records={rowcount} This tag is used to specify the number of rows to be obtained when sequential read operations are performed. The records attribute is used for READ sequential, READKS, READKP, READKG, and READKGP PLB instructions. The {rowcount} can have a value from 1 the maximum number of rows allowed by the SQL database engine being accessed. A invalid value results in an appropriate I86 error. template={filename} This tag attribute overrides the actual file name being used for the OPEN/PREP. file_name={filename} This tag attribute overrides the file_name field that specified in the Sun_Sqlio_Afile/Sun_Sqlio_Ifile system tables. index_name={indexname} This tag attribute overrides the index_name field specified in the Sun_Sqlio_Ifile system table. table_name={tablename} This tag attribute overrides the table_name field specified in the Sun_Sqlio_file system table. db={databasename} database={databasename} This tag attribute specifies the name of the database connection to use to open the database table. This tag overrides the SQLTABLEDB setting. FILE variable attributes allowed are: records= template= table_name= database= IFILE variable attributes allowed are: records= template= file_name= index_name= table_name= database= AFILE variable attributes allowed are: records= template= file_name= table_name= database= ERASE Instruction index_name= table_name= database= Random SQLIO Access Random access is based on using the sun_recno field in each row. This field is automatically maintained by the SQLIO system. When a random access is performed, the value is incremented by one and used to match against a rows sun_recno field in the application data table. ERASE Erase looks in the Sun_Sqlio_File and the Sun_Sqlio_Ifile system tables for a name match. If found in the Sun_Sqlio_File table, the associated table will be dropped. If found in the Sun_Sqlio_Ifile table, the associated index will be dropped. RENAME This is not supported for SQLIO operations. RECORD Locking Record locking is not support for SQLIO. SCHEMA There is a new 'FLAGS={dnumnvarlit}' bit mask value that is required to load a SQLIO schema file. The new FLAGS bit mask value is defined as follows: 0x00000008 - This bit mask value identifies that the schema file is formatted as a SQLIO xml file. This bit mask value can be used with the IMPORT and EXPORT keywords. FPOSIT The current position returned for the record position is one less than the sun_recno field of the current row in the application data table. REPOSIT The position given is used to position to the row with a sun_recno field that is one greater that the given value. SETMODE *OPENUSESQL={sqltag} The use of this keyword allows all filenames in OPEN statements to have the {sqltag} data appended to the name. If tag is not specified in the file name for a PLB OPEN instruction, the {sqltag} will be enclosed as and appended to the file name. *PREPUSESQL={sqltag} The use of this keyword allows all filenames in PREP statements to have the {sqltag} data given appended to the name. If is not specified in the file name for a PLB PREP instruction, the{sqltag} data is enclosed as and appended to the file name. *SQLSCHEMADB={dbname} This is the name of a database connection from the Sun_Sqlio_Databases system table that is to be used as the default connection for obtaining schema information from the Sunbelt system tables. *SQLTABLEDB={dbname} This is the name of a database connection from the Sun_Sqlio_Databases system table that is to be used as the default connection for accessing application data tables. GETMODE *OPENUSESQL={sqltag} Returns the current setting that has been stored using the SETMODE *OPENUSESQL instruction. *PREPUSESQL={sqltag} Returns the current setting that has been stored using the SETMODE *PREPUSESQL instruction. *SQLSCHEMADB={dbname} Returns the current database name that is being used as the default connection for obtaining schema information from the Sunbelt system tables. *SQLTABLEDB={tablename} Returns the current database name that is being used s the default connection for accessing application data tables. Limitations for SQLIO 1. No support for multiple records types within one file. 2. No ISAM keys that do not exist in the record data. 3. No partial WRITE/UPDATE operations. 4. PLB TRANSACTION SAVE/TRANSACTION RESTORE is not supported using the SQLite database engine to perform the SQLIO operations. SQL Database Engine Notes SQLite 1. PLB TRANSACTION SAVE/TRANSACTION RESTORE is not supported using the SQLite database engine to perform the SQLIO operations. 2. If the PLB_SQLIO_DRIVER is set to a DBFILE connection, then all database notes documented for a DBCONNECT instruction apply. SQL Server 1. A SQL Server administrator needs to create and maintain any databases that SQLIO uses for a PLB application. If the SQL Server administrator does not create an application database, then everything goes to the default that has been defined by the administrator for a connection. 2. If the PLB_SQLIO_DRIVER is set to a DBFILE connection, then all database notes documented for a DBCONNECT instruction apply. MYSQL 1. A MYSQL administrator needs to create and maintain any databases that SQLIO uses for a PLB application. If the MYSQL administrator does not create an application database, then everything goes to the default that has been defined by the administrator for a connection. 2. If the PLB_SQLIO_DRIVER is set to a DBFILE connection, then all database notes documented for a DBCONNECT instruction apply. Error Codes I86 An error has occurred for a SQLIO operation. Subcodes: 1 - Insufficient memory for operation. 2 - File not found for FILE variable. 3 - File not found for AFILE variable. 4 - File not found for IFILE variable. 5 - A error has occurred executing the SQL statement for a SQLIO operation. 7 - Partial IO not allowed for SQLIO WRITE operation. 8 - The SQLIO file name is too large. The SQLIO file name size can not be larger than 255 characters. 9 - The '>' closing character is missing from the '' tag. 10 - The text name for a SQLIO prepare operation for an AFILE or IFILE does not match the schema definition. 11 - The SQLIO template name is too large. The template name size can not be larger than 255 characters. 12 - The SQLIO DATABASE name is too large. The name can not be larger than 255 characters. 13 - The tag keyword name is unknown. 14 - Unable to connect to the SQLIO database source. 15 - Missing alias name. Name was not found in the Sun_Sqlio_Alias system table. 16 - Unable to insert a file name into the Sun_Sqlio_File system table. 17 - The database name could not be found in the Sun_Sqlio_Databases system table. 18 - The column name could not be loaded into the Sun_Sqlio_Columns system table. 19 - The file name could not be added to the Sun_Sqlio_File system table because the same file already exists. 20 - A column name could not be found in the Sun_Sqlio_Columns system table during a SQLIO operation. 21 - An invalid column id number has been encountered in the Sun_Sqlio_Columns system table. The id number must be greater than or equal to zero. 22 - An invalid column offset value has been encountered in the Sun_Sqlio_Columns system table. The offset must be a value in the range of ( 0 <= value <= 65534 ). 23 - An invalid PLB column type value has been encountered in the Sun_Sqlio_Columns system table. The type must be a value defined as 0=DIM, 1=FORM, or 2=INTEGER. 24 - An invalid PLB column size value has been encountered in the Sun_Sqlio_Columns system table. The field length must be defined as follows: DIM ( size <= 65534 ), FORM ( size <= 32 ), or INTEGER ( size <= 8 ). 25 - An invalid PLB scale value has been encountered in the Sun_Sqlio_Columns system table. The PLB field scale value must in the range of ( -1 <= scale <= 32 ). 26 - An invalid SQL column type has been encountered in the Sun_Sqlio_Columns system table. The SQL column type value can not be less than zero and can not be greater than the maximum number of SQL types support for SQLIO operations. 27 - An invalid zero fill value has been encountered in the Sun_Sqlio_Columns system table. The zero file value can not be less than zero. 28 - A column offset value encountered in the Sun_Sqlio_Columns system table overlaps with another column offset value. Column offsets can overlap. 29 - The SQLIO 'file_name' is too large. The name can not be larger than 255 characters. 30 - The SQLIO 'index_name' is too large. The name can not be larger than 255 characters. 31 - The SQLIO 'table_name' is too large. The name can not be larger than 255 characters. 32 - Unable to connect to a SQL database source during a SCHEMA instruction IMPORT operation. 33 - Unable to find/get information about an existing SQL database connection. 34 - The SQLIO schema version found in the Sun_Sqlio_Version system table is invalid. 35 - The WRITE IFILE key does not match the key data found in the record data. The WRITE IFILE key specified must match the record data key field for SQLIO. 36 - The runtime has detected a SQL language syntax error this is caused by a SQL type mismatch. Most likely cause is the PLB_SQLIO_SQLTYPE keyword value is incorrect for the SQL database engine being used. 37 - Invalid key column specified in SQLIO schema. 38 - Missing File_Name in SQLIO schema. 39 - Missing key specification in SQLIO schema. Examples Example of SQLIO settings in Plbwin INI file [environment] ###################################################### # SQLIO Error are appended to log file 'sqldebug.txt' # PLB_SQLIO_DEBUG_LOG=>sqldebug.txt # ###################################################### # SQLite Driver # PLB_SQLIO_HOST=c:\sunbelt\dbtest90\database\tsqlqa.db PLB_SQLIO_DRIVER=1 # ###################################################### # SQL Server # #PLB_SQLIO_HOST=DBADO;;DSN=SqlIoDev #PLB_SQLIO_DRIVER=2 #PLB_SQLIO_SQLTYPE=2 #DBADO=sunwado.dll # ###################################################### Example of SQLIO Schema named 'orders.xml' SqLiteTest c:\sqlio_test\tsqlio.db 1 1 Test database SqlSrvTest DBADO;;DSN=SqlIoDev 2 2 Test database Orders.aam Orders.txt 5-9 Orders.isi Orders.TXT Orders custid Orders.TXT Orders ORDERID 1 4 0 0 0 1 0 0 CUSTID 5 5 0 0 0 1 0 0 PRODID 10 3 0 0 0 1 0 0 ORDERDATE 13 8 0 0 0 1 0 0 ORDERTIME 21 8 0 0 0 1 0 0 QUANTITY 29 5 0 0 0 1 0 0 Example of Program using SQLIO Schema to Create Orders SQL Table OrdersIn FILE OrdersOut FILE . SEQ FORM "-1" D50 DIM 50 . Schema INIT "orders.xml" . SCHEMA "default", IMPORT="orders.xml": FLAG=10 ;Replace mode & SQLIO . ERASE "orders.txt" ;Drop existing SQL table! . OPEN OrdersIn, "orders.txt" ;Existing txt file! PREP OrdersOut, "orders.txt" ;SQL table! . LOOP READ OrdersIn, SEQ; *LL, D50 BREAK IF OVER WRITE OrdersOut, SEQ; *LL, D50 REPEAT . CLOSE OrdersIn CLOSE OrdersOut Example of Program to READKS Orders Table Orders IFILE . Orderid DIM 4 Custid DIM 5 Prodid DIM 3 Orderdate DIM 8 Ordertime DIM 8 Quantity DIM 5 . Schema INIT "orders.xml" . SCHEMA "default", IMPORT="orders.xml": FLAG=10 ;Replace mode & SQLIO . . Open 'orders' table and cache 10 rows at a time. . OPEN Orders, "orders.isi" . LOOP READKS Orders; Orderid: ;Readks SQL table! Custid: Prodid: Orderdate: Ordertime: Quantity BREAK IF OVER DISPLAY *LL, "Orderid...:", Orderid, "...": "Custid....:", Custid REPEAT . CLOSE Orders - Modified the FILTER instruction to support two new expression operators that allow ISI keys to be skipped when executing IFILE READ, READKS, or READKP instructions. The new operators can either be specified using two new keyword options or by embedding the operator names directly into the filter expression. The new operator keyword names are named 'SKIPKEYS={nvar}' or 'SKIPONCE={nvar}'. These keywords are mutually exclusive and a compilation error is generate if both of these keywords are put into the same FILTER instruction. Optionally, the new operator string names can be embedded directly into the filter expression string as the first operator. In this case, the new operator string names are '$SKIPKEYS[nnn]' and $SKIPONCE$[nnn]'. When these operator string names are specified in the filter string, they must be the first operator in the filter string. In addition, the embedded sting name operators should not be used when the operator keywords are being used. Otherwise, this causes an execution error to occur. The basic operation of the SKIPKEYS and the SKIPONCE operators are identical except the SKIPONCE operator is only executed once for the first read instruction executed after the FILTER is executed. The intended use of these operators is to specify the number of ISI keys that are to be skipped when an IFILE READ, READKS, or READKIP instruction is executed. Format: [label] FILTER {file}{sep}{filter}[,FLAGS={flagvalue}]: [,SKIPKEYS={skipcount}]: [,SKIPONCE={skipcount}] Where: {skipcount} Optional. A previously defined Numeric variable or decimal number whose value specifies the number ISI keys to be skipped by an IFILE READ, READKS, or READKP instruction when the {file} is an IFILE. Note: 1. The {skipcount} value has a range from 0 to 65353. Otherwise, an I85 subcode 131 occurs. 2. The SKIPKEYS and SKIPONCE operators can only be executed for an IFILE file variable. Otherwise, an I85 subcode 132 error occurs. The compiler enforces this rule when the operator keyword syntax form is being used. 3. The use of the SKIPKEYS/SKIPONCE operators allows very specialized behavior as the runtime processes the keys in an ISI file. The PLB read instruction skips the specified number of ISI keys before the read results are returned to the user application. The use of these operators can give improved performance by minimizing the number PLB instructions when the ISI key structure is known. The improved performance can be more obvious when the Data Manager is being used. 4. The {file} variable skip count is always initially cleared/zeroed when a FILTER instruction is executed. 5. When the SKIPKEYS skip count is used, the skip count remains in affect for all IFILE read operations until another FILTER instruction is used to reset the skip count. This gives the PLB program the ability to set and clear the SKIPKEYS count as required. 6. The SKIPONCE skip count executes exactly like the SKIPKEYS operator except the SKIPONCE is ONLY executed ONCE for the next isam read operation after the FILTER execution. 7. When the $SKIPKEYS$ or $SKIPONCE$ string keys used, they must be specified without any embedded blank characters. Example 1: (Using 'SKIPKEYS=nnn' keyword option) Skip every other key when performing each READKS. IFILE IFILE ONE INTEGER 1,"1" . OPEN IFILE, "test" . FILTER IFILE, "", SKIPKEYS=ONE LOOP READKS IFILE;S$CMDLIN BREAK IF OVER DISPLAY "Data:",*LL,S$CMDLIN REPEAT . FILTER IFILE, "" ;Clears all filtering! ;Skip count cleared implicitly! . Example 1A: (Using '$SKIPKEYS$[nnn]' string name operator) Skip every other key when performing each READKS. IFILE IFILE . OPEN IFILE, "test" . FILTER IFILE, "$SKIPKEYS$[1]" LOOP READKS IFILE;S$CMDLIN BREAK IF OVER DISPLAY "Data:",*LL,S$CMDLIN REPEAT . FILTER IFILE, "" ;Clears all filtering! ;Skip count cleared implicitly! . Example 2: (Using 'SKIPKEYS=nnn' keyword option) . . Read IFILE KEY to position in ISI file key tree. . Set SKIPKEYS keyword to skip 20 keys for every READKS. . After first READKS, clear the skip count to read . every record after the first 20 keys have been skipped. . IFILE IFILE KEY DIM 10 . OPEN IFILE, "test" . MOVE "SOMEKEY", KEY READ IFILE, KEY;S$CMDLIN ;Position to ISI key FILTER IFILE, "", SKIPKEYS=20 ;Set to skip 20 ISI keys LOOP . . This READKS skips 20 ISI keys and returns the record for . the 21 key. An OVER can be returned if skip count is larger . than the number of keys the remain in the ISI tree. . READKS IFILE;S$CMDLIN BREAK IF OVER DISPLAY "Data:",*LL,S$CMDLIN . . After the first 20 keys have been, the skip count is cleared . to allow every ISI key to be accessed. . FILTER IFILE,"", SKIPKEYS=0 ;Explicitly clear skip count REPEAT . Example 2A: (Using '$SKIPKEYS$[nnn]' string name operator) . . Read IFILE KEY to position in ISI file key tree. . Set $SKIPKEYS$ to skip 20 keys for every READKS. . After first READKS, clear the skip count to read . every record after the first 20 keys have been skipped. . IFILE IFILE KEY DIM 10 . OPEN IFILE, "test" . MOVE "SOMEKEY", KEY READ IFILE, KEY;S$CMDLIN ;Position to ISI key FILTER IFILE, "$SKIPKEYS$[20]" ;Set to skip 20 ISI keys LOOP . . This READKS skips 20 ISI keys and returns the record for . the 21 key. An OVER can be returned if skip count is larger . than the number of keys the remain in the ISI tree. . READKS IFILE;S$CMDLIN BREAK IF OVER DISPLAY "Data:",*LL,S$CMDLIN . . After the first 20 keys have been, the skip count is cleared . to allow every ISI key to be accessed. . FILTER IFILE,"$SKIPKEYS$[0]" ;Explicitly clear skip count REPEAT . Example 3: (Using 'SKIPONCE=nnn' keyword option) . . Set SKIPONCE keyword to skip count 1 key (First key!) . Read IFILE by KEY using a skip count. . This example checks for a duplicate key in a single . read operation. . IFILE IFILE KEY DIM 10 . OPEN IFILE, "test" . FILTER IFILE, "", SKIPONCE=1 ;Set to skip 1st key! . MOVE "ValidKey", KEY READ IFILE, KEY;S$CMDLIN ;Reading with skip once filter! ;Skip count cleared after read! IF OVER DISPLAY "No duplicate key!" ELSE DISPLAY "Duplicate key exists!" ENDIF . Example 3A: (Using '$SKIPKEYS$[nnn]' string name operator) . . Set $SKIPONCE$ to skip 1 key (First key!) . Read IFILE by KEY using a skip count. . This example checks for a duplicate key in a single . read operation. . IFILE IFILE KEY DIM 10 . OPEN IFILE, "test" . FILTER IFILE, "$SKIPONCE$[1]" ;Set to skip 1st key! . MOVE "ValidKey", KEY READ IFILE, KEY;S$CMDLIN ;Reading with skip once filter! ;Skip count cleared after read! IF OVER DISPLAY "No duplicate key!" ELSE DISPLAY "Duplicate key exists!" ENDIF . - Modified the PLB_DEBUG keyword to support a mode named 'OND3'. The 'OND3' mode causes the runtime to initiate the internal runtime debugging the same as when using the '-d3' runtime option. Using the 'OND3' mode allows the PLB programming codes to be stored in the log files. When the 'ON' mode is being used, the programming codes are not stored in the log files. PLB_DEBUG={ON|OND3|OFF} - Modified the CLOCK SYSDATE instruction to a new field that indicates whether the time has been adjusted for daylight saving time or not. The new field is appended and has a size of 2 characters with a leading blank. The new SYSDATE total byte size is now 33 bytes. The new field is reported as "00", "01", or "-1". The "00" value indicates that the time is reported as standard time and daylight saving time is not in effect. The "01" value indicates that the time is reported and the daylight saving time is in effect. The "-1" value indicates that the status of the daylight saving time is unknown. Also, the timezone field is now adjusted for the daylight saving time. The runtime adjusts the timezone field value only when the daylight saving time is in affect. WARNING: If the Windows OS configuration is changed to disable the automatic daylight saving time, the timezone field for the CLOCK SYSDATE instruction is not available from the OS functions. In this case, the timezone field is reported with a zero timezone value. - Modified the SQLite database engine to provide extended io error data that is reported by the DBERROR instruction. - Corrected a GPF problem for the HTTP instruction that was caused by a buffer overflow when using the *POSTMESSAGE option. - Corrected a problem where the COUNTKEYS instruction was returning an erroneous key count when the start key was greater than any keys in the ISI file. A value of zero should have been returned in this case. - Corrected a problem where a GPF error could occur if a SFORMAT instruction was executed to format a DIM to a size larger than the original size of the DIM variable. - Corrected a problem where a filtered IFILE READKS/READKP operation might leave the read variable list untouched without setting the OVER flag when the filter mismatch was encountered. This problem could only occur when multiple records were being processed with filtering in a single read operation. - Corrected a GPF error that would occur if a FILTER was being set for a file variable that has never been opened. - Corrected a problem for a READ IFILE by key when using record locking and a FILTER expression. It was possible that the record returned to the end-user application was not locked when the FILTER caused some records to be bypassed while searching for a record to match the filter. Additionally, the first record that was encountered during the filtered search was incorrectly being left in a locked state. - Corrected a problem where a PACKKEY instruction was moving unexpected data to the destination variable when the first source variable was a NULL string and it was the same as the destination variable. This problem was occurring when the NULL string for the first source variable had a FP value of zero and a LL value that was not zero. If the NULL string had both the FP and LL had values of zero, the problem did not occur. The expected result for the destination is that the destination should be blank filled with a FP set to one and the LL set to the PL value. - Removed a trailing WS from the QUIT command. This change is being made to prevent a M80 subcode 34 error accessing some email servers. - Corrected various runtime error messages for spelling and to give the correct runtime name that is being executed. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Modified the Windows runtimes to log system information about the processor where the runtime is executing. - Modified the LISTVIEW SetItemTextAll method default operation to allow characters less than 0x20 except for 0x00 to be stored into a Listview without terminating the method. If the options mask value of LV_CSVRD_NOBINARYCHARS is set, the SetItemTextAll method executes the same as previous versions where any character less than 0x20 terminates the SetItemTextAll instruction. - Modified the LISTVIEW SetItemTextAll method to support a new bit mask value for the *Options parameter as follows: $LV_SETITEM_NOBINARYCHARS 0x80 This bit mask value causes the SetitemTextAll method to terminate its execution when any character less than 0x20 is encountered in the *TEXT input data. - Modified the Windows runtimes to correct a problem where the COMSTAT/COMCHECK 'is pending' state flag could identify a true status incorrectly. The invalid true 'is pending' state flag could cause the COMATTACH instruction to hang causing the current Windows window to become non-responsive for the PLB application. - Corrected a problem where the COPYBYTES instruction would report an invalid size after a file larger than 4GB was copied. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Corrected a problem where the enhanced COPYFILE/COPYNEXT instructions would not properly copy a file that was not larger than 4GB. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Added UserData parameter to the AddPanel method of a StatusBar object. This allows the USERDATA property for a STATUSPANEL to contain data as it is created. - Added UserData parameter to the AddButton method of a ToolBar object. This allows the USERDATA property for a TOOLBUTTON to contain data as it is created. - Corrected a problem where the LABELTEXT object was not being refreshed when the BgColor/FgColor properties were changed. - Corrected a problem where the EventSend instruction was changing the OVER flag for all objects used. The OVER flag should ONLY be affected when the '*Client' internal object reference is used for the Automation Server runtime. This problem has existed since release 8.4E. The OVER flag should NOT be affected for using any other GUI objects. - Corrected a problem where GUI objects would not be displayed when the container for the objects was a PANEL object and the objects were activated from a COLLECTION using the VISIBLE property. - Corrected a problem where the GetTabParam was returning the wrong value. - Corrected a problem where a SETPROP that changed the SCROLLBAR property was not showing or removing the scrollbars from a PANEL object. - Corrected a problem where the resizing of a WINDOW object could cause the transparent background of a TOOLBAR to display garbage. - Corrected a problem where the resizing of a WINDOW object could cause the data in a TREEVIEW window to disappear if the TREEVIEW is also being resized. - Corrected a problem where the resizing of a WINDOW object could cause garbage to appear within the client area of a LISTVIEW if the LISTVIEW object is also being resized. - Corrected a problem where the ALT-Key sequence for a BUTTON object was not working after a SETPROP TITLE instruction was executed for the BUTTON object with a ampersand character in the title string. ------------------------------------------------------------------------------- PLBCON, PLBCONET - Modified the SETWTITLE operation to out to a PLBCON console title bar. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the AcceptTab to only attempt to position to the next visible cell either forward or backward. This corrects a problem where multiple events were being sent for a single tabbing action. ------------------------------------------------------------------------------- PLBMETH.INC - Added the $LV_SETITEM_NOBINARYCHARS integer for the LISTVIEW SetItemTextAll method. - Added the $LV_XMLWR_OUTPUTHEADER and $LV_XMLWR_NAMEATTR integer definitions for the LISTVIEW SaveXmlFile method. ------------------------------------------------------------------------------- PLBWSEC.DLL - Modified to eliminate U21 subcode 10 errors that were occurring after users prematurely kill the PLBWIN tasks. ------------------------------------------------------------------------------- ODSBAC32.DLL - Modified isam key specifications in the key descriptions to allow a single numeric character as the key. Example: ISI001=c:\temp\test.isi 1-5,6 ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to give a warning message when a duplicate Sunbelt property is detected in CREATE and SETPROP instructions. - Corrected a problem that could corrupt the symbol table when a DIM duplicate label was encountered. This problem would cause unexpected compilation errors to occur after the duplicate error occurred. The problem would only occur when a program had a very large number of data variables and the original DIM variable existed at the beginning of the program source while the duplicate DIM label existed near the end of the program source. - Added the keywords named SKIPKEYS and SKIPONCE to the FILTER instruction. ------------------------------------------------------------------------------- SCHEMAEDITOR - Corrected import of INIT fields. - Corrected import Auto-Dim pointer fields. Ex: x dim ^5 - Added SQL IO schema tables. - Corrected a bug in the Named IO databases where the wrong file name was displayed in the listview. ------------------------------------------------------------------------------- SUNIDE - Corrected a bug where the IDE would initialize the PLF extension to use the legacy designer. - Corrected an initialization bug that would cause erratic behavior when multiple spaces were specified on the command line before any options. - Changes Browse Labels cleanup logic to reduce post build processing time. - Modified project open logic to not immediately load browse information for programs. Browse info is now loaded when programs are opened for editing. - Added tooltip to the files tab control to show the full path to the file. - Modified logic to try to locate includes using PLB_PATH if a full path was previously stored in the project file when setting up the Source Map. This way it doesn't show a bogus not found icon in the treeview. - Added behavior option to run GUI debugger as a separate process outside the control of the IDE ------------------------------------------------------------------------------- DBGIFACE (Graphical Debugger for IDE) - Corrected the right click variable display for a form variable where the word "Form" was appended to the variable name. - Performance enhancement when watch variables window is open. - Modified to remember main window position when running stand alone. - Fixed Remove Watch button to remove multiple selected variables in the list. ------------------------------------------------------------------------------- EDITOR - Corrected a C15 error that could occur in DBEXPLORER. - Added option to print code structure lines. ------------------------------------------------------------------------------- SUNCS21.OCX - Corrected a display problem that would occur when using the horizontal split view and code was folded in the upper view. This was causing code in the upper view to overlay the lower view. ------------------------------------------------------------------------------- DESIGNER - Added an integrated designer layout feature (Tools/Options/Layout) that docks the toolbox, properties, and outline window on one side of the designer's main screen and the user's design forms and code editors on the other. The integrated layout makes execution of the designer on systems with limited screen space much easier. - Added the ability to pin and unpin the window containing the toolbox, properties window, and outline. When unpinned, the window will automatically collapse to a minimum size as the mouse is moved beyond the window. - Corrected the definitions file for the Picture property to prevent I05 errors when setting the property for a button object. - Corrected the definitions file for the Prefix property to allow the value to be restored during form loading. - Corrected issues with the form backup open. The opened form is now treated as a new form once opened and the SaveAs logic invoked during the save function. - Corrected an issue that occurred when all tab panels were deleted from a tabcontrol. - Added a graphical property editor to the Anchor and Dock properties. - Corrected computation of a tabcontrol control's client area height when the tab control's height was zero. - Clicking the dialog button ("...") in the property editor for an imagelist property changes the selected object to the imagelist. - Redesigned the ActiveX controls window to provide additional information and allow easier addition and deletion of controls. - Corrected issues with the Image property type. - Corrected an issue involving the height and width of splitters during a copy and paste operation. - Added the ability to store an object as a user defined object. A toolbar panel lists user defined object and the may then be added to other forms. The objects may be a simple object or a compound object such as a panel with child objects. - Added the ability to register ten user events for each object. The user event code will be transferred during copy and paste operations and may be triggered using an EventSend instruction. - Modified the toolbox drag/drop operations to prevent dropping objects onto forms that are inactive. - Changed the Designer Generated Code option for tabcontrols that contain tabpanels from a designer option to a tabcontrol option. This allows a form to have both designer and user controlled tabcontrols. The option was moved to the TabPanel Editor form. - Added support for the UserData property to TabPanels, StatusbarPanels, ToolButtons, and MenuItems. - Corrected the resizing of tab panels on docked tab controls during a paste operation. - Added the notation of the currently selected object and the current parent object to the statusbar when using the integrated layout option. - Added the font properties to the RichEditText object. - Added logic to ensure that no two menus have the same menu order property. - Modified to store the designer.ini file in the $AppData\Sunbelt Designer folder. - Removed saving of the ini file data from the error handling routine. - Added logic to adjust the menu order when a menu is assigned a conflicting menuorder. - Add toggle buttons in the outline window to allow all forms to be displayed or only the active form. ------------------------------------------------------------------------------- WATCH - Added keyboard shortcuts to toolbar tooltips. - Uses Segoe UI font if available. - Corrected an error that occurred during the loading of a configuration file with more than twenty saved connections. - Increased the number of saved connections to fifty. ------------------------------------------------------------------------------- DBEXPLORER - Removed the unsupported boolean column type. - Corrected an issue regarding the parsing of table primary key and foreign key constraints. - Modified treeview to show key icon for columns that are part of the primary key. - Modified to load editor module from PLB_SYSTEM to prevent conflicting versions. -------------------------------------------------------------------------------