请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

sjsm

中级会员

63

主题

252

帖子

649

积分

中级会员

积分
649

活字格认证微信认证勋章

sjsm
中级会员   /  发表于:2017-4-5 14:51  /   查看:6349  /  回复:12
asc()函数必须是非空的,我先提前判断下是否长度大于零,然后再执行有asc的判断,为什么还跑错呢


=IIF(len(Ltrim(Fields!programer_name.Value))>0,IIF(asc(Left(Ltrim(Fields!programer_name.Value),1))>=65,"英文","汉语"),"")



错误明细:
GrapeCity.ActiveReports.ReportException: 发生了一个意外错误。更多信息: '调用的目标发生了异常。' ---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.ArgumentException: 参数“String”的长度必须大于 0。
   在 Microsoft.VisualBasic.Strings.Asc(String String)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 #9wA.#DXe.Invoke(InvokeArgs e)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.Invoke(#nZe context, Object instance, Object[] arguments)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#FDk(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#34(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.CompoundExpressionInfo.#34(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#FDk(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#34(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#FDk(#nZe context)
   在 GrapeCity.ActiveReports.Expressions.FunctionExpressionInfo.#34(#nZe context)
   在 #XwA.#mZe.Evaluate(ExpressionInfo expression)
   在 #wxA.#VzA.#7LA(ExpressionInfo expressionToEvaluate, IDataScopeInternal dataScope)
   在 GrapeCity.ActiveReports.Rendering.Components.LightTextBox.get_Value()
   在 GrapeCity.ActiveReports.Rendering.Components.LightTextBox.get_ContentValue()
   在 GrapeCity.ActiveReports.Layout.TextLayoutManager.#wsf(ITextContentRange range, LayoutDirection direction, SizeF availableSize)
   在 GrapeCity.ActiveReports.Layout.TextLayoutManager.<>c__DisplayClass1.<Measure>b__0()
   在 GrapeCity.ActiveReports.Layout.TextLayoutManager.#nGE(ITextItem textItem, Func`1 func)
   在 GrapeCity.ActiveReports.Layout.TextLayoutManager.Measure(LayoutContext context)
   在 #sxA.#l3e.#Nvf(LayoutContext context, Single width, Single height)
   在 #sxA.#l3e.Measure(LayoutContext context)
   在 #sxA.#U3e.#9Zx(ITableRow row, Int32 rowIndex, Single maxVerticalExtent, Boolean cacheLayoutManagers, Boolean cacheMeasureResults)
   在 #sxA.#U3e.#9Zx(ITableRow row, Int32 rowIndex)
   在 #sxA.#Q3e.#Tae(Int32 index)
   在 #sxA.#Q3e.#Pmx()
   在 #sxA.#O3e.#hyf(Single contentPageHeight, List`1 rowsCache, Single& verticalExtent)
   在 #sxA.#P3e.#hyf(Single contentPageHeight, List`1 rowsCache, Single& verticalExtent)
   在 #sxA.#W3e.#yuf(Single contentPageHeight)
   在 GrapeCity.ActiveReports.Layout.TableLayoutManager.Layout(#92e tableArea)
   在 GrapeCity.ActiveReports.Layout.TableLayoutManager.Run(LayoutContext layoutContext, #e4e spaceManager)
   在 #sxA.#l3e.#Rvf(LayoutContext context, #e4e spaceManager)
   在 #sxA.#83e.#Rvf(LayoutContext context, #e4e masterSpaceManager)
   在 #sxA.#93e.Run(LayoutContext context, #e4e spaceManager)
   在 #sxA.#93e.#Xyf(LayoutContext context)
   在 #sxA.#93e.#Dxf(#S2e masterTree)
   在 #sxA.#93e.BuildLayout()
   在 GrapeCity.ActiveReports.Layout.Engine.BuildLayout(LayoutInfo layoutInfo)
   在 #GPr.#RLf.#NNf(IReport report, TargetDeviceCapabilities targetDevice, LayoutNotificationCallback callback)
   在 GrapeCity.ActiveReports.Export.Image.Page.ImageRenderingExtension.Render(IReport report, StreamProvider streams, NameValueCollection settings)
   在 GrapeCity.ActiveReports.Document.PageDocument.Render(IRenderingExtension renderingExtension, StreamProvider streams, NameValueCollection settings, Boolean forceDataRefresh, Boolean forceParameterDataRefresh)
   --- 内部异常堆栈跟踪的结尾 ---
   在 GrapeCity.ActiveReports.Document.PageDocument.Render(IRenderingExtension renderingExtension, StreamProvider streams, NameValueCollection settings, Boolean forceDataRefresh, Boolean forceParameterDataRefresh)
   在 GrapeCity.ActiveReports.Viewer.Win.Rdlx.RdlReport.<>c__DisplayClassf.<LoadImpl>b__b()
   在 GrapeCity.ActiveReports.Viewer.Win.AsyncLoader.<>c__DisplayClass7.#cAz(Object , DoWorkEventArgs )
   在 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
   在 System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

12 个回复

倒序浏览
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-4-5 15:55:37
沙发
本帖最后由 Lenka.Guo 于 2017-4-5 16:07 编辑

您调用此方法是想实现什么功能?Fields!programer_name.Value字段里面包含了对科目的标志?
如果这个样子可以直接用IIF 语句来判断,为什么要调用ASC 函数呢?
回复 使用道具 举报
sjsm
中级会员   /  发表于:2017-4-5 16:13:49
板凳
是这样的,如图,在客户要求中,英文和汉语字体需要不同想样式,我的设计思路是获得当前空格的第一个字符,判断它的ASCII编码来确定是不是英语,所以用到了asc函数,但是有的值可能是空的,所以才出现了当前的错误

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-4-5 16:47:24
地板
修改成这个样子试试:把字段


=IIF(Fields!programer_name.Value <>Null, IIF(asc(Left(Ltrim(Fields!programer_name.Value),1))>=65,"英文","汉语"),"")
回复 使用道具 举报
sjsm
中级会员   /  发表于:2017-4-5 16:59:15
5#
还是不可以
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-4-5 17:08:11
6#
本帖最后由 Lenka.Guo 于 2017-4-5 17:10 编辑

如果报同样的错误。那就是里面那个取首字符的函数有问题啊,先把表达式一层一层的验证是否合法,
1. 先判断怎么判断字符是NULL. 主要看数据库是怎么存储Null 字符的

可以使 字段 is Null  还是 字段=“”。先验证这个表达式是否正确

2. 然后在走ASC 函数,判断Left 里面写的是否正确

=IIF(1<> Null, IIF(ASC(Left("aaaa",1))>=65,"英文","汉语")," TEST")

回复 使用道具 举报
sjsm
中级会员   /  发表于:2017-4-6 20:22:31
7#
你好,我试验了一下,已确定数据库存的值是""空格。
先是 =IIF(""<> "", IIF(ASC(Left(" ",1))>=65,"英文","汉语")," TEST"),输出 TEST
然后,=IIF(""<> "", IIF(ASC(Left("",1))>=65,"英文","汉语")," TEST"),抛错。
猜测,不论IIF条件是否成立,都会运行所有可能项。
回复 使用道具 举报
sjsm
中级会员   /  发表于:2017-4-7 10:43:36
8#
请问这下如何解决呢?目的就像之前所说的,在表达式里,如果值为空,就不执行IIF(ASC(Left(" ",1))>=65,"英文","汉语")的方法
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2017-4-7 11:07:36
9#
我在这边测试换成= 号可以:=iif( " "=" ", "1222", IIF(ASC(Left("你好",1))>=65,"英文","汉语"))
回复 使用道具 举报
sjsm
中级会员   /  发表于:2017-4-7 11:23:05
10#
=iif( " "=" ", "1222", IIF(ASC(Left("",1))>=65,"英文","汉语"))
若是left内是空,你那个就不行了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部