eXpress++ Build 267 is released

Announcements about new features or events.
Post Reply
Message
Author
User avatar
rdonnay
Site Admin
Posts: 4774
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

eXpress++ Build 267 is released

#1 Post by rdonnay »

If your subscription is current, send me a private email and I will give you download instructions.

Code: Select all

           ---------------- New to 2.0 (build 267) ----------

 1489. Added new class: DC_BrowseMessage().  This is a convenient method of
       displaying progress messages in a window that runs in another thread.
       Message text, font and color is displayed in a browse object.  See the
       sample program in .\samples\browse\message.prg.

 1488. Added new function: DC_BrowseSqlQuery(). This is a data browser that
       uses the :dataBrowse class of Sqlquery, located in SqlQuery.Dll.  It
       employs all the features and advantages of browsing a workarea with
       column filtering, exporting, printing, editing, etc.  See the example
       in .\Samples\Browse\Filtered.Prg

 1487. Added new class: DC_DacSession().  This is a class that inherits from
       DacSession(). It contains some new iVars that are required for
       DC_DbGather() to do updates and inserts via SQL.  The class has an
       iVar named "SqlExecuteBlock".  This is a code block that receives SQL
       statements and executes the statement.  This should contain a call to
       your custom SQL execute function.

 1486. Added new function: DC_GetSqlStatement().  This returns the SQL SELECT
       statement for the current work area.  If no SQL cursor exists, then it
       will return "".

 1485. Added new function: DC_GetSqlTableName().  This returns the name of the
       table that is associated with the SQL statement for the current work
       area.  This is needed by DC_DbRecord2SqlUpdate() and
       DC_DbRecord2SqlInsert() when creating the SQL UPDATE and SQL INSERT
       statements from a record object.

 1484. Added new function: DC_DbRecord2SqlUpdate().  This returns a SQL UPDATE
       statement from a record object.  The record object must contain a field
       named UUID Char(36) and the field must not be empty.  This is required
       to insure that the correct record is updated.

 1483. Added new function: DC_DbRecord2SqlInsert().  This returns a SQL INSERT
       statement from a record object. If the record object contains a field
       named UUID Char(36) its value will be set to UUIDToChar(UUIDCreate())
       if it is empty.

 1482. Added new <cNumPrefix> parameter to DC_Array2Csv() and
       DC_WorkArea2Csv().  The default is '='. A <cNumPrefix> is placed before
       each cell output that is a character string which starts with a number.
       This insures that CSV files imported into Excel will display character
       strings correctly.  Use a "" null character for no prefix.

 1481. Added new database management and query tool: SqlQuery.

       SqlQuery.Exe is a tool written entirely in Xbase++ using eXpress++.

       The Query tool allows a user to make multiple connections to ADS, ODBC
       or PostGreSql data sources.  Do don't need to know anything about SQL
       to use this application to query all of your data tables.

       A treeview window displays the tables, fields, views, scripts and index
       info for each data connection.

       It allows you to browse data in ISAM or SQL SELECT mode.
       You can pick fields (columns) to browse then filter the data using a new
       feature built into the eXpress++ DCBROWSE system that takes advantage of
       SQL WHERE clauses for fast filtering and ORDER BY for sorting.

       You can tag rows and columns for printing or exporting to Excel, XML,
       Json, HTML, Csv, Database, etc.

       You can execute Views that are already in the data source or create your
       own views using SQL commands and save them to the SqlQuery scripting
       dictionary.

       These features can also be built into your own applications and work
       with workareas or arrays of data objects.

       You do not need to use ADSDBE, ODBCDBE or PGDBE in your applications to
       use this SQL capability in your applications if you are using .DBF/.CDX
       files.  You only need the free ADS client DLLs which are in the runtime
       folder of the Xbase++ Professional Version.
       (Ace32.dll,Axcws32.dll,aAdsLoc32.dll)

       You do not need to create an Ads Data-Dictionary to use this capability
       because SQL queries can be made against a set of free tables.  However,
       if you want to create a data-dictionary you don't need the Ads
       Architect to do this.  It can be created in SqlQuery.Exe.

       See the SqlQuery tutorials on You Tube.

 1480. Added new functions for converting Xbase++ values to JSON (Java Script
       Notation).

       DC_Var2Js()
       DC_Array2Js()
       DC_Object2Js()

       These functions will work in Xbase++ 1.9 and 2.0.

 1479. Added a new parameter to the DC_BrowseAutoseek() function.

       <bScan> is a code block to use to do the Ascan() for the element
       of an array if the data source is an array.  If <bScan> is a NIL
       the scan will be for a match in the edit buffer.

 1478. Added new function: DC_FindGoodIndex(<cFieldName>).

       This will search the index keys of all index tags to find the tag that
       will match <cFieldName>.  This is used to find an index that can be
       used to seek a value that would be relevant to <cFieldName>.

 1477. Added new parameters to the DC_DbScatter() function>

       <cRecNoFieldName> is the name of the iVar in the record object which
       will be used to store the Record Number (RecNo()).  The default is
       RECORD_NUMBER.

       <cDeletedFieldName> is the name of the iVar in the record object which
       will be used to store the DELETED status of the record (Deleted()).
       The default is RECORD_DELETED.

       <lTrimFields> will trim the values in iVars that are type C or M.

 1476. Added 2 new functions: DC_VarSave() and DC_VarRestore().  These
       functions will save and restore a variable of any type to/from a file.

       DC_VarSave(<xVar>, <cFileName>) -> <lStatus>
       DC_VarRestore( <cFilename> ) -> <xVar>

 1475. Added 2 new parameters to the DC_AdsSqlStatement().

       @<cXml> is a variable, passed by reference, that is used to store
       the data as an XML stream.

       @<cJson> is a variable, passed by reference, that is used to store
       the data as JSON (Java Script Object Notation).

 1474. Added new parameters to DC_DbRecord() / DC_DbRecordObject() functions.

       DC_DbRecord([<cClassName>],[<cRecnoFieldName>],[<cDeletedFieldName>],
                   [<aFields>]):new()

       <cRecNoFieldName> is the name of the iVar in the record object which
       will be used to store the Record Number (RecNo()).  The default is
       RECORD_NUMBER.

       <cDeletedFieldName> is the name of the iVar in the record object which
       will be used to store the DELETED status of the record (Deleted()).
       The default is RECORD_DELETED.

       <aFields> is a single-dimensional array of field names (iVars) to
       include in the record object.  If <aFields> is a NIL, then all fields
       in the work area will be included.

 1473. Added new function DC_WTFWhen( <bWhen> ).  This is used to set a code
       block which will cause any WTF (debug) command in the code to be
       suppressed when evaluating <bWhen> returns a .FALSE.

 1472. Added 2 parameters to the DC_DbGather() function.

       <oDacSession> is a DacSession() object that connects to a datasource
       which supports SQL statements.  This will be used as an alternative
       method for updating or adding a record using SQL in the event that
       a record could not be locked.  This can happen if the current work area
       is a STATIC SQL Cursor.  If <lNew> is TRUE, then then an INSERT
       statement will be created.  If the current work area contains a field
       named UUID, a new 36-byte UUID will be created.  If <lNew> is FALSE
       and a field named UUID exists and is not empty, then an UPDATE
       statement will be created using the UUID to find the correct record
       to update.

       <cLockFailMsg> is the message to display if the record could not be
       updated or added.

 1471. Added new clauses to DCPUSHBUTTON, DCADDBUTTON, DCPUSHBUTTONXP and
       DCADDBUTTONXP.  The DELAYACTION <bActionDelay> CLICKDELAY <nDelay>
       clause allows for 2 different actions for a push button.  This is
       intended for touch-screen applications however it also works with the
       mouse.  If the user holds the button for longer than <nDelay> seconds,
       the <bActionDelay> code block will be evaluated, otherwise the regular
       <bAction> code block will be evaluated.  See the sample program in
       .\samples\buttonxp\buttondelay.prg.

 1470. Added a 5th parameter to DC_WorkArea2Csv() - <lHeader>. Default is
       TRUE.  Setting <lHeader> to FALSE will suppress the header in the
       output CSV.

 1469. Added many new features to the DCBROWSE system to give the user much
       improved searching and filtering capability and performance.  This
       concept works with browses of arrays, record objects, ISAM work areas
       and SQL work areas. To experiment with these features, run the
       SqlQuery.exe program in the ..\SqlQuery folder.

       a. New clauses for the DCBROWSE command:

         SUBCLASS 'DC_XbpBrowseFiltered()' invokes a class that is used to
         create a means for users to easily filter the browse when
         right-clicking in the heading of the browse.  It will drop down a
         dialog for entering a value for filtering based on the contents of
         the column.  Filtering is done on an AND basis only, meaning that
         filtering 2 or more columns will scope down to less and less records
         being display.  The filtering system will use dbFilter and scoping if
         there is no SQLSESSION clause being used, otherwise it will use a SQL
         statement with a WHERE clause, this being a much faster technique.
         Left-clicking the heading will sort based on an Index tag that
         matches the data, if one can be found, otherwise it will use the
         ORDER BY clause of the SQL statement.

         SQLSESSION <oDacSession> is a pointer to a DacSession() object that
         supports SQL.  This is used with the filtering system to create
         sub-queries using the WHERE clause of SQL statements.

         CACHECOLUMNS <nColumns> [AUTOADD] is used to improve performance when
         creating a browse that has a lot of columns.  <nColumns> is the
         maximum number of columns that will be added to the browse regardless
         of the number of DCBROWSECOL commands used.  The remaining columns
         will be cached and created "on demand" by several methods.  AUTOADD
         will create columns when the cursor or horizontal scrollbar hits the
         last displayed column.  Columns can also be added to the browse using
         methods of the DC_XbpBrowseFiltered() class.

       b. New clauses for the DCBROWSECOL command:

         SUBCLASS 'DC_XbpColumnFiltered()' enables the filtering system for
         the column as described above for 'DC_XbpBrowseFiltered'.

         SQLFIELD <cSqlField> is the name of the database field that is
         associated with the column.  This is needed only if the column
         heading is not the same as the field.  It requires that the DCBROWSE
         command also use the SQLSESSION clause so that column filtering
         can use the WHERE <cSqlField> clause in the SQL statement.

         SQLSORT is used to create a SORT button in the header which contains
         the caption of the heading.  This is only used as a replacement for
         the SORT <bSort> clause.  It requires that the DCBROWSE command also
         use the SQLSESSION clause so that the sort can be accomplished using
         the ORDER BY clause of an SQL statement.

         INDEXTAG <cTagName> is provided for sorting using an INDEX (when
         available).  Some Advantage Server SQL cursors also provide indexes
         that are in .CDX files to the work area.  If the index is available
         it will be used, otherwise an ORDER BY clause will be used.

         CACHECOLUMN <nCacheMode> is used to override the default behavior of
         column caching as set in the DCBROWSE CACHECOLUMNS command.
         <nCacheMode> can be one of the following values:

         DCBROWSECOL_CREATE_YES - Create column regardless of position of
                                  column in the browse and the setting DCBROWSE
                                  CACHECOLUMNs.

         DCBROWSECOL_CREATE_NO - Do not create column regardless of position of
                                 column in the browse and the setting DCBROWSE
                                 CACHECOLUMNs.

         IF this clause is not used, then the setting of DCBROWSE CACHECOLUMNS
         will determine if the column is initially created.

       See the example in .\Samples\Browse\Filtered.Prg.  Source for how to
       implement a Filtered browse is in .\Source\SqlQuery\Sqlquery.Prg.
       Search for METHOD Sqlquery:DataBrowse.


 1468. Fixed a bug in DC_XbpMle() caused by addition of Spell-x that can cause
       a runtime error.

 1467. In build 265, 2 new Get-Set functions were added due to complaints from
       eXpress++ users that they wanted to control the behavior of the
       SetInputFocus and KillInputFocus behaviors of DCGET objects.  Those
       functions are DC_XbpGetSetInputFocusBlock() and
       DC_XbpGetKillInputFocusBlock().  They are used to set a code block for
       the entire application's DCGET behavior.  Now there has been some
       complaints that when this was implemented the default behavior also
       changed.  If you want the same behavior as in builds 264 and earlier
       then add the following to the beginning of your application:

       DC_XbpGetSetInputFocusBlock(;
           {|x,y,o| IIF(o:isGetDataOnLostFocus,o:getData(),nil), ;
               IIF(!Empty(o:get:buffer),o:get:pos := o:savePos,nil), ;
               o:DateFlag := .T., ;
               o:home(), ;
               DC_HiliteGets(o,1,o:getList:getOptions[nGETOPT_HILITECOLOR]), ;
               DC_ColorGets(o,1,o:getList:getOptions[aGETOPT_COLORGETS]), ;
               DC_PopupButtonShow(o,.t.)})

       DC_XbpGetKillInputFocusBlock(;
           {|x,y,o| o:savePos := o:get:pos, ;
               o:DateFlag := .T., ;
               IIF(o:isGetDataOnLostFocus,o:getData(),nil), ;
               IIF(o:isGetDataOnLostFocus,o:setData(),nil), ;
               o:Home(), ;
               DC_HiliteGets(o,1,o:getList:getOptions[nGETOPT_HILITECOLOR]), ;
               DC_ColorGets(o,1,o:getList:getOptions[aGETOPT_COLORGETS])}, ;
               DC_PopupButtonShow(o,.f.)})

 1466. Fixed a bug in DCTREEITEM that caused a tree branch to show double the
       amount of tree items if branch was double-clicked the first time to
       expand the branch.
The eXpress train is coming - and it has more cars.

MIGUELON
Posts: 135
Joined: Wed Feb 10, 2010 10:55 am

Re: eXpress++ Build 267 is released

#2 Post by MIGUELON »

Hola Roger desearía comprar la ultima versión de eXpress ++

Envíame la factura a miguel@silexinformatica.org

Saludos
Miguel

Post Reply