Report Builder with Delphi and RemObjects DataAbstract

By | February 25, 2010

I have begun using Report Builder, converting from Crystal Reports.  Over the years, I have felt the support from Crystal Reports for Delphi developers as fallen by the wayside.  I began looking for an alternative.  Report Builder while is some ways being very different is in may ways similar, only far more flexible. With the product being written in Delphi makes it 100% better to integrate into a Delphi application, without a messy run-time.

In order to have separate report files I needed to create my own report designer program using the Report Builder report designer component, but it means I have one that suits the application and even takes care of some items that are the same from report to report automatically.  I also needed to initially create some infrastructure for a universal data access method via Remobjects Dataabstract, but now it is place and works perfectly.  I design a single SQL query for each report in most cases which tends to work a little faster than the using report master-details and sub-reports.  However if I want to use sub-reports with master-details I can.  With the professional edition giving the RAP language (Report Application Pascal), it gives me the ability to code complex calculations in the language I know.  Performance in most case appears to be better than Crystal reports. I think I have a good solution.

Initially, since I purchased the server edition I created a Report Builder Server.  I found though that it’s performance was not that great.  I saw a report builder demo application in the remobjects sdk samples folder, I tried and was blown away by the difference.  I have now implemented that instead and it makes a world of difference.  The only issue is that by using a remobjects sdk service to execute the report and then send the results to the server, a delay is more likely to be experience by the user with a larger report with no feed back.  However for reports that are only a few pages, the report comes back so quick.  So if you intend use Report Builder and prefer the reports be built on the server for a client-server reporting solution, doing it in a remote service using remobjects is a better way to do it than using the Report Builder Server product by far.  I now have a good Delphi report solution that with the help of remobjects dataabastract is also pretty close to being database gnostic.

Backdating on Terminal Server Modification Finished

By | February 23, 2010

A couple of days ago I talked about the issue of individual users needing to be able to backdating the “system” date when raising transactions for example at the beginning of the month to finalise the end of the previous month in an accounting system. Click here to read this post if you missed that. Well I have installed it at the client site today.  There is always something missed.  Like I had forgotten to exclude dfm files (and I use text dfm’s) for example. We ad tested the the main parts of the program but failed to test some (my face is red). But at this point we appear to working again.

Internal Operating System Error

By | February 18, 2010

I backed myself into a corner abit with the utility I was doing with me last post. I still ended up using the remobjects dataabstract for the data access which makes it database gnostic. However I took out the server logic stuff. It was just too complex to do I what I wanted to do. But you get that.

In the course of the day yesterday I was requested by the customer to create a little quick and dirty report from a paradox database via csv for import into a spreadsheet. Has a problem though with “Internal Operating System Error” it then mentioned a particular table involved in the query. What is interesting with this client is that they have a soon to be retired 16 bit delphi (delphi 1) app running without a problem using this particular file which was the invoice line table. Late last night I used a “rebuild” utility of my making which simply creates a new copy of a template table and copies all records to it, replacing the original. After that I didn’t have a problem with the query.