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} )