C# 初始化时,SQL表达式在服务器上执行。“may”:是否启用了SQL表达式?这可能取决于数据源。对于基于命令生成的报告,您始终可以通过SQL执行转换。如何?尝试SQL表达式进行部分比较,然后在SELECT EXPERT中对SQLExp进行ANDing。添加答

C# 初始化时,SQL表达式在服务器上执行。“may”:是否启用了SQL表达式?这可能取决于数据源。对于基于命令生成的报告,您始终可以通过SQL执行转换。如何?尝试SQL表达式进行部分比较,然后在SELECT EXPERT中对SQLExp进行ANDing。添加答,c#,crystal-reports,crystal-reports-2008,C#,Crystal Reports,Crystal Reports 2008,初始化时,SQL表达式在服务器上执行。“may”:是否启用了SQL表达式?这可能取决于数据源。对于基于命令生成的报告,您始终可以通过SQL执行转换。如何?尝试SQL表达式进行部分比较,然后在SELECT EXPERT中对SQLExp进行ANDing。添加答案作为示例…我尝试了这个公式。保存报告时没有出现错误,但在执行报告时仍然出现“参数不正确”。我的参数字段为字符串格式。我用我现在的代码更新了我的问题using@Ritzel:我突然想到order_date字段可能是空白的,并在字段末尾填充10个


初始化时,SQL表达式在服务器上执行。“may”:是否启用了SQL表达式?这可能取决于数据源。对于基于命令生成的报告,您始终可以通过SQL执行转换。如何?尝试SQL表达式进行部分比较,然后在SELECT EXPERT中对SQLExp进行ANDing。添加答案作为示例…我尝试了这个公式。保存报告时没有出现错误,但在执行报告时仍然出现“参数不正确”。我的参数字段为字符串格式。我用我现在的代码更新了我的问题using@Ritzel:我突然想到order_date字段可能是空白的,并在字段末尾填充10个字符,因此我在year参数中添加了一个
TrimRight
函数,以删除任何尾随空格。如果此版本仍然未按要求选择,您能否确认是否有一些值不符合所述的日期格式?为什么要以字符串形式输入
actualStart
参数?为什么不将其作为Crystal日期参数输入?@MarkBannister,因为如果我将其更改为日期参数,我的公式编辑器中会出现一个错误,表示此处需要字符串(突出显示actualStart)。顺便说一句,谢谢你的回复。我真的很感激:)你是说在选择公式编辑器中?如果是这样,我的意思是将字符串参数更改为日期参数,并将所有
>=date(…
表达式替换为一个简单的
={?actualStart}
@markbanister是的,我明白你的意思。将字符串转换为日期。这就是我将actualStart设置为字符串的原因,也是因为它的值将是来自日期时间选择器的字符串值。我理解正确吗?我想你误解了我-数据库字段必须从字符串转换为日期,因为未作为日期存储在数据库中。鉴于
actualStart
参数是报表的一部分,没有理由将其声明为字符串,然后将其转换为日期,前提是可以首先将其创建为日期参数。我已相应地更新了我的答案。另外,您是否注意到我对答案的评论?
Date (ToNumber (Right ({Projects.Actual_StartDate}, 4)),
  ToNumber (Left ({Projects.Actual_StartDate}, InStr ({Projects.Actual_StartDate}, "/")-1)),
  ToNumber (Mid ({Projects.Actual_StartDate}, 
                 InStr ({Projects.Actual_StartDate}, "/")+1, 
                 InStrRev({Projects.Actual_StartDate},"/")-InStr({Projects.Actual_StartDate}, "/")-1))
 ) 

 >= 

Date (ToNumber (Right ({?actualStart}, 4)),
  ToNumber (Left ({?actualStart}, InStr ({?actualStart}, "/")-1)),
  ToNumber (Mid ({?actualStart}, 
                 InStr ({?actualStart}, "/")+1, 
                 InStrRev({?actualStart},"/")-InStr({?actualStart}, "/")-1))
 )
    private void Filter_Btn_Click(object sender, EventArgs e)
    {
        ReportDocument cryRpt = new ReportDocument();
        TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
        TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
        ConnectionInfo crConnectionInfo = new ConnectionInfo();

        cryRpt.Load("D:\\MY_THESIS\\WORKING FILES\\WindowsFormsApplication2\\WindowsFormsApplication2\\Reports\\Crystal Reports\\UsersReport.rpt");
        crConnectionInfo.ServerName = "RITZEL-PC\\SQLEXPRESS";
        crConnectionInfo.UserID = "NNIT-Admin";
        crConnectionInfo.Password = "password";
        crConnectionInfo.DatabaseName = "NNIT DB";

        Tables CrTables = cryRpt.Database.Tables;
        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
        {
            crtableLogoninfo = CrTable.LogOnInfo;
            crtableLogoninfo.ConnectionInfo = crConnectionInfo;
            CrTable.ApplyLogOnInfo(crtableLogoninfo);
        }

        // Create parameter objects
        ParameterFields myParams = new ParameterFields();

        //PARAMETER NAME
        ParameterField myParam = new ParameterField();
        ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue();
        myParam.ParameterFieldName = "actualStart";

        myDiscreteValue = new ParameterDiscreteValue();
        myDiscreteValue.Value = FromCreated_DTime.Value.ToShortDateString();
        myParam.CurrentValues.Add(myDiscreteValue);
        myParams.Add(myParam);

        crystalReportViewer1.ParameterFieldInfo = myParams;
        crystalReportViewer1.ReportSource = cryRpt;
    }
stringvar yyear; 
stringvar mmonth; 
stringvar dday; 

dday := {ORDERS.ORDER_DATE}[5 to 6]; 
mmonth := {ORDERS.ORDER_DATE}[3 to 4]; 
yyear := {ORDERS.ORDER_DATE}[1 to 2]; 

if yyear < "50" then 
    date(tonumber(yyear)+2000,tonumber(mmonth),tonumber(dday)) 
else 
    date(tonumber(yyear)+1900,tonumber(mmonth),tonumber(dday)) 
Date (ToNumber (Right (TrimRight ({Projects.Actual_StartDate}), 4)),
      ToNumber (Left ({Projects.Actual_StartDate}, InStr ({Projects.Actual_StartDate}, "/")-1)),
      ToNumber (Mid ({Projects.Actual_StartDate}, 
                     InStr ({Projects.Actual_StartDate}, "/")+1, 
                     InStrRev({Projects.Actual_StartDate},"/")-InStr({Projects.Actual_StartDate}, "/")-1))
     )
 >= {?actualStart}
Left( {?actualStart}, 2 )  > 
   Left( {Projects.Actual_StartDate}, 2 )
-- You can use SUBSTRING, but I'm being lazy.  
-- Time results for both and then decide

Right( Left( {?actualStart}, 5 ) , 2 )  > 
   Right( Left( {Projects.Actual_StartDate}, 5 ) , 2 )
Right( {?actualStart}, 4 )  >
   Right( {Projects.Actual_StartDate}, 4 )
(The REST of your selection code)  
AND
( {@SQLYear} AND {@SQLMonth} AND {@SQLDay} )