Archive for February, 2021
Three D Graphics is a software developer that specializes in data-driven graphic software (charts and graphs). They are the vendor that created the charting DLL used in every version of Crystal Reports (and several of Crystal’s competitors as well). They also sell an enhanced DLL called CRChart. It upgrades the standard DLL that comes with Crystal Reports, adding special capabilities and new chart types.
Now that the 64-bit Crystal Reports 2020 is out, a 64-bit version of CRChart has been released. You can still purchase the original (32-bit) version of CRChart if you are using an older version of Crystal. So, if you want your reports to generate waterfall charts, Gannt charts or transparent overlapping area charts you might want to look at the capabilities of CRChart.
Eric Hittinger discovered that the French call their pie charts camembert (as in a wheel of cheese) and decided to see what these charts are called in other languages. He has taken the results and presented them in (what else) a camembert. The twitter thread is getting lots of feedback and he is making updates.
One of my readers recently stumbled onto a trick and decided to share it with me. He wanted to display how long his reports took to run. He knew he could tap into the DataDate and DataTime to get the time the report started. His recent realization was that he could put a subreport in the report footer and get a second DataDate/Time at the end of the process. By comparing the two he would know the time it took for the report to run. By using DataDate and DataTime the values wouldn’t change, even if he saved the report with data and opened it a few days later.
The subreport can be completely blank other than this formula:
Shared DateTimeVar EndDT
Then in a separate report footer (below the section containing the subreport) we add this formula:
Shared DateTimeVar EndDT;
NumberVar TotalSec := DateDiff ('s', DataDate + DataTime, EndDT);
NumberVar H := Truncate(Remainder(TotalSec, 86400)/3600);
NumberVar M := Truncate(Remainder(TotalSec, 3600)/60);
NumberVar S := Remainder(TotalSec , 60) ;
Totext ( H, '0' ) + ':' +
Totext ( M,'00' ) + ':' +
Totext ( S,'00' )
The end result uses one of my web formulas to generate a string formatted as h:mm:ss, but there are other format options.
And thanks to Mark Edwards at DataReport Consulting for sharing his discovery.
I wrote about CR 2020 last summer, and linked to a blog post about things that were different. One of the things mentioned in that article was that CR 2020 no longer supports DAO connections. DAO allows Crystal to connect directly to classic MS Access (.mdb) and classic Excel (.xls) files. The DAO driver came as part of Crystal Reports.
In CR 2020 you have to use OLEDB or ODBC to connect to these files. This requires that you have the 64-bit version of the Microsoft Access Database Engine 2016 Redistributable, which is a separate download.
I just got an Email from Gordon Portanier of ReCrystalize who reminded me that this will affect anyone using the Xtreme sample database which is in .MDB format. This database was originally provided as part of Crystal Reports, but starting with CR 2008 it was no longer included. I use it in my course materials so I still provide it as a download for my students and others.
So if you are using CR 2020, here are the revised instructions for connecting to the Xtreme.MDB from CR 2020. For this to work you have to have already downloaded and installed the redistributable mentioned above.
1) In the Database Expert, open the node called “Create New Connection”
2) Under that open the node called “OLE DB (ADO)”
2) Select the provider “Microsoft Office 12.0 Access Database Engine” and click “next”
3) Choose “Access” from the database type drop-down.
4) Click the ellipse button and locate the folder where you have Xtreme.mdb
5) Double click Xtreme.mdb and click “Finish”
Gordon also mentioned that SAP has published their own document on connecting to MS Access from CR 2020. However, this document says that you can still use the DAO method in addition to ODBC and OLEDB. Neither Gordon nor I could get that approach to work in CR 2020 and both had to use OLE DB in the end.