Inner select and select in "record selection"- Formula workshop problem

Hi,
I am facing a bit tough situation in creating a Crystal Report.
I have two queries which I need to accommodate in the Report according to a given parameter (selectionParameter).
The queries are as follows:
select total, minvalue, customer
(select  sum(A) TOTAL, min(B) minValue, C customer
     from table1, table2
     where table1.A = table2.E
     AND B in (Select B from table3 where F=10)
     group by C
order by total, minValue
select total, minvalue, customer
(select  sum(A) TOTAL, min(B) minValue, C customer
     from table1, table2
     where table1.A = table2.E
     AND C in (Select C from table4 where G=20)
     group by C
order by total, minValue
These queries should be executed according to the selectionParameter set to 0 or 1. The only difference in these queries in one of the where clauses. In the formula workshop "record selection"- I have put an if clause.
if(selectParameter = 0) then (B in (Select B from table3 where F=10)
else C in (Select C from table4 where G=20).
This is not supported, since select statement cannot be used in the formula workshop!!.. And also, I have understood that what ever procedure I have been following is completely wrong, since the where clause written in "record selection" formula workshop applies to OUTER SELECT, but not to inner select, which is not what I want!!.
Please help me to solve this puzzle. I am eagerly waiting for a solution.
Thanks and Regards,
Janakiram Dandibhotla.

A command object is really the only way to create a custom SQL query in Crystal Reports.  You have the option to create a command object after you connect to your datasource.
Alternatively you can create a JavaBean class, create the custom query in the java page, retrieve the resultset, and use that in the report.

Similar Messages

  • Record Selection Formula and Parameters

    We've currently upgraded from Crystal Reports 9 to Crystal Reports 2008 (SP3).  In our legacy reports, we use the "record selection formula editor" to filter the results of our report.  This is an example of one of our formulas:
    {DOVREP_TIME_AND_EXPENSE.ITEM_DATE} >= {?FROMDATE} and {DOVREP_TIME_AND_EXPENSE.ITEM_DATE} <= {?TODATE}
    In this formula, we pass in the FROMDATE and TODATE from our .NET applicaiton to filter on dates.  After upgrading to Crystal Reports 2008 (SP3) this no longer works.  I get an error "Error in formula Record_Selection".  It looks as if it was having issues parsing the formula.  If I replace my parameters (?FROMDATE/?TODATE) with hard coded dates it works fine (It also worked fine in Crystal Reports 9) so from what I can tell adding the parameters causes parsing errors. Also in the error it shows the formula and it's defintily messed up:
    ((( NOT {DOVREP_TIME_AND_EXPENSE.ITEM_DATE} >= {?FROMDATE}) AND ( NOT {DOVREP_TIME_AND_EXPENSE.ITEM_DATE} <= {?TODATE})))
    I'm not sure why it is adding the NOT to the formula or the extra brackets...
    Any suggestions?
    Regards,
    Mike

    David,
    First off, the way I determined it was the beta dlls was that I installed CR 2008 SP3 runtimes fresh and ran my report.  I didn't experience any issues.  I then took the beta dlls and replaced the originals, rebooted and ran my report again.  The report failed to execute as I described above.  I then took my backup of the SP3 dlls and replaced the beta dlls, rebooted and tested again.  I worked fine with the original dlls. 
    The formula that I was passing into that report was a bit more complex than I first described.  I had a few other conditions in the formula that checked for a project ID.  I tested it with just the dates and there wasn't any issues (as in your example), as soon as I added additional parameters that's when the "NOT"'s were included.  Could you try your test again with a few additional parameters?  Here is an example of what I was passing into the report:
    ((({DOVREP_TIME_AND_EXPENSE.ITEM_DATE} >= {?FROMDATE}  )   AND   ( {DOVREP_TIME_AND_EXPENSE.ITEM_DATE} <= {?TODATE})))  AND (({%PROJECT_ID}=99 OR {%PROJECT_ID}=113 OR {%PROJECT_ID}=112 OR {%PROJECT_ID}=103 OR {%PROJECT_ID}=107 OR {%PROJECT_ID}=111)))
    Mike

  • "Missing parameter values." Error when setting record selection formula

    Setup - VS 2008, CR 2008 (v12.0), Win XP & C#.Net
    I have a form which loops through all parameters (non-linked to sub reports, so only off the main report) and allows users to enter the values for each parameter. When hitting the preview button, I loop through all of the saved values, set the parameter field values and then add any additional filters into the recordselection formula as below. The problem i'm having is that the ReportDocument.HasRecords returns true if the ReportDocument.RecordSelectionFormula doesn't filter out every result.
    For example, I have a list of customers and if I set the selection formula to filter out a specific customer, ReportDocument.HasRecors returns true, if I set the selection formula to filter something that doesn't exist i.e. customer "xk39df", the moment this line of code runs "ReportDocument.RecordSelectionFormula = rsFormula;" - ReportDocument.HasRecors returns the following exception as opposed to "False".
    Message: Missing parameter values.
    Source: CrystalDecisions.ReportAppServer.DataSetConversion
    StackTrace:    at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)
       at CrystalDecisions.CrystalReports.Engine.ReportDocument.hasRecords()
       at CrystalDecisions.CrystalReports.Engine.ReportDocument.get_HasRecords()
    ErrorID: MissingParameterFieldCurrentValue
    The strange thing is, it works fine if the recordselectionformula selects a record which exists in the results - all parameters have a current value except for the linked parameters.
    This one has got me stumped!
    foreach (ParameterFieldDefinition parameterField in ReportDocument.DataDefinition.ParameterFields)
                    var query = ReportObjects.Values.Cast<Filters>().Where(objects => objects.ParameterName == parameterField.Name.ToUpper().Trim());
                    foreach (var item in query)
                        parameterField.CurrentValues.Clear();
                        parameterField.CurrentValues.Add(item.ParameterValue);
                        parameterField.ApplyMinMaxValues(item.MinLength, item.MaxLengh);
                        parameterField.ApplyCurrentValues(parameterField.CurrentValues);
                var records = ReportObjects.Values.Cast<Filters>().Where(recordSelection => recordSelection.RecordSelectionFormula.Trim().Length != 0);
                foreach (var item in records)
                    rsFormula += item.RecordSelectionFormula;
                if (rsFormula.EndsWith(" AND "))
                    rsFormula = rsFormula.RTrim(5);
                ReportDocument.RecordSelectionFormula = rsFormula;

    Hi,
    The report has it's own ADO Datasource set in crystal reports, so I just pass the log on information to the report object before doing anything else.
    this.DataSourceConnections[0].SetConnection("ServerName", "Database", "sa", "Password");
    I then do a refresh before applying the parameter values (I do this because the user can preview the report more than one time by using a preview button on the parameter form without re-loading the report object)
    this.Refresh();
    Then I set all parameter values followed by setting the recordselection formula.

  • Database DLL error on editing the record selection formula?

    Post Author: Aravind
    CA Forum: Older Products
    Hi All,I recently edited the record selection formula of an old report and since then the report is issuing me an "Error detected by database DLL" error.The report was running fine earlier and still continues to run fine if I undo the changes. Earlier, the records were selected based on a 'date' field and I edited the formula to select records based on another date field, but the report doesn't work.The report runs fine on my local PC using Crystal Reports, but web based reporting fails with the error message. The data is selected from a view and the date parameters I talked about are the fields in the same view.This view has around five date parameters and the report runs fine for all of them, except one date field.Any pointers are appreciated.Crystal reports version is 8.5. Regards,Aravind.

    Post Author: DPowell
    CA Forum: Older Products
    Ah, yes, the good old generic date error.
    The problem is likely an invalid date value in one (or all) of your records with that field.  You don't say what database engine you are connected to or which driver you are using for the report, but I'll give you some "pointers".
    Basically, the SQL fetch has encountered an error in your date field and the driver you are using in the report can't handle it.
    A null date could cause that problem.  Also a date-time field with an invalid value or truncated time value.  A robust ODBC driver, like one of the Microsoft drivers might be able to overcome it.  Likewise, vendors frequently release updated drivers to improve error handling just like this.
    1.  Analyze your data, specifically the contents of the "new" date field you are using for some kind of invalid date.
    2.  Experiment with different ODBC drivers by creating alternate ODBC connections to the same database using different ODBC drivers.
    3.  Browse and experiment with options in Crystal Reports Properties that allow you to specify data conversions for NULLs and Dates.
    Good luck !

  • How to  create a Select in Formula Workshop - Record selection editor

    In the Formula Workshop u2013 Record Selection Formula Editor I am trying to write a formula to exclude certain customer ids. Iu2019m getting errors when I click the Check formula button. The statement is below, any suggestions?
    I dont think I can use the Select statement in crystal as you would in SQL but how should I write it in crystal format?
    not in (select { STATISTICS.custid} from  
        where { STATISTICS.date_reg} >= '27-may-2011' and { STATISTICS.date_reg} < '30-sep-2011')

    Hi,
    You can try the below logic:
    STATISTICS.date_reg} >= '27-may-2011' and { STATISTICS.date_reg} < ' 27-June-2011'
    I guess you are trying to apply this condition.
    Here in selection formula you need not to give select and from.
    Cheers,
    Kiran

  • Distinct records with conditional select formula

    Post Author: nelsonchris
    CA Forum: Data Connectivity and SQL
    Hello,
    I have a simple report pulling data from two tables. I want
    only distinct records. I am selecting records based on
    parameters; here is the select formula:
    ({?Service Name} = "*" or {selsvc.ServiceName} like
    {?Service Name})and
    ({?Program Name} = "*" or {selsvc.Selected Service Entry 
    Program Name} like {?Program Name}) and
    ({?Agency Name}  = "*" or {selsvc.Selected Service Entry 
    Agency Name} like {?Agency Name})
    The problem comes from the fact that Crystal will add the
    selsvc fields to the reports SQL select code, which has the
    effect of duplicating some records that do not have the same
    values for the selsvc fields. The select formula above is
    the only place in the report where values from the selsvc
    field are used, and as you can see they are only used when
    the user has submitted a matching parameter for them. I can
    not figure out how to get rid of the duplicates, please
    help!
    Thanks for your time,
    Chris

    Post Author: yangster
    CA Forum: Data Connectivity and SQL
    I don't follow why you are getting duplicates with your selectionare you getting duplicates without the selection criteria?if you are then they really are not duplicates and there could be issues with your joins between the 2 tables

  • Too Many Lines of Code in Record Selection Formula....

    I'm trying to run a crystal rpt. w/ over 2000 lines of code/conditions in Record Selection Formula, but the report bombs out after typing a little over 1065 lines of code.
    I get the following error message:
    Failed to open rowset.
    Details: ADO Error Code: 0x80040e14
    Source: OraOLEDB
    Description: ROW-00001: Cannot allocate memoryD
    Native Error: 1
    Does anyone have any suggestions or possible solutions??

    this is the oracle forms forum. your chances increase going to the right forum.
    Gerd

  • Pass the results from a selection formula to the default values for a parameter field

    Post Author: kevans
    CA Forum: General
    Crystal 10 u2013 SQL 2000
    I want to create a parameter field that will display all of our IT Departments so the end user can select the one they want to run the report against, such as IT-Security, IT-Network, etc. about 40 in all.  BUT I donu2019t want this to be a static list where I type in all 40 depts in the default list, I was hoping I could do something more dynamic such a formula field that says u201C if {group.name startswith u2018ITu2019 then {group.name}u201D and then have the parameter field pull from this source.
    Iu2019m sure this has been answered in a previous post but Iu2019m not finding it.  I see stuff on creating a record selection formula such as u2018if {?group} like u2018IT-Secur*u2019 thenu2026u201D  but this leaves too much room for error if people donu2019t type the name correctly.  Maybe Iu2019m not using the record selection formula correctly?  Sorry if I offend anyone but I just upgraded from 8 to 10 and thought for sure this option would be in 10, perhaps built right into the parameter default value page where you can place in select criteria but NOTHING has changed.

    Post Author: sharonmtowler
    CA Forum: General
    if you are creating the parameters in the rpt file, it will only pull values you enter, or directly from the database
    in the record selection you can do something like this, so if they only enter the first 2 characters it should pick up only the IT etc.
    (if eft(,2)={?parameter} then true else ={?parameter})

  • Report Selection Formula Error with Crystal Reports 2008 SP3 Fix Pack 3.5

    Hello,
    My name is Carlos, and I would like to report a defect found in the Crystal Reports 2008 SP 3 Fix Pack 3.5 Runtime that is affecting the majority of our reports.  As well, I would like to ask if there is a simple workaround that does not involve updating hundreds of reports.
    The issue is that the runtime engine incorrectly returns the report selection formula.  I have included sample code showing what I mean.
    To reproduce;
    1. Create a simple report that has a date range filter like: 
      ({Orders.Order_Date} >= {?START_DATE})  
      AND ({Orders.Order_Date} <= {?END_DATE})
    2. Create a test app as follow that loads a report using the following code:
    ReportDocument rpt = null;
    try
      rpt = new ReportDocument();
      rpt.Load("TestReport.rpt");
      this.txtMessage.Text = string.Format(
        "ReportSelectionFormula:{0}{1}",
         Environment.NewLine,
      rpt.RecordSelectionFormula);
    catch (Exception ex)     
      this.txtMessage.Text = ex.ToString();     
    3.  Install Crystal Reports 2008 SP3 Fix Pack 3.5 Runtime [https://smpdl.sap-ag.de/~sapidp/012002523100006341772011E/cr2008fp35_redist.zip]..
    4.  Execute the app.
    At this stage, the screen shows
    ReportSelectionFormula:
    (   (  NOT  {Orders.Order_Date} >= {?START_DATE}  )   AND   (  NOT  {Orders.Order_Date} <= {?END_DATE}  )   ) 
    The expected value is:
    ReportSelectionFormula:
    (   (  {Orders.Order_Date} >= {?START_DATE}  )   AND   (  {Orders.Order_Date} <= {?END_DATE}  )   ) 
    If we were to repeat the same test above but use the Crystal Reports 2003 SP3 runtime (i.e. no Fix Pack), which can be dowloaded from [https://smpdl.sap-ag.de/~sapidp/012002523100007123592010E/cr2008sp3_redist.zip], we would get the correct report selection formula. A side-effect for this incorrect report selection formula is a runtime exception complaining about an errorkind and a boolean being expected. 
    Do you know if there is any workaround that I can apply in code, perhaps a different Fix Pack?  Is there a Fix Pack expected to be released soon?  It is not practical for us to update our reports and use a different style in the record selection formula because we have many such reports, and our customers probably have even more.
    Thank you.
    -Carlos.

    Already a known issue, here's the [KB 1584095 - A boolean NOT is added at the beginning of a record selection formula when the report is loaded by the Crystal Reports .NET SDK |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%7B6163636573733d36393736354636443646363436353344333933393338323636393736354637333631373036453646373436353733354636453735364436323635373233443330333033303331333533383334333033393335%7D.do]

  • What if I implement data level security using Selection formula?

    Hi All,
    I have a requirement to implement data level security for all the reports, the thing is, we donot have a front end application developed in java/.net or any other language, so we have only two options (as per me, if you think there are other alternatives then please share).
    1) Implement security at the database level (that is use user roles in where clause which will make the where clause really complicated and hence the performance of the query will eventually decrease).
    2) Retrieve the data with the flags of user role/permission on data. Use these flags in selection formula to select the needed records as per the user login.
    I have already in middle of implementing the second method, thought to take suggestion from you guys, I appreciate if you could tell me the drawbacks of the method I am using, and if there is an alternative method you could think of.
    Thanks,
    -Azhar

    Standaone Crystal Reports does not have any security option except to use Trusted Authentication when connecting to the DB. We use Microsofts NT or MS SQL Server Authentication only.
    Doing this in CR Designer using flags and formula will never be secure, the user could simply change the formula etc...
    Check with your DBA on how to configure AD authentication and then enable or add each user to SQL server. You may need to configure and mantain this manually depending on how you ahve your network configured.
    Thank you
    Don

  • Selection formula not selecting by dates

    I'm having an odd problem with my report. I'm trying to filter by the start date of a job. The DB I'm pulling from stores it as a string, YYYMMDD (e.g. today is 20090713). In most of my reports it works just fine, but in this one it seems that it's ignoring the filter altogether.
    My original selection formula was:
    {JobMaster.StartDate} IN {?FromDate} to {?ToDate}
    In an effort to 'fix' it, I changed it to:
    DateSerial(ToNumber(Mid({JobMaster.StartDate},1,4)),ToNumber(Mid({JobMaster.StartDate},5,2)),ToNumber(Mid({JobMaster.StartDate},7,2))) >= DateSerial(ToNumber(Mid({?FromDate},1,4)),ToNumber(Mid({?FromDate},5,2)),ToNumber(Mid({?FromDate},7,2)))
    AND
    DateSerial(ToNumber(Mid({JobMaster.StartDate},1,4)),ToNumber(Mid({JobMaster.StartDate},5,2)),ToNumber(Mid({JobMaster.StartDate},7,2)))
        <= DateSerial(ToNumber(Mid({?ToDate},1,4)),ToNumber(Mid({?ToDate},5,2)),ToNumber(Mid({?ToDate},7,2)))
    I noticed that it even grabs jobs July, even if I pass the FromDate as 20080601 and ToDate as 20090601. The startdate I'm dealing with is 20090702.
    Any ideas? Thanks in advance.

    Hi Lain,
    Do the following :
    Create single Date parameter and in options allow range values true.  Now in your record selection you gie = {?Date}
    Thanks,
    Sastry

  • CRVS2010 Beta - Database login fails after setting select formula

    I am working through how to call the report and have it print programatically.  I was able to get it to print with the saved data, but as soon as i add a recordSelectionFormula to it, it fails saying the login is incorrect.  I have searched the forums and tried the different resolutions some people have used, but it still fails for me.  What about the select formula would cause this issue?  below is the code i am using.  Please let me know what I am missing, thank you.
                ReportDocument crDoc = new ReportDocument();
                crDoc.Load("c:
    shipmgmt
    reports
    PackingSlip.rpt");
                crDoc.SetDatabaseLogon("user", "password", "localhost", "shipmgmt");
                crDoc.RecordSelectionFormula = "{ld_mstr.ldm_nbr} = \"13994\" AND {ld_mstr.ldm_ord} = \"665527\"";
                Object sfVal = new Object();
                sfVal = "R&S COLUMBIA";
                Object prncases = new Object();
                prncases = false;
                crDoc.SetParameterValue("shipFrom", sfVal);
                crDoc.SetParameterValue("prnCases", prncases);
                crDoc.PrintOptions.PrinterName = "
    wc-printserver
    wccsr";
                crDoc.PrintToPrinter( 1, false, 0, 0 );
                crDoc.Dispose();

    Hello,
    Copy the record selection formula from the Designer and paste that into your code, then use a report without the record selection formula saved in it and test again.
    Next step is what database and driver are you using? Joinbuilder registry keys were for old legacy drivers. This may be an issue with the driver configuration.
    ALSO, don't use "localhost" as your Server name or DSN name etc. Try replacing it with the actual DB server/machine name:
    crDoc.SetDatabaseLogon("user", "password", "localhost", "shipmgmt");
    Thanks again
    Don

  • Using Date Range parameter in Subreport Selection Formula

    I have a subreport which includes this line in the selection formula:
    {Production.Date} = {?Pm-?DateRange}
    {?Pm-?DateRange} appears in the Subreport Links window, so it seems like it should work.
    The DateRange parameter is set by the user in the Main report.
    But the subreport returns no records.
    I tried this:
    In the Main report I created a StartDate and a StopDate field from {?Pm-?DateRange} .
    Then in the subreport selection formula I used these two formula fields like this:
    {Production.Date} >= @StartDate
    and
    {Production.Date} <= @StopDate
    This works!
    So I have found a workaround, but still, I don't understand why the original code {Production.Date} = {?Pm-?DateRange} returns no records.
    Thanks,
    Art

    Hi Art,
    You cannot use a date range parameter directly in the subreport's record selection formula.
    You'll need to create a formula in the Main report like this:
    Minimum(?DateRange) //This gives the start date
    Maximum(?DateRange) //This gives the end date
    Then send these formulas as parameters to subreport for use in the record selection formula.
    I think you've already got this figured out anyway!
    -Abhilash

  • Using a list with selection formula

    I am trying to paste a large list of numbers (1000) into my record selection criteria.  The database field is a string.
    These are specific invoices I am using my report to retrieve data on.  My list of numbers originates from an excel spreadsheet, and I am using a formula to add quotation marks and a comma to separate each invoice number so my list is like this
    "1234",
    "5678",
    "1256",
    I am then copying the list from excel into my report's selection criteria, adding in {invoice number} in [.......]
    My report is not returning anything, but - when I comment out all of the entries in my list except for the first item (and move my closing bracket ] ) the report returns the results for that one entry.
    Does anyone have thoughts on what may be causing this to occur?
    Any assistance is greatly appreciated.

    thanks Jason - I know the IN statement has a limit of 1000 entries (my list really has about 3000 entries - but I have broken this into several IN [] OR IN []....type statements to work around that
    I seem to have this issue anytime there is more than 1 entry in the IN clause. 
    I did notice that if I convert the database field I am using as a filter to a different datatype, this works ok - to explain everything so far....
    invoice number is a string, so
    if I say {invoice number} IN ["1","2","5","105","57234890"] returns nothing
    if I say {invoice number} IN ["1"] I get the data for invoice "1"
    if I use CDBL({invoice number}) IN [1,2,5,105,57234890] it works and returns data for all invoices in the list
    So now, I guess I found a way to make it work in this case, but I am even more confused as to why it does not work when specifying the string in quotes

  • Select formula works with one set of data but not another??

    Post Author: rkckjk
    CA Forum: Formula
    I have the folloing Select formula:{Sheet1_.Assign Group History} = '{"COMPUTER OPERATIONS"}' and{Sheet1_.Resolved By Group} = "COMPUTER OPERATIONS"That I'm using to select records from an Excel spreadsheet. It works fine with the Jan. 2008 spreadsheet file: Test MTTR Jan 2008.xlsbut not with the Feb. 2008 spreadsheet: Test MTTR Feb 2008.xlsWhen I use the Feb. 2008 file I get this error:"Query Engine Error:'Error code: 0x800a06ff Source: DAO.Recordset Description: this expression is typed incorrectly, or it is too complex to be evaluated."Basically both Excel files are in the same format but have different data in them. I don't understand why Jan's works, but not Feb's???
    Since, I can't upload the two files without contacting the system administrator, maybe someone can help me debug the error code or how to debug this error using another method or idea??

    Post Author: sharonmtowler
    CA Forum: Formula
    did you try each sheet while removing one of the select statements?  i would start there and try feb with no select statement, add one in, then the next
    see what is causing your problem. it sounds like some data in the xls file is in an incorrect format.

Maybe you are looking for