cancel
Showing results for 
Search instead for 
Did you mean: 

CRVS2010 - Field Definition File (TTX) Support?

Former Member
0 Kudos

In our testing here, it looks like Crystal Reports for .NET Framework 4.0 does not support Field Definition Files anymore? Is this true?

It seems on the machines that only have the CRVS2010 Runtime installed we consistently get the error:

Failed to load database information.

Error in file ...rpt

Failed to load database information.

On machines where Crystal Reports 2008 runtime was installed in the past, these files would work. They also work on machines where CRVS2010 runtime is installed along with the the Crystal Reports 2008 runtime OR Crystal Reports 2008 full version.

What's the story? Thanks.

Kyle

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

We have exactly the same problem, everything is working just fine on the developer computers with CRforVS_13 installed but not on the user machines on witch we installed "CR for .net4" i believe (32bit), same database information error as Kyle got.

If we remove the ttx we get no error.

A solution to our problem would be very appreciated.

former_member183750
Active Contributor
0 Kudos

With all the understanding in the world and respect and all that, the 1st thing I'd say is; guys, it's time to move off of TTX files. As far as I'm concerned these were a great idea in version 6 of CR when they 1st came out, but at this time -7 versions later, it really is time to move on.

Ok. Now that I'm done with my little rant (apologies). Inspecting the msm in Orca it looks like the TTX driver is missing; crdb_cdo.dll. Please check if you see it in the following folder;

C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86

If not, for now, you'll have to copy the dll there from your development box. I'll do a bit more investigating and if my initial finding is confirmed, I'll do a fix request.

Oh. BTW.; CRVS2010 is the last version of CR to ship the crdb_cdo.dll...

Ludek

Follow us on Twitter http://twitter.com/SAPCRNetSup

Got Enhancement ideas? Try the [SAP Idea Place|https://ideas.sap.com/community/products_and_solutions/crystalreports]

Former Member
0 Kudos

Ludek,

Thank you for the advice that after CR2010 the TTX reports will not be supported anymore. We have discussed removing them numerous times, but it is not a small change since it is 90 reports with specific code that generates each one. I agree that we will need to deal with the pain in this version at some point, but for a release a week away we cannot do that. I will put the file in place and test the results.

Will there be a runtime released with the missing crdb_cdo.dll, and when could we expect it? Our customers rely on the installs, and adding an additional dll is not ideal.

Secondary question: If I build our report manager as "Any CPU" and CRVS2010 references, it only works with the x86 version of the runtime, not the x64 version. How can I modify our report manager to work with both versions depending on where it is installed without having to split our assembly into two versions?

Thanks again for the assistance.

Kyle

Former Member
0 Kudos

I have tested the copying the crdb_cdo.dll, and it was not successful. But, comparing the two folders I have found the differences between the runtime install and the VS2010 install. These are not all the missing files, but these are the files that specifically work for Field Definition Files (TTX):

crdb_cdo.dll

crdb_cdo_res_cs.dll

crdb_cdo_res_da.dll

crdb_cdo_res_de.dll

crdb_cdo_res_en.dll

crdb_cdo_res_es.dll

crdb_cdo_res_fi.dll

crdb_cdo_res_fr.dll

crdb_cdo_res_hu.dll

crdb_cdo_res_it.dll

crdb_cdo_res_ja.dll

crdb_cdo_res_ko.dll

crdb_cdo_res_nb.dll

crdb_cdo_res_nl.dll

crdb_cdo_res_pl.dll

crdb_cdo_res_pt.dll

crdb_cdo_res_ru.dll

crdb_cdo_res_sk.dll

crdb_cdo_res_sv.dll

crdb_cdo_res_th.dll

crdb_cdo_res_tr.dll

crdb_cdo_res_zh_CN.dll

crdb_cdo_res_zh_TW.dll

crdb_fielddef.dll

crdb_fielddef_res_cs.dll

crdb_fielddef_res_da.dll

crdb_fielddef_res_de.dll

crdb_fielddef_res_en.dll

crdb_fielddef_res_es.dll

crdb_fielddef_res_fi.dll

crdb_fielddef_res_fr.dll

crdb_fielddef_res_hu.dll

crdb_fielddef_res_it.dll

crdb_fielddef_res_ja.dll

crdb_fielddef_res_ko.dll

crdb_fielddef_res_nb.dll

crdb_fielddef_res_nl.dll

crdb_fielddef_res_pl.dll

crdb_fielddef_res_pt.dll

crdb_fielddef_res_ru.dll

crdb_fielddef_res_sk.dll

crdb_fielddef_res_sv.dll

crdb_fielddef_res_th.dll

crdb_fielddef_res_tr.dll

crdb_fielddef_res_zh_CN.dll

crdb_fielddef_res_zh_TW.dll

Copying all these files in place will allow TTX reports to run properly.

Big question for CR Developers:

1. Is it possible to quickly get a new runtime installer created with these missing files and any other missing files? We are deploying a new version of our software on 11/30 at a large customer and they will not want us to copy the files in place. If we cannot, we may have to revert back to CR2008 and we will then be stuck on CR2008 for three or four years.

Thanks for the help.

Kyle

former_member183750
Active Contributor
0 Kudos

Hello Kyle.

I really, really appreciate you doing all this work. It helps a lot. I actually created a deployment project here to, but have not had the time to try the deployment yet.

But through your efforts we have the answers I was going to go after with me deployment. E.g.; crdb_cdo.dll and crdb_fielddef.dll (I should have checked on this dll too) are missing. the other files are just language resource files and I am quite sure we do not need those.

So an initial work-around is to copy those files into the C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86 folder.

As to a fix. SP 1 is planned for about 3 moths from now, so that is when a new msm file would be released also.

Once I have an escalation number from QA re the missing dlls, I'll update this thread.

Re. compiling to Any CPU.

This should work. Again, not something I tried yet. However there are a couple of things to be aware of of:

1) correct runtime must be deployed (32 / 64 bit)

