ANN: kbmMW Professional and Enterprise Edition v. 5.07.00 released!

We are happy to announce v5.07.00 of our popular middleware for Delphi and C++Builder.

If you like kbmMW, please let others know! Share the word!

We strive hard to ensure kbmMW continues to set the bar for what an n-tier product must be capable of in the real world!

Notice that kbmMemTable v. 7.81.00 or newer is a prerequisite to this update.

This release contains major new features and loads of other updates including:

  • Added support for RAD Studio 10.3 Rio
  • Added new ImportDBSchema feature to import schema info from databases, generating Delphi units that directly can be used for fast ORM access.
  • Added support for CPU hardware based true random numbers via the new unit kbmMWCPUTRNG (Enterprise Edition)
  • New Split LINQ command for splitting data into batches/groups
  • New cool features in the Scheduler like InAMoment for very easy start of asynchronous code affecting the GUI.
  • Added support for UPSERT SQL statement in SQL rewriters, ORM etc.
  • New VERY fast VERY scale-able request/response type server side transport TkbmMWTCPServerTransport.

Please check the end of this post for a detailed change list.

Professional and Enterprise Edition is available for all with a current active SAU. If your SAU has run out, please visit our shop to extend it with another 12 months.

CodeGear Edition may be available for free, but only supports a specific Delphi/Win32 SKU, contains a limited feature set and do not include source.

Please visit to download.


kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC on .Net, Win32, Win64, Linux, Java, PHP, Android, IOS, embedded devices, websites, mainframes and more.

Please visit for more information about kbmMW.


Components4Developers is a company established in 1999 with the purpose of providing high quality development tools for developers and enterprises. The primary focus is on SOA, EAI and systems integration via our flagship product kbmMW.

kbmMW is a portable, highly scalable, high end application server and enterprise architecture integration (EAI) development framework for Win32, ..Net and Linux with clients residing on Win32, .Net, Linux, Unix, Mainframes, Minis, Embedded and many other places. It is currently used as the backbone in hundreds of central systems, in
hospitals, courts, private, industries, offshore industry, finance, telecom, governements, schools, laboratories, rentals, culture institutions, FDA approved medical devices, military and more.

5.07.00 Dec 9 2018

 18,262 total views,  57 views today

Author: kimbomadsen

4 thoughts on “ANN: kbmMW Professional and Enterprise Edition v. 5.07.00 released!

  1. Nice Christmas Gift!!
    But I read this:
    – Added support for UPSERT SQL statement which works like an UPDATE or INSERT
    combined statement. If the UPDATE succeeds, no INSERT is made otherwis
    records are INSERTed.
    Isnt The other way? “If the INSERT succeeds, no UPDATE is made otherwise
    records are UPDATED”
    This is recalling MySQL ‘Insert ….. On Duplicate Key Update….’

    1. Hi, yes and no. It depends on the database what happens. Using pure ANSI92, it will rewrite to a special INSERT combined with a SELECT followed by UPDATE. On Oracle it will either use UPDATE followed by conditional INSERT, or MERGE. On MSSQL it will convert to MERGE. In SQLite it will do an UPDATE that may fail silently followed by a special INSERT/SELECT combo.
      Basically there are no one perfect way to do an UPSERT. Each database has its “best practice” regarding that.

    1. No, currently MySQL will be rewritten to ANSI SQL compliant code for UPSERT that will work with older versions of ANSI SQL.

      upsert table1 (fld1,fld2) VALUES (10,20) WHERE fld3>10

      MySQL, Interbase and PostgreSQL:
      INSERT INTO table1 ( fld1,fld2 ) SELECT 10,20 FROM (SELECT 0 as i) AS mutex LEFT JOIN table1 ON (fld3 > 10) WHERE i=0 AND fld3 IS NULL;
      UPDATE table1 SET fld1=10,fld2=20 WHERE (fld3 > 10)

      MERGE INTO ‘table1’ USING ( SELECT 10,20 FROM DUAL) ON (fld3 > 10) WHEN MATCHED THEN UPDATE SET fld1=10,fld2=20 WHEN NOT MATCHED THEN INSERT ( fld1,fld2 ) VALUES ( 10,20 );

      MERGE INTO table1 USING ( SELECT 10,20 ) AS __src(_fld1,_fld2) ON (fld3 > 10) WHEN MATCHED THEN UPDATE SET fld1=10,fld2=20 WHEN NOT MATCHED THEN INSERT ( fld1,fld2 ) VALUES ( 10,20 );

      UPDATE table1 SET fld1=10,fld2=20 WHERE (fld3 > 10);
      INSERT INTO table1 ( fld1,fld2 ) SELECT 10,20 WHERE (SELECT Changes()=0);

      You can try the ORM sample “Standalone” and type in various statements and have them rewritten.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.