Wednesday, July 8, 2009

kbmMemTable review

Some time ago, Kbm developer wrote "Invalid publication of licensed materials!" we decided to respond in kind.

Website overview:
- Components4Developers, well, if you look at their site, it uses frames, strange fonts (Arial Narrow?) i thought website design should be modern. I wish it looked more better.

- Some of their partners Jasmine Components (dead), StarMax (dead), (is not active?) may not even use Components4Developers anymore :)

- Either it's just me or CodeGear's logo is distorted? In the age of modern website design, it's just plain unprofessional.

- Media page is not available (coming soon) since three years ago (make that four years since 2005).

- Case study for Apollo is sooo big I can't see it. no really, the thing flickers and Firefox hides it.

back to the review.

kbmMemTable 6.10 - is it really necessary?
Many years ago, from Delphi 4/5/6/7 times, kbmMemTable was a must-have component during those days. Mr Kim made it for free and the former website was linked to his optical scanning business website. Later, kbmMemTable was getting more better and better.

The wannabe database
I really wish kbmMemTable would start to grow up, like other in-memory tables, like the one found in RemObject's remoting datasets, or for ease of use, like in DevExpress memory dataset (it comes with DevExpress and good with filters), or DBISAM's in-memory table (you can save and load to in-memory DBISAM) or Nexus in-memory database.

For starters, if you try to, say, store 10000 records in-memory (fair enough, for a report), what about the "other" 100,000 records? then you need a database library, such as DBISAM/ELEVATEDB/NEXUSDB. Then wait! they have their own in-memory tables. It simply does not make sense to use kbmMemTable and say, use ElevateDB or Nexus in-memory tables.

Ditto for MySQL/ MSSQL/ Oracle access. If you get UniDac/ or AnyDac or RemObjects, they come with their own in-memory table component.

Of course, you could use kbmMemTable, but with a choice, you could go "native" and delete kbmMemTable...

DelphiHater remembers the time when Mr. Kim was advertising his kbmMemTable in the DevExpress dxmemtable newsgroups and asked "to stop promoting competing products" :)

Also, the time when released their shareware in-memory table (without sources) and there were long fingers pointing about "copied" code, but any proof? I don't know except that most of kbmMemTable sources were for looking and, and copying ideas from.

Anyone remembers the WideString fiasco which needed a "paid" upgrade to fix? or how the primary key would go haywire after some time.

The heart of kbmMemTable is custom TList. The paid extensions are simply faster variant of TList instead of Delphi's usual TList. (not worth the price, IMHO).

To top it off, the paid help file and annual subscription.

The wannabe Remoting table
The most interesting thing is kbmMemTable does not have linkes to SOAP/WSDL or RPC/XML or ADO in-memory table links.

In the end, your reviewer, who brought kbmMemTable subscriptions and dropped it, still wonders what value kbmMemTable have, against - other bundled in-memory suites.

It's a nice to have, but if you want to buy it, along with Delphi, RemObjects (contains an in-memory table), DevExpress (contains an in-memory table), ElevateSoft/Nexus (contains in-memory tables as well), then UniDac (contains in-memory table)...

Non-Standard Future
DelphiHater wonders what future is there left for a stand-alone in-memory table.

there are two directions, develop a database connectivity kit (the type that works) or develop a remoting framework...

DelphiHater uses SOAP/XML, ActiveMQ, XML/RPC remoting, Spring, Hibernate because it talks with open standards, not some binary non-standard protocol.

The world is full of open standards - XML, SOAP, ActiveMQ, SOAP, Ajax, Amazon Web Services, Google Web Services, RSS... and unfortunately, kbmMemTable can't talk with them without much effort and coding.

How to prevent software piracy

Article update in March 2013:
This article is outdated. The outdated information is striked out. The website Component4Developers now goes to Component4Programmers. They have since updated their kbmMemTable with SQL support, OSX and 64-bits and fixed tons of bugs that plagued their product since then.

Article referencing kbmMW is also at Rudolph's Dental Software AG.

See article corrections.

DelphiHaters' Blog wishes Mr. Kim Madsen best of luck with his product.


Rob Segerink said...

Lousy post, you simply don't understand how and when to use kbmMemTable. Don't blog, but start to learn how and when to use the right components properly!

Delphi Haters said...

Oh certainly Rob,

Why do I need to use kbmMemTable,

- when there is AnyDac in-memory table,

- when there is UniDac in-memory table,

- when there is DevExpress in-memory table,

- when there is Data Abstract in-memory table,

- SOAP remoting in-memory table?

I could have used any of these instead of kbmMemTable.

Can you ask kbmMemTable to be totally free, like the NET in-memory table, Perl DBD, Java in-memory table and other free equivalents?

Why not ask kbmMemTable to write a proper working SOAP 1.2 adapter and make totally free? that would be something DelphiHater would love :)

Delphi Haters said...

I forgot to mention -

Did you by any chance manage to

- create 64-bit Explorer add-on or

- create 64-bit service,

- create 64-bit ISAPI extension

- create 64-bit website using IntraWeb

that actually works with Windows 64-bits using 32-bits Delphi?

Rob Segerink said...

Nobody says to you that you must use kbmMemTable instead of the ones you mention, that was always the power of Delphi, you have a choice! But in the days I used kbmMemTable it did the job perfectly, standalone and as a component in the kbmMW framework.
But I also, sometimes, did use the DevExpress and delphi own one and these also did the job, although they have less features that kbmMemTable.
Concerning you SOAP adapter, kbmMemTable is just an memory dataset, but the kbmMW middle tier framework supports the SOAP protocol.

Delphi Haters said...


- last post from Mr Kim on 29th October 2008 at

Mr Kim said it better.

If Mr Kim improves his web-site and quality of components, I would blog about it.

For starters, Mr Kim is using IO/Complete, an intelligent choice...

Big mistakes Mr Kim made:

- "open-sourcing" his kbmMemTable and then other vendors borrow ideas from it.

- slow bug-fixing, wrong ideas, wrong directions Mr Kim made,
especially on kbmMW and his products.

SoCo said...

Please stop saying 'more better'.

I'm about to use kbmMemTable in a project and we have used it before. I'm not familiar with the other in-memory tables you mentioned, but will definitely look into them.

We mostly use kbmMemTable's to create what I call scratch pad tables. A table of pretty data generated from the actual data in the database, with the specific purpose of being displayed in a grid. The standard naked ClientDataSet component can preform this task, but lacks the ability to be sorted. So, sorting alone is the reason we use kbmMemTable instead of the supplied ClientDataSet, and for this kbmMemTable works great!

Delphi Haters said...


Why use Delphi when you're Visual and GNU expert? ;)

The UniDac, DevExpress, DataAbstract, along with DbIsam, ElevateDB, with AidAim, Accuracer, EasyTable can sort too.

Of course, to each Delphi or C++ Builder developer to his own.

BTW, good luck on your project.

mark.b said...

Well. I love it. It is not bound to other technologies, which is why I chose it.

It is a fast, reliable, memory data set, and it works perfectly out of the box.

And, it's free, unless you can be considerate enough to pay a bit of money for all of the hard work.

I should be so lucky to have designed such a gem and be earning revenue from it.