I use TSQLQuery (from DBExpress) to run a query on two Mysql Tables. Now i want to print a report from that Query using FastReport but i don't know how to do it!
Help me please.
If you enable the query at runtime (fill in relevant params if need be in the designer), you can doubleclick the TSQLQuery to bring up the field designer.
Choose add all fields.
Now you can add a datasource to that TSQLQuery and link the fields to your FastReport.
I strongly advise you to connect the query to the default SQLConnection at design time, and not at run-time, as you are currently doing (according to your comment). This will enable you to see the fields of the query and so link the correct fields to the FastReport.
Related
I have two reports I'm redoing.
The first has basic info, and the second has the exact same thing plus some more information.
Both are made using FastReport and master/detail with TSqlQuery and TClientDataset.
The first has 3 details and the second has 5.
Is there a way to make only one report document and disable the details dynamically?
Obs: I can't load the TClientDataset and then hide the elements on the first report because the query takes a long time to run: about 30 seconds to load the first report and about 10 minutes for the second one.
Thank you #MartynA for the help.
I manage to do it but it took more work than I think it should.
Clear the DataSource property on your TSqlQuery;
Clear the DataSetField property on your TClientDataSet (detail);
Remove the field used on DataSetField from your TClientDataSet (master);
And if you're using FastReport, the ClientDataSet must be active so you use the method CreateDataSet.
I was using UniDac for a long time now and decided to move on to FireDac as it has good Asynch methods after moving on i saw that none of my data editing works anymore it gives me an error:
[FireDAC][Phys]-330. Cannot generate update query. Update table undefined.
What I am trying to do here is i have a TFDStoredProc component who gets all the data from the database and lets me edit it, with unidac I could easily edit the data without any problem like this:
StoredProc.Edit;
StoredProcCreatedID.Value := SomeValue;
StoredProc.Post;
and it worked, but with AnyDac it doesn't, I tried specifying manually the UpdateTable which leads to another problem:
[FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid column name 'CreatedID'.
I am using Microsoft SQL Server 2012 FireDac 8.0 and stored procedures for getting back results any ideas?
P.S.
The query looks like this
SELECT
CreatedBy as CreatedID,
usr.UserName as CreatedBy
FROM
Sales
LEFT JOIN
Users usr ON usr.ID = Sales.CreatedBy
it looks like the FireDac update builder doesn't recognize the aliases on the fields, any help would be appreciated.
Well i figured out what was the issue, it seems that if you specify a alias in the query for a field the Origin property will be set to the alias and not the real field i downloaded CNPack a must have for a delphi developer also its free, ran the component selector and changed all my aliased fields to their real fields and it works, but this is still a big issue in FireDac component because it doesnt recognize the aliased fields, lets hope it will be fixed in the future as to specify for every query what table it should update and what fields that just allot of work if you are migrating from a big project in my case 220+ stored procedures.
I am trying to use Macros in FireDAC to Preprocess my SQL Queries. I have a TADQuery object on a Data Module with the SQL set to something like:
Select * from MyTable
join OtherTable on MyTable.Key = OtherTable.Key
&Where
Then in my code I do this:
WhereClause = 'stuff based on my form';
Query.MacroByName('Where').AsRaw := WhereClause;
Query.Open;
This has worked great for complicated queries because it lets me make sure my fields and join conditions are correct using the SQL Property editor.
My problem is when the SQL statements ends up invalid because of my where clause. Is there any way to see the SQL after pre-processing that is going to be executed? Right now I am catching the FireDac errors and showing the SQL that is on EADDBEngineException object. However that is still showing my original SQL with the macros. If I can't get to it after the error happens is there anyway to force the Macro replacement to take place so I can look at the SQL in the debugger to help me see what is wrong.
If it matters I am connecting to a MS Access database with the goal of moving to SQL Server in the near future.
Apart from using Text property, to monitor what SQL is actually going to the database engine, consider using the "FDMonitor" FireDAC utility. According to the DokWiki pages (below):
drop a TFDMoniRemoteClientLink component on your form,
Set its Tracing property to True,
Add the MonitorBy=Xxx connection definition parameter to your existing FDConnection component. You can do this in the IDE object inspector, by selecting your FDConnection component, expanding the Params property, and setting MonitorBy to mbRemote.
Note that the TFDMoniXxxxClientLink should come before TFDConnection in the data module or form creation order, so adjust this by right clicking on the form or data module, then Creation Order, and moving the TFDMoni.. component above the FDConnection.
Also, it's helpful in the options of the TFDMoniXxxxClientLink, to disable most of the events being recorded, otherwise all the data returned is also shown in the FireDAC monitor. Expand the EventKinds property, and turn all the event kinds off, except for perhaps ekConnConnect, ekConnPrepare, and ekCmdExecute.
Then open the FireDAC Monitor from the IDE, (Tools > FireDAC Monitor). Start your app only once the monitor is running. Double click on a trace event (in the Trace Output tab), and you will see the actual SQL sent to the database in the bottom pane.
It also seems likely that adding the EventType of ekConnPrepare as mentioned above, would show you when the query's Prepare is called, but I haven't played enough with it say for sure.
Please see the following pages on the DocWiki for more information:
Overview: FDMonitor
How to: Tracing and Monitoring (FireDAC)
Other FireDAC utilities: Utilities (FireDAC)
(Just to remove this question from list of unanswered questions)
From comments:
Well, I've roughly checked what's happening there and I'm still not
sure if calling Prepare (which is useless for you as I get) is the
minimal requirement to trigger that preprocessing. Though, the
preprocessed SQL, the one which is sent to the DBMS you can access
through the Text property (quite uncommon name for such property). – TLama Feb
21 '14 at 8:18
I have created a report using FastReport Designer (Delphi 2010). I have one TfrxIBXQuery (Query1) connected with main database -Base1(frxIBXComponents.DefaultDatabase:=Base1). It works fine, I can get data using Query1+MasterData band.
The problem arises when I'm trying to get data from another database in the same report.
In Designer I drop new frxIBXDatabase (Base2), set the necessary properties. Add new TfrxIBXQuery (Query2) and connect it with Base2.
But I can't get any data from Query2 because it does not see Base2.
How do I solve this problem?
When you look at the properties tab from your query component, can you see any FieldAliases?
If not, you should check the SQL, FastReport can be really picky when it comes to parameters.
Try changing parameter names and see if that works.
If you want to use two or more databases inside report - you should use two TfrxIBXDatabase inside report (on the Data tab)
Clear frxIBXComponents.DefaultDatabase property
I have a variable from a previous step which I want to use to prepopulate textboxes in a dynaform via an SQL query to an external database. How can I do this? Can anyone provide me with an example XML field ... or do I have to use a trigger?
Thanks
You can find material on this link, when you create the field to populate it with the sql statement choose the connection you made and then write the sql on the box below.
The final xml will be something like>
<MyDropdown type="dropdown" required="0" readonly="0" savelabel="0"
mode="edit" options="Array" sqlconnection="dbarray">
SELECT CONTACT_ID, CONTACT_NAME FROM CONTACTS
<en>Select Contact</en>
</MyDropdown>
Regards.