Sonntag, 26. April 2015

Nevrona Rave - 20 years and XE8-version available-

I had a look at my blog last month and realized that it’s been very less activities from myself … But this can kind of be expected. I’ve had a busy few years at work with some major changes, lecturing some courses, at home, pretty much everywhere.
Put this together and my age and my life has been way too full, and I’ve decided to slow down a bit and let everything happen in a more relaxed manner.

But last week I’ve realized that in April 2015 the ReportEngine from Nevrona is 20 years old!

 Started with ReportPrinterPro and extended with RAVE in Version 3.0 and at the moment in version 11.0.10 with XE8-support available. Read the interview with Jim Gunkel in this post!

And: the website from Nevrona is rebuild, finally!

20 years of success for Rave ?! No, not really for all of the 20yrs    :-( 

In the first years Nevrona was on the Delphi Informant Magazin in the  report-engine area the first place. The solution was not only stable, it was really fast and had many possibilities for the requirements of reporting.
With Rave have Nevrona switched from code-based to visual reporting. This change was for me a real nightmare ...
I bought the update of v3 and started RAVE, but it looks like a project without any sense...
After many nights with fighting and searching I found the key of the architecture and it make "klick" for me. On every developer day I recognize more and more the power and the possibilities and love RAVE. A long time ago in the kylix-age Nevrona made a kylix-version of RAVE and this combination works great, like Delphi 7 and Rave. With the step from Delphi into the unicode-world in 2009 the ReportEngine made slow progress and after the crash of the website from many developers think that Nevrona isn’t active anymore.

In many trainings  and presentation in Europe and US I showed the power of Rave and have written uncounted reports in my (C/S-)applications and for many companies around the world. I was active on newsgroups, wrote Rave-articles and so on.
I moved from the developer-part more in the it-management part (CIO right now) and had less time to develop and stay up-to-date. But all of my apps works with Rave on the newest OS-versions and so on without any problems. This year I'll transfer some old, but daily running apps in the world (e.g. > 15.000 users every day), into XE8. The first impression of XE8 is great and with the new Rave 11.0.10 for XE8 and the great FireDAC-components from EMBT it should be done in a few days.

I’ve asked some questions to Jim Gunkel from Nevrona Designs last week.

Hello Jim, you’re the CEO of Nevrona Design, based in Arizona.

How would you describe „20 years of RAVE Reporting“ ?
I started with Turbo Pascal back in 1984 and I still remember using several Turbo Power products back in those early DOS days on many of my programming projects and thinking how cool it would be to create products that was used by other programmers.  When Windows 3 came out and everyone was converting their apps to the new graphical environment I was disappointed I was going to lose my favorite programming language but then there was Delphi to the rescue and all was good!

At the time I just happened to be working on a project that required a very unique reporting challenge (using data from a multi-node tree relationship database) and had written a code based printing library to create the many strangely formatted report designs I had in front of me.

Back then everyone doing Delphi was on CompuServe and there was a nice system in place for shareware authors (SWREG I believe) to purchase software through CompuServe and then the software authors would get paid from them.  ReportPrinter 1.0 was put up for sale for $25 but I didn’t really expect many to be interested in it.  Much to my wife’s and my surprise the orders started to come in along with lots of suggestions for enhancements.  I was hooked right then and there and it was a great outlet for my programming passion.

There’s been a lot of additions to the product line including a name change to ReportPrinter Pro and finally to Rave Reports along the way.  We supported Borland’s ventures into Linux and .NET and included a bundled version with Delphi for quite a few versions.  It’s been an amazing adventure creating code that other software developers use within their applications and getting to know the great members of the Delphi community at the many conferences and user groups that we’ve attended over the years.

In the last 5 years there was a silence part of Rave Reporting. Can you explain why ?
We never gave up on Rave Reports and Nevrona Designs and tried to keep up with things as best we could but had several personal issues that unfortunately caused us to lose focus on communications with our customers.  Caring for and losing several of our parents and also having to deal with a special needs child through some rather violent teen years were the main factors.  Family has always been very important to me and through this time my family needed me.

The good news is that my wife and I have stayed strong throughout and as we have been bouncing back to normal it’s been great to hear from many of our dedicated customers that we’ve know for so long.  We’ve got a redesigned/reorganized website (finally!) and have released several updates to Rave Reports 11 with more on the way.

And with Rave 11 and v12 on the horizont Nevrona Design will go back on the Reporting-area of Delphi. What are your plans and have you a roadmap for Rave ?
We’ve already been working on new features for Rave 12.  We are very interested in the new mobile and non-Windows markets that Embarcadero is targetting.  Other features such as major PDF enhancements and new report viewing systems that aren’t tied to a printed page (or Windows APIs) are also very likely.  As we get closer to a release we’ll communicate a more detailed road map with our customers.

Thank you Jim for your answers to me and all the customers, waiting for a sign of activities from Nevrona Designs.

Montag, 6. Januar 2014

My first step with Delphi XE5 and more ...

A new year has just rolled out. I'm sure your new years resolutions have been set. One of my resolutions is to activate my blog about Delphi & Reporting beside many other things @office or @home ...

I moved in the last years from developing more and more to the IT-management and at the moment my position is CIO of an authority. But sometimes I miss developing in Delphi with Pascal (which I use more then 30 years in the meantime).

Well, the longest travel starts with a first step and I've installed Embarcadero Delphi XE5, Nevrona Rave 11.0.5 BEX (with 32- and 64-bit support and RaveScripting) and FastReport 4.15. For the important eDocument-possibilities I have installed the incredible powerful components from Gnostice (Thanks to Mani from gnostics for all the help of the gtRaveExp-components for 32- and 64-bit).

I've a good feeling about version XE5 after some hours of installation, looking around the new features (not mobileDevices or OS-X parts) and stability.
Especially FireDAC is a great decision from EMBT, have I mentioned that I use AnyDAC since 2008/09 on many of my C/S-applications. Meaning not new but more features included, things to learn for me.

The first short tests of some (db-)applications on this new IDE show on the screen a "Cursor" (Cursor mean in this context Current set of records and not the Cursor from the command-line, btw), a good sign.

Congrats to Marco and the whole team in Scotts Valley and the EMBT-offices around the world.

Now the system (Win7-64, XE5, Rave11, FastReport4, Gnostice eDocEngine and their new XtremeDocument Studio ) is ready for a start into a reporting-journey (again)....

In the next monthes I'll write here some articles about Delphi & reporting.
First I'll publish the Rave AddOn's for Rave 11 BEX and this reportengine in the new (?) unicode and 64-bit environment.
Then is on my blog-roadmap the component from Gnostice about digital document processing, PDF-area and the combination with report engines based on VCL.
After this I plan to look into FM and reporting with FastReport; I think an interesting adventure for a VCL-junkie since 1995, or ??

stay tuned and don't forget:   things.take.time.

Mittwoch, 1. Mai 2013

Delphi & FireDAC

After a long time (some years...) an new post ?! Yes, I'm still alive and this post is not about Nevrona Rave  

I’ve written the following article in 2009 in german and translated it this week with google-translate and hope the result is ok!

For over 20 years, the topic of "application development with databases"have  a very high priority for Embarcadero (formerly Borland). About the Borland Database Engine, to dbExpress (currently DBX4) Delphi is inherently database interface for many databases.
On the 3rd party market, there are many alternatives that are either dedicated to a specific database, or can work on more or less generic components with different databases. 
This year Embarcadero add the well-known product „AnyDAC“ to the portfolio for Delphi with the new name "FireDAC". Thanks Marco & team for this great decision!! 

And with the relation to AnyDAC: you’ll find some “old names”. 
I work with AnyDAC / FireDAC since v2 and on my biggest app here in Germany every day more then 10.000 users (!) works every day with this app (Delphi and AnyDAC, and RAVE but the status of Rave in 2013 is another story (perhaps a post from me this year, but not promised)) and connect to Oracle v9 – v11 and MS-SQL v2005 – 2008R2 under XP-Win7, TerminalServer, Citrix and so on.
More then 4 years without any problems in this area of the application.

For over 20 years, the topic of "application development with databases" has a very high priority for Embarcadero (formerly Borland). Many of you will probably immediately think of the Borland Database Engine (BDE). Strictly speaking, was previously with the so-called interface IDAPI least a qualitatively equivalent alternative to Microsoft's ODBC interface in Scotts Valley, along with IBM, Novell and WordPerfect, was published in 92/93. Unlike ODBC, they should be appropriate for a number of platforms such as Microsoft DOS, IBM OS / 2, Novell Netware and MS-Windows, Microsoft saw only MS-Windows as the target platform. The history showed that Windows ODBC and thus prevailed and the now called BDE interface became less important. The SQLDB engine links this was extended to the then existing C / S databases but in the late nineties was the BDE and SQL-Links changed into depraceted  by Borland. Both technical and legal licensing reasons were decisive. The successor was introduced in Delphi 6 and Kylix and was named "dbExpress". Acceptance was just in the first time very low, partly because of the complete other architectural approach which has been placed only on C / S - application development, which had the consequence that neither dBase or Paradox databases were supported by dbExpress and the other was the first version is not quite flawless. Many developers are looking for the discontinuation of the BDE, and initial experiences with dbExpress often an alternative that met both a resemblance to the working practices of BDE supported as different databases and there existing features. Here dbExpress was also a long time through the primary-down on performance aspect and less on the support of DB-specific options somewhat sidelined, for example here is only to support different types of databases from Oracle as well as the long term lack of support for MySQL transactions mentioned. With Delphi 2007 Borland/CodeGear publishes dbx4, complete new with a great architecture. But they made the decision to rewrite DataSnap instead of finishing the db-area (dbx4 and the vcl-components, CDS and so on). But this is another story/post, too...

But back to AnyDAC/FireDAC...
It supports many databases “native” without any special library inside the application, only the db-client from the db-vendor…

Of course, there are other databases that are not supported directly. There are then the ODBC and dbExpress bridges that open the door to other databases. In ODBC area level 2 & 3 as well as in the dbExpress driver to have the old architecture (up to Delphi 2005) dbExpress as support the new architecture of DBX4 completely. And new to the support of the current MS-database technology "Azure", meaning that the Delphi developer also in Win32 area ready for the cloud. There are all Delphi versions since version 5, except Delphi 8, supports. For the old versions, AnyDAC a Unicode support which is dependent of the used version of Delphi. If the DB client is Unicode-capable, it is in the database, InterBase and Firebird, Oracle and PostgreSQL on the corresponding parameter passed (eg Oracle CharacterSet = utf8 or the NLS_LANG section on Oracle’s side). However, this support is in the Delphi 2007 and not older versions consistently (feasible), so the access to the metadata fails here with Unicode.

In order to score points against the system's internal database framework DBX4 from Embarcadero, you need next to the same extent some other features are implemented. And in particular some of this features should be discussed in more detail in the article. Compared to other 3rd party components is not only a database, but in my opinion the most widely used C / S databases, both commercial and freeware-based support. After EMBT have bought these components, I think that I was right some years ago to switch to AnyDAC.

AnyDAC Architecture 

(I haven’t made the switch to FireDAC) 
I want to begin immediately, with the first layer in the graphic you know from the FireDAC-page on EMBT.

Here an older graphic (based on AnyDAC v3):

Invisible components

This layer or component is at first glance very similar to both dbExpress like the BDE. There is in particular the component TADConnection that establishes the connection to the corresponding database of the individual unit. The units in this area start with the prefix "uADComp".

Visible Components

In this area, or layer in the usual database applications such as dialogues Login form and offered DB error dialogs for the developer. The units in this area start with the prefix "uADGui".

Local data storage layer

This area is a little more interesting. Here an implementation of the data storage in the local memory is performed. The chosen approach is closer to the DataSet the as on TClientDataset of Delphi. This memory is responsible for reserving the fetched data and also the metadata. The units in this area start with the prefix "uADDatS".

DataAdapter layer

This layer is particularly in demand for more complex query results against the C / S database and should read here as Master/Detail- and nested-table operations. The units in this area start with the prefix "uADDapt".
The monitor and performance layer is explained below in more detail.
Finally AnyDAC has the so-called database driver layer. Through the appropriate interfaces, the different database API's to be integrated. At this point, of course, the bridges were located both on ODBC as well as dbx.
Earlier I had been briefly noted in particular that the special features mentioned here. Here's a first point of call is to: Support for DB-specific features. For each supported database, the DB from their manufacturer with specialties is well supported. The so-called DriverID made the distinction and Oracle are the AuthMode which normal, SYSDBA and SYSOPER provides, in MS SQL Server parameter OSAuthent   for ADS- authentication. Depending on this, the corresponding DriverID TADPhysXXXXDriverLink drawn and publish the valid parameters. AnyDAC has to offer here a complete and sophisticated two-layer, which is characterized by the prefix "uADPhys".

After installing the components in Delphi will be the following VCL components:

In a first comparison to other DB components is nothing unusual on. On closer inspection, however, the reader will recognize adapter components and also an event alerter, which has been added in version 3.0.
The second tab contains the aforementioned graphic dialogue options and the third area in the Component Palette is responsible for access to that database.

The bridge from the application to C / S database does TADManager either component or the component TADConnection, first is with the many known BDE TSession component and the latter with the TDatabase component. The TADManager component accesses the information "ADConnectionDefs.ini" to file and is a many areas compared with dbExpress. The TADConnection can either be with the configuration manager (via the pull-down menu available) or through the VCL properties for design as well as run-time configured to connect to each database without using TADManager and activated. Of interest in this area is especially the fetch and format options - range. Here, application-wide settings for the SQL components are defined, but are overwritten again on individual SQL components (could) s. The property "FetchOptions.Mode" provides example fmAll and fmOnDemand on. The behavior is defined as the result is transmitted to the client. Especially with the high-performance scanning with fmALL definition, a performance gain defined as the data is to be read completely. Many other products is always fmOnDemand which often leads to a certain stagnation in the data flow. The next area is particularly important for the use of the different databases, such as Oracle and MS SQL is very powerful: The so-called format option allows the connection component at a central point, the definition of the application's internal data format, regardless of the database. As an example here, both Oracle and MS-SQL are called. Known, Oracle stores the particular floating-point numbers in the so-called BCD. This format is given in the MS SQL Server in the same form and in the use of an application with two databases often arise at the interface with the VCL components problems with program internally intercepted or the values ​​have to be converted. Here, the developer, in the following source code easily recognizable, with several so-called MapRules define a conversion in one place and thus in the course of development "forgotten".

 with MapRules.Add do begin
    PrecMax: = 19;
    PrecMin: = 4;
    Source Data Type: = dtFmtBCD;
    Target Data Type: = dtCurrency;

At this level, then the subject transaction be meaningfully addressed. First, there are the transaction property and other property of the update transaction. Here, AnyDAC available provides the following modes:

• xiUnspecified
• xiDirtyRead
• xiReadCommitted
• xiRepeatableRead
• xiSnapshot
• xiSerializible

TADQuery & more

After this level is now the next step. Here the TADCommand is a powerful and easy ways to communicate with the database. TDataset a connection is not implemented, it is TADQuery responsible. Here of the development team created a solution that is reminiscent of many of the good old PDC time and a great distinction in the architecture has been compared with dbExpress. The result is not passed over the unidirectional component to a TDataSetProvider TClientDataset but may remain (!) In ADQuery and from here it will also be changes in data written back to the database. Many components from other manufacturers follow a similar path, and also the use of it is very easy to use. By the word "may" was immediately obvious that it is not mandatory, but other options are available. A combination of the internal TADMemTable, and a few of the TADTableAdapter TADCommand objects created this ADQuery1. Here, the developer can choose between simplicity and flexibility. Finally in this section only briefly to the TADMemTable be addressed. It is a more flexible and performant alternative to the now somewhat dated TClientDataset component of Embarcadero. In the current 2010 version of the Delphi C source code was finally released, a review has taken place as yet. Andreas Hausladen has released a long time ago called MidasSpeedFix, the performance was noticeably improved and every user of TClientDataset test in your own application.

Component TADMemTable tuned optimally to the course of the other components and can be performed as follows AnyDAC multiple queries, which, when the same structure is not only from a table, and even from different databases data obtained may be supplemented with data (!)

ADQuery1Oracle.Open ();
ADMemTable1.Data = ADQuery1;
ADQuery2InterBase.Open ();
ADMemTable1.AppendData (ADQuery2);

Here you get the MapRules feature a very important role! In this area are still with TADDataSet.CopyDataSet opportunities expanded.
But back to ADQuery. The creation of the SQL statement is facilitated via a query builder, which indicates the tables and fields nice. In the following is a further characteristic of AnyDAC is presented in more detail in this plane.
SQL preprocessing
The macro function is found only in the second moment and deserves a careful look. DA Soft calls this "preprocessing CommandText" also. The SQL text before the Execute / Open only as explained in detail below, edited and then sent to the server.
"Select * from table &" is ADQuery1.MacroByName ('table'). AsRaw of each table name is passed. This is in practice for interesting patterns and features, different table names in different databases. Brings us to the next possibility: distinction or consideration of database features.

A SQL statement can be constructed so as follows:

Select * from EMP where
{ORACLE} {if Field1 =: ParameterXZ {fi}
{MSSQL} = {if Felda :ParameterTT {fi}

Because of DriverID in TADManager TADConnection or the corresponding region is automatically selected and sent the SQL statement is syntactically correct to the database.
In addition you can also freely selectable macro parameters are used in the Delphi out with MacroByName (,MakrParam').AsRaw =’’ (Empty) or ‘1'is (by value) is activated or not activated, ie here a distinction is content, regardless of the database.
Furthermore, there are many part AnyDAC already implemented functions such as the castes of the different data types. In Oracle, the command "to_char" and MS-SQL "convert". The following SQL command will automatically convert into the correct syntax:

SELECT EMPNO FROM EMPLOYEES WHERE to_char (empno) LIKE '1% 'in Oracle


These options are diverse and allow you to create extremely flexible SQL statements both within a database, as well as through various databases across. The flexible design of SQL queries, depending on the user's selection is therefore more than slightly possible.
But this flexibility requires troubleshooting a way of checking. At this point tracing is the logical solution.
AnyDAC features similar to other components, a tracing function. Currently, both the file option as well as the so-called remote option is offered in two versions. Write to all traffic in a file, the component "TADMoniFlatFileClientLink" is responsible. Here is the file name and is defined in the TADConnection component during application startup parameter "MonitorBy" defined with flat file. Then the tracing done in the specified file for troubleshooting.
The second option is the Remote option and this is the component "TADMoniRemoteClientLink" responsible. The parameter "MonitorBy" is remote 'is defined and with the standalone application admonitor, traffic can be watched very nice. Furthermore, even the TADMoniCustClientLink implemented a custom solution for call recording of communication.
Components collection supports effective pooling analogous to and is controlled by the dbExpress/dbx4 TADConnection component. The physical connection to the database is maintained so long as possible and effective. In a TADConnection.Connected: = True is used to connect from this pool and a close put back in the pool. Especially the connection to the authentication and the exchange of basic information (if only the hostname or OS username) is now also for a user with a “tangible” action, ie there exists a visible time. To activate the developer only has the properties of the connection parameters "Pooled = True" will be added, and the rest is done by AnyDAC in the background. With the use of the components for creating a 3-tier application with Delphi DataSnap 2009 and also RemObjects Data Abstract precisely these characteristics are very important. In another episode will be discussed intensively on this point.

Deployment of DB Applications

The last point in this article is the dissemination of the application to the end user. Unlike dbExpress no additional libraries are required. Only when using the corresponding TADManger INI files must be passed. For pure use of TADConnection component there must be passed no file. Only the corresponding DB client of the manufacturer is necessary. For Oracle can e.g. with the Oracle client and the client will OracleInstant worked. The corresponding parameters of the database connection must be either hardwired or, recommendable, via configuration files or through a call to the application with the required parameters.

These database components  offer many possibilities, but a description would go beyond the scope of an article. Just the Help PDF includes more than 800 pages meantime.
In practice, this collection of components has proven to be very performing and open to most databases. 

Another feature which is really cool in AnyDAC is the "ArrayDML" for high-performance DML, perhaps more about this in one of the next post here.

I hope you've found in this article some new informations about AnyDAC/FireDAC and please remember; it's translated by Google

Samstag, 27. Februar 2010

Time to say “Goodbye“

It‘s for me time to say goodbye ... don‘t worry, not to Delphi!

I‘m a long time user of Rave Reports and a TeamNevrona member since 2002. Many know me from the newsgroups or met me on conferences and so on. During those years, I gave more than 50 trainings and a lot of reporting-sessions on conferences in Europe and the US about Rave Reports.

I really love the power of RAVE Reports, but must admit that Rave has a high learning curve for developers who come from another report engines. In my trainings I tried to open „the door into Rave“ and I got a lot of positive feedback over the years from many attendees. All my reports in my applications use Rave and customers are happy with the performance and quality.
But I noticed (like many others, I get every weeks many emails from Rave-users all over the world ) that it seems that Nevrona Design does not have the power to publish a stable Rave8 version or a BE-version for Delphi 2009 / 2010 which I can use in a production environment with complex reports ... (I don‘t talk about a new IDE, which they have announced in 2007, I mean only the support of Unicode and so on, the IDE is another story which I don‘t comment upon right now).

It is unfortunate....

I‘ll move on to a new reporting engine with my change to Delphi 2010. But believe me, it‘s not an easy way to take, however, I see no alternatives at the moment. A lot of developers must stay with Delphi 2007 or older because they need a stable Rave BEX with their additional components or customized sources, like me.
More than two years we are anticipating the release of Rave 8, yet Nevrona Design has not published a stable version. I‘m in the situation to switch to Delphi 2010 with the really cool Datasnap-Framework and I need a stable reporting engine.
I‘ve ordered FastReport 4.9 and have made my first steps in FR in the last weeks...

I‘ll not update this blog in the future, only one new thread about my new blog will be coming in the next couple of weeks. The content of the new blog will be focused on Delphi & SQL-language & Database development (well, I‘m a database-junkie since over the last 20 years now).

stay tuned...

Donnerstag, 11. Februar 2010

Rave - Localization - Setup and Preview-Form

It seems that the Nevrona Server haven't all files from the Tip&Trick-Page.

I've received this week two emails with the "I miss the zip-file from Tip #72".
Well, here is the zip-file to download.
In the next link you see, how easy you can write your own preview without the old-style Preview from Rave BE(X) (many developers in my trainings define the built-in forms "ugly"...) in your application. Link

Freitag, 8. Januar 2010

Rave 8.0.1 Developer / Architect is available...

After a really long time Nevrona Designs have published Rave 8 BEX for Delphi 7 - 2010.

It's available on the "registereduser"-Page from Nevrona. I plan this weekend to update the AddOn's for Rave8, which many developers need to start the update-tests! Especially the JPEG and GreenBar-component is very important for a lot of reports.
stay tuned.

Samstag, 2. Januar 2010

JPEG-AddOn for Rave 7.7 and Delphi 2010

The christmas-vacation is a good time to look into Delphi 2010 & Rave 7.7 BE and try to create an update of the AddOn from Rave Reports. I started with the JPEG-AddOn and I remembered that the VCLJPG-package is changed since 2009 because Embarcadero adds new GIF and PNG-format. Here you'll find a beta-version of the JPEG-AddOn for Rave 7.7 and Delphi 2010 for testing (and using, on your own risk, of course). Thx for a feedback if it works in your environment..