以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]狐表有“名表达式”功能吗?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157422)

--  作者:一丁
--  发布时间:2020/10/15 14:51:00
--  [求助]狐表有“名表达式”功能吗?
求助狐爸,狐表有名表达式功能吗?如果没有要如何实现类似功能呢?

具体应用如下

\' 人员身份分类

Dim cFL1,cFL2,cFL3 As String
cFL1 = DataTables("人员身份").GetComboListString("人员身份","人员类别=1","序号")  \'行政人员,机关工勤
cFL2 = DataTables("人员身份").GetComboListString("人员身份","人员类别=2","序号")  \'事业人员,事业工勤
cFL3 = DataTables("人员身份").GetComboListString("人员身份","人员类别=3","序号")  \'特殊4类人员

 Select Case e.DataRow("人员身份")
        Case 表达式1 (变量cFL1的值)
…………
…………
        Case 表达式2 (变量cFL2的值)
…………
…………

        Case 表达式2 (变量cFL3的值)
…………
…………
    End Select
[此贴子已经被作者于2020/10/15 14:57:03编辑过]

--  作者:有点蓝
--  发布时间:2020/10/15 14:53:00
--  
什么叫“名表达式”?举例说明一下
--  作者:一丁
--  发布时间:2020/10/15 15:02:00
--  
在其他某种语言中,有一种叫“名表达式”的东西,具体作用就是将一个变量值直接程作为序执行的一部分,其书写方式是用括号把变量括起来。

例如

A = “事业人员”

那么代码
if e.row(“人员身份”) = (A)
则程序执行的时候就变成
if e.row(“人员身份”) = “事业人员”


说直白点,就是使用变量直接构建程序代码
[此贴子已经被作者于2020/10/15 15:04:31编辑过]

--  作者:有点蓝
--  发布时间:2020/10/15 15:37:00
--  
这个,变量直接使用即可,和表达式有啥关系?!

Dim cFL1,cFL2,cFL3 As String
cFL1 = "1"
cFL2 = "2"
cFL3 = "3"

Dim a As String = "3"
Select Case a
    Case cFL1
        msgbox(0)
    Case cFL2
        msgbox(1)
    Case cFL3
        msgbox(2)
End Select

if e.row(“人员身份”) = A 直接这样使用即可。

您说的这个所谓的"名表达式"应该是指内插字符串的用法吧:https://docs.microsoft.com/zh-cn/dotnet/visual-basic/programming-guide/language-features/strings/interpolated-strings

目前foxtable的编译器不支持这种用法。需要.NET Framework 4.6及以上的版本才支持的。

--  作者:一丁
--  发布时间:2020/10/15 16:37:00
--  
因为我实际应用情况并非如此简单,如果是这样简单应用,当然可以直接使用变量,问题是case 之后的值是多值,类似于:“A”,"B",“C”

Dim cFL1,cFL2,cFL3 As String
cFL1 = "1"
cFL2 = "2"
cFL3 = "3"

Dim a As String = "3"
Select Case a
    Case   cFL1   在运行时,这里的变量要替换成 “A”,"B",“C”    这样的多值比较,这里的 “A”,"B",“C” 是变量的值
        msgbox(0)
    Case cFL2 
        msgbox(1)
    Case cFL3
        msgbox(2)
End Select

上图可能更好理解

此主题相关图片如下:yt.png
按此在新窗口浏览图片

[此贴子已经被作者于2020/10/15 16:44:20编辑过]

--  作者:有点蓝
--  发布时间:2020/10/15 16:44:00
--  
可以使用if判断。具体请举例详细的用法说明
--  作者:一丁
--  发布时间:2020/10/15 16:45:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:yt.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2020/10/15 16:47:00
--  
请详细描述需要做什么样的判断?具体的功能,使用场合,需要什么结果?
--  作者:一丁
--  发布时间:2020/10/15 17:04:00
--  
有两个表,
表1:datatables("人员身份"),里边有一个字段,存储若干种人员身份分类信息,例如:参公管理人员、行政工勤人员、参公工勤人员等等,而且是不确定的。
表2:datatables("工资调整"),里边有一个字段也叫“人员身份”,现在的需求是,当表2中的某一条记录的有关工资信息被修改,就必须进行对应的计算,但在计算之前,先得判断当前记录中的“人员身份”属于表1中若干种“人员身份”中的哪一种,因为分属于不同的“人员身份”,计算公式是不一样的。
本来可以使用
select case tables("工资调整").row("人员身份")
case "参公管理人员"、"行政工勤人员"、"参公工勤人员"
计算公式
…………
end select

这样的代码,但问题是这里的case对比项目 "参公管理人员"、"行政工勤人员"、"参公工勤人员" 是不确定的,每次要表1中提取并动态生成比对项目,麻烦就出在这里。


--  作者:有点蓝
--  发布时间:2020/10/15 17:20:00
--  
表1的数据和结构是怎么样的?怎么样个动态法?