2) if you want the app to run 64 bit, you need to ensure that the database client is also 64 bit.

3) If you create an app in VS, it is a 32 bit app. A report connecting to say ODBC will use a 32 bit ODBC. Deploying this app when compiled to Any CPU to a 64 bit OS, you need to ensure the ODBC datasource is 64 bit.

and so on.

If you have more details on the ANYCPU issue, let's create a new thread and discuss it there.

Ludek

Former Member
0 Kudos

Would the deployment you have created be available as an installer before the SP1 release? Perhaps as a Fix Pack, or simply a replacement for the current runtime installer? It looked like there were a number of missing assemblies from the runtime installer that are included in the VS2010 installer. Some were VS2010 specific, but a number were not. Thanks again for the help.

Kyle

0 Kudos

Hi Kyle,

There will not be any fix packs for this product. They will be full versions only and we are doing all we can to allow users to apply the patches over top of the existing installs so you don't have to manually uninstall first.

We are doing complete testing and will fix any issues that arise.

I believe those missing assemblies are only in our folder, they are all GAC'd in the \windows\assembly folder.

Can you add those missing database dll's to your project manually? They don't need to be registered just copied into the folder. Or create a simple MSI for them only and distribute with your installer?

Thank you

Don

Former Member
0 Kudos

Hi Kyle ,

I can see the following files under C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86

rdb_cdo.dll

crdb_cdo_res_cs.dll

crdb_cdo_res_da.dll

crdb_cdo_res_de.dll

crdb_cdo_res_en.dll

crdb_cdo_res_es.dll

crdb_cdo_res_fi.dll

crdb_cdo_res_fr.dll

crdb_cdo_res_hu.dll

crdb_cdo_res_it.dll

crdb_cdo_res_ja.dll

crdb_cdo_res_ko.dll

crdb_cdo_res_nb.dll

crdb_cdo_res_nl.dll

crdb_cdo_res_pl.dll

crdb_cdo_res_pt.dll

crdb_cdo_res_ru.dll

crdb_cdo_res_sk.dll

crdb_cdo_res_sv.dll

crdb_cdo_res_th.dll

crdb_cdo_res_tr.dll

crdb_cdo_res_zh_CN.dll

crdb_cdo_res_zh_TW.dll

crdb_fielddef.dll

crdb_fielddef_res_cs.dll

crdb_fielddef_res_da.dll

crdb_fielddef_res_de.dll

crdb_fielddef_res_en.dll

crdb_fielddef_res_es.dll

crdb_fielddef_res_fi.dll

crdb_fielddef_res_fr.dll

crdb_fielddef_res_hu.dll

crdb_fielddef_res_it.dll

crdb_fielddef_res_ja.dll

crdb_fielddef_res_ko.dll

crdb_fielddef_res_nb.dll

crdb_fielddef_res_nl.dll

crdb_fielddef_res_pl.dll

crdb_fielddef_res_pt.dll

crdb_fielddef_res_ru.dll

crdb_fielddef_res_sk.dll

crdb_fielddef_res_sv.dll

crdb_fielddef_res_th.dll

crdb_fielddef_res_tr.dll

crdb_fielddef_res_zh_CN.dll

crdb_fielddef_res_zh_TW.dll

For export TTX file I used the following code in Vb2010

                     .ExportDestinationType = ExportDestinationType.DiskFile

                    .ExportFormatType = ExportFormatType.EditableRTF

                    .DestinationOptions = crDiskFileDestinationOptions

                    .FormatOptions = CrFormatTypeOptions

Please help me.

Former Member
0 Kudos

The problem is resolved .

I changed the code :

Dim CrFormatTypeOptions As New TabAlignment

                    .ExportDestinationType = ExportDestinationType.DiskFile

                    .ExportFormatType = ExportFormatType.TabSeperatedText

                    .DestinationOptions = crDiskFileDestinationOptions

                    .FormatOptions = CrFormatTypeOptions

Thanks.

YB

Answers (2)

Answers (2)

former_member583013
Active Contributor
0 Kudos

We are currently working on researching / developing the consumption of data via the Odata protocol (which utilizes AtomPub). If you are not familiar with the technologies around this protocol, [you canfind out more here|http://www.odata.org/].

This would serve a similar model to TTX as you would develop your report as a "template" with place holder fields. You can then push data into that report via the Odata protocol. If you are building web connected applications, then this model would work well. If you are building 2-tier client server applications, then it doesn't help.

I'm curious to understand whether this type of model would help for the next release of your applications. What does everyone on this thread think?

Coy

Area Product Owner for Crystal Reports

Former Member
0 Kudos

The fix is working just fine for us, thanks Ludek!

Former Member
0 Kudos

thx for the info, it really helps me alot..because i've been searching for the pass 2 days

regarding TTX as "old" tech, what will be the new tech to replace it?

because i'm using TTX all this time, i like the idea that it doens't connect to DB..we just need to pass the "data" to it..

thx for any insight

Edited by: erickwidya on Jan 20, 2011 5:46 AM

jrgen_bauer2
Explorer
0 Kudos

Its the same to me.

We have al lot of reports which are developed using ttx-files. Its an easy way to create database independent reports.

We only pass the results of our database query or data generation to the reports.

It's the easiest way for us to do this.

So why is this marked as "old"?

What is an database independent replacement of this?

thanks

Jürgen

former_member183750
Active Contributor
0 Kudos

ADO .NET Datasets.

For more info see teh KBase [1511438 - How to use datasets to pass data to Crystal Reports|http://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/oss_notes_boj/sdn_oss_boj_bi/sap(bD1lbiZjPTAwMQ==)/bc/bsp/spn/scn_bosap/notes%7B6163636573733d36393736354636443646363436353344333933393338323636393736354637333631373036453646373436353733354636453735364436323635373233443330333033303331333533313331333433333338%7D.do]

Ludek

Follow us on Twitter http://twitter.com/SAPCRNetSup

Got Enhancement ideas? Try the [SAP Idea Place|https://ideas.sap.com/community/products_and_solutions/crystalreports]

jrgen_bauer2
Explorer
0 Kudos

Hi Ludek

thanks for your reply. But this wont help me. This method means that i have to create corresponding objects for each Report using Visual Studio. We create our Reports using Crystal Reports programm not the Designer which is include in Visual Studio.

I think I will first tell you how we work now:

We have an application called Reporting which connects to different databases and has different Customizing tables in each databases.

In these table you can find the stored procedures for the data and the path to the reports.

The User selects a Report and the application opens the source code of stored procedure, interprets it and generates an individual query dialog for the parameters. Thes parameters can even stored in the database as variants which can later get loaded again.

Each Parameter can have an dynamical default value or you can select a value from an specific stored procedure.

Later the stored procedure is executed with the paramater values and the Resultset ist passed to an datatable.

This datatable will now passed to then datasource of the report.

This works if the report was created with and Stored procedure or with an ttx-file.

The easiest way for us is the ttx-file.

Stored procedure ist also OK but I detected in an earlier Version problems if the Server could not get connected. This meant delays while loading the report up to 5 secods. So we switched to ttx files and didn't have any problems up to now.

Jürgen

0 Kudos

Hi Jürgen,

Convert your reports to use XML files which is still a file based system and should not cause delays. You can do this using RAS to change your report data source, save the reports so you don't have to convert each time to save on performance.

You can also read/write to the report Summary Info, which is saved in the RPT file on the hard drive. Set one of the vlaues and then test if the report has been converted already, if not then call the routine below and write the update to the summary field. Next time the user opens the report your app won't have to convert to xml.

You can ignore the data source below or use it to convert your ttx output to xml output. Important part is to get your data into an XML format source:



        private void SetToXML_Click(object sender, EventArgs e)
        {
            CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
            ISCDReportClientDocument rcd;
            
            rcd = rptClientDoc;

            //string connString = "Provider=SQLOLEDB;Data Source=vancsdb02.crystald.net;Database=Northwind;User ID=devtech;Password=devtech";
            string connString = "Provider=SQLOLEDB;Data Source=dwcb12003;Database=xtreme;User ID=sb;Password=pw";
            string sqlString = "Select * From Orders";
            OleDbConnection oleConn = new OleDbConnection(connString);
            OleDbDataAdapter oleAdapter = new OleDbDataAdapter(sqlString, oleConn);
            DataTable dt1 = new DataTable("Orders");

            oleAdapter.Fill(dt1);

            System.Data.DataSet ds = new System.Data.DataSet();
            ds.Tables.Add(dt1);
            ds.WriteXml("c:\sc.xml", XmlWriteMode.WriteSchema);

            //Create a new Database Table to replace the reports current table.
            CrystalDecisions.ReportAppServer.DataDefModel.Table boTable = new CrystalDecisions.ReportAppServer.DataDefModel.Table();

            //boMainPropertyBag: These hold the attributes of the tables ConnectionInfo object
            PropertyBag boMainPropertyBag = new PropertyBag();
            //boInnerPropertyBag: These hold the attributes for the QE_LogonProperties
            //In the main property bag (boMainPropertyBag)
            PropertyBag boInnerPropertyBag = new PropertyBag();

            //Set the attributes for the boInnerPropertyBag
            boInnerPropertyBag.Add("File Path ", @"C:sc.xml");
            boInnerPropertyBag.Add("Internal Connection ID", "{680eee31-a16e-4f48-8efa-8765193dccdd}");

            //Set the attributes for the boMainPropertyBag
            boMainPropertyBag.Add("Database DLL", "crdb_adoplus.dll");
            boMainPropertyBag.Add("QE_DatabaseName", "");
            boMainPropertyBag.Add("QE_DatabaseType", "");
            //Add the QE_LogonProperties we set in the boInnerPropertyBag Object
            boMainPropertyBag.Add("QE_LogonProperties", boInnerPropertyBag);
            boMainPropertyBag.Add("QE_ServerDescription", "NewDataSet");
            boMainPropertyBag.Add("QE_SQLDB", "False");
            boMainPropertyBag.Add("SSO Enabled", "False");

            //Create a new ConnectionInfo object
            CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo boConnectionInfo =
            new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
            //Pass the database properties to a connection info object
            boConnectionInfo.Attributes = boMainPropertyBag;
            //Set the connection kind
            boConnectionInfo.Kind = CrConnectionInfoKindEnum.crConnectionInfoKindCRQE;
            //**EDIT** Set the User Name and Password if required.
            boConnectionInfo.UserName = "";
            boConnectionInfo.Password = "";
            //Pass the connection information to the table
            boTable.ConnectionInfo = boConnectionInfo;

            //Get the Database Tables Collection for your report
            CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables;
            boTables = rptClientDoc.DatabaseController.Database.Tables;

            //For each table in the report:
            // - Set the Table Name properties.
            // - Set the table location in the report to use the new modified table
            boTable.Name = "Orders";
            boTable.QualifiedName = "Orders";
            boTable.Alias = "Orders";

            rptClientDoc.DatabaseController.SetTableLocation(boTables[0], boTable);

            //Verify the database after adding substituting the new table.
            //To ensure that the table updates properly when adding Command tables or Stored Procedures.
            rptClientDoc.VerifyDatabase();
            MessageBox.Show("Data Source Set", "RAS", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

Thank you

Don

former_member183750
Active Contributor
0 Kudos

Hello Ju00FCrgen

I am not sure why in your scenario ADO .NET Datasets will not work. See the sample app csharp_win_adodotnet.zip, or vbnet_win_adodotnet.zip. I believe these app essentially do the same thing your app does; take a table / stored proc / view / what ever from a database, create an ADO .NET Dataset out of that:

 



''Create and open a connection using the connection string 
        adoOleDbConnection = New OleDbConnection(connectionString) 

        ''Build a SQL statement to query the datasource 
        Dim sqlString As String = "" 
        sqlString = "Select * From authors" 

        ''Retrieve the data using the SQL statement and existing connection 
        adoOleDbDataAdapter = New OleDbDataAdapter(sqlString, adoOleDbConnection) 

        ''Create a instance of a Dataset 
        dataSet = New DataSet() 



and pass the dataset to the report, explicitly or implicitly:

explicitly

crReportDocument.Database.Tables(0).SetDataSource(dataSet.Tables("NAME_OF_TABLE"))

implicitly

crReportDocument.SetDataSource(dataSet)

or

crReportDocument.SetDataSource(dataSet.Tables(0))

As long as the Dataset format matches the format expected by the report, this will work. If the format does not match, you can write out the Dataset to an XML:

myDataset.WriteXml(xmlPath, XmlWriteMode.WriteSchema)

Open the report in the CR designer, point the report at the XML and map the fields and fix up the report. See the blog [Troubleshooting Issues with VS .NET Datasets and Crystal Reports|https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13270] [original link is broken] [original link is broken] [original link is broken]; for more details.

- Ludek

jrgen_bauer2
Explorer
0 Kudos

Hi Don

Thanks for your Coding. After translating to VB.net (my preferred language) I was able to write a programm which first opens an Crystalreport, creates an Dataset for each table, saves the xml schema to the filesystem and then changes the datasource.

So I can now easily convert all my Reports.

Jürgen

Former Member
0 Kudos

thx for the info Ludek,

it's the same method that i used to pass the "data" to my current report, just different in designing the report..

i'll try using ADO.NET Dataset nex time

@Coy: hm..new protocol means need to explore more in depth :(..but is used widely so it looks promising (i can see FB, MOSS, LinQPAD)

and the most important thing it can be used in .NET :D..

i'll explore when i get more free time..thx for the info too