以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  昨晚上发现一个问题DataTables.LoadFilter  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=147332)

--  作者:a937775799
--  发布时间:2020/3/14 11:49:00
--  昨晚上发现一个问题DataTables.LoadFilter
首先说明一下【视图_供应商合同】是一个查询表,sql是mssql数据做的视图然后把sql复制到ft查询表用sel。ect 建立的。
昨天 试着按条件加载视图,就写了以下代码,下面紫色的。使用之后 发现 这个 视图_供应商合同】视图就不能用了 ,直接提示找不到‘主合同代码]’关闭窗口重新生成都没用,退出ft,重新打开就可以了,然后在执行还是一样的问题,我现在只能把这句话紫色的注释掉 就没问题了
Dim sql As String = "[主合同代码]= \'" & t("id") & "\'" 
DataTables( "视图_供应商合同").LoadFilter = sql
DataTables( "视图_供应商合同" ).Load
Dim drs As List(of DataRow) = DataTables("视图_供应商合同").Select( sql )

--  作者:有点蓝
--  发布时间:2020/3/14 12:02:00
--  
应该是sql里多个表都有[主合同代码]这个列吧。

其实多此一举,直接在SqlServer里建一个视图,然后在查询表直接使用这个视图即可:
select * from 视图名称

--  作者:a937775799
--  发布时间:2020/3/14 12:03:00
--  
这是sql,主合同代码是 as 新的名字
SELE。CT     dbo.agreementBAndC.agreementCode AS id, dbo.agreementBAndC.agreementName AS 本合同名称, dbo.agreementBAndC.agreementPrice AS 本合同金额, 
                      dbo.agreementBAndC.agreementPartyA AS 甲方代码, dbo.agreementBAndC.agreementPartyB AS 乙方代码, dbo.agreementBAndC.agreementType AS 合同类型, 
                      dbo.agreementBAndC.agreementFatherCode AS 主合同代码, dbo.agreementBAndC.agreementEndPriceType AS 合同结算类型, dbo.agreementBAndC.agreementPayPrice AS 已付金额, 
                      dbo.agreementBAndC.审核流程状态, dbo.agreementBAndC.bz, dbo.agreementBAndC.agreementDate AS 签订时间, flow_1.flowCode, flow_1.flowName, flow_1.flowMain, flow_1.flowPx, flow_1.isOver, 
                      flow_1.flowMainCode, flow_1.flowLimitIds, dbo.agreement.agreementName AS 主合同名称, partner_1.partnerName AS 甲方名称, dbo.partner.partnerName AS 乙方名称, 
                      dbo.agreementBAndC.录入人员代码, dbo.employee.employeeName, dbo.agreementBAndC.agreementFileMain, dbo.agreementBAndC.agreementFileName, 
                      dbo.供应商合同结算.审核流程状态 AS 结算审核流程flowMainCode, dbo.供应商合同结算.结算金额, dbo.flow.flowName AS 结算审核流程flowName, dbo.flow.flowCode AS 结算审核流程flowCode, 
                      dbo.flow.flowMain AS 结算审核流程flowMain, dbo.flow.flowLimitIds AS 结算审核流程flowLimitIds, dbo.flow.isOver AS 结算审核流程isOver, dbo.flow.flowPx AS 结算审核流程px, 
                      dbo.agreementBAndC.合同内账科目代码, dbo.财务内账科目.科目名称, dbo.财务内账科目.本级路径完整名称, dbo.财务内账科目.父路径代码
FROM         dbo.财务内账科目 RIGHT OUTER JOIN
                      dbo.agreementBAndC ON dbo.财务内账科目.科目代码 = dbo.agreementBAndC.合同内账科目代码 LEFT OUTER JOIN
                      dbo.flow RIGHT OUTER JOIN
                      dbo.供应商合同结算 ON dbo.flow.flowMainCode = dbo.供应商合同结算.审核流程状态 ON dbo.agreementBAndC.agreementCode = dbo.供应商合同结算.供应商合同代码 LEFT OUTER JOIN
                      dbo.employee ON dbo.agreementBAndC.录入人员代码 = dbo.employee.employeeSFId LEFT OUTER JOIN
                      dbo.flow AS flow_1 ON dbo.agreementBAndC.审核流程状态 = flow_1.flowMainCode LEFT OUTER JOIN
                      dbo.agreement ON dbo.agreementBAndC.agreementFatherCode = dbo.agreement.agreementCode LEFT OUTER JOIN
                      dbo.partner ON dbo.agreementBAndC.agreementPartyB = dbo.partner.partnerCode LEFT OUTER JOIN
                      dbo.partner AS partner_1 ON dbo.agreementBAndC.agreementPartyA = partner_1.partnerCode

--  作者:a937775799
--  发布时间:2020/3/14 12:05:00
--  
1、视图 sql后台执行没问题, 在ft里面添加了 预览也没问题呢

2、直接 连接视图 ,字段不能选啊 ,用这个 ft里面 可以选字段 方便呀
[此贴子已经被作者于2020/3/14 12:05:34编辑过]

--  作者:有点蓝
--  发布时间:2020/3/14 12:16:00
--  
1、3楼的sql直接在后面加上 where [主合同代码]= \'xxx值\'",然后放到数据库执行有没有问题?

改为这样试试
Dim sql As String = "dbo.agreementBAndC.agreementFatherCode= \'" & t("id") & "\'" 
DataTables( "视图_供应商合同").LoadFilter = sql

2、什么字段不能选?

--  作者:a937775799
--  发布时间:2020/3/14 12:32:00
--  
1、直接在sql里面 where 后面 不能用as 出来的  ’主合同代码‘   , 要用   agreementFatherCode
2、可以选的意思就是下图

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20200314123154.jpg
图片点击可在新窗口打开查看


--  作者:a937775799
--  发布时间:2020/3/14 12:37:00
--  
这样写错误
Dim sql As String = "dbo.agreementBAndC.agreementFatherCode = \'" & t("id") & "\'" 
.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.1.19.19
错误所在事件:窗口,合同默认内账科目List,lv_zht,RowSelectionChanged
详细错误信息:
未找到列 [dbo.agreementBAndC.agreementFatherCode]。

这样写错误,而且这样写错了以后,改回来不会生效,还是提示这个错误,要完全退出ft再打开才能改回来
Dim sql As String = "[dbo.agreementBAndC.agreementFatherCode] = \'" & t("id") & "\'" 
.NET Framework 版本:4.0.30319.34209
Foxtable 版本:2020.1.19.19
错误所在事件:加载[视图_供应商合同]失败!
详细错误信息:
列名 \'dbo.agreementBAndC.agreementFatherCode\' 无效。
[此贴子已经被作者于2020/3/14 12:40:58编辑过]

--  作者:有点蓝
--  发布时间:2020/3/14 14:06:00
--  
使用视图做查询表,肯定也可以选字段,我测试没有问题。
--  作者:a937775799
--  发布时间:2020/3/14 14:19:00
--  
做视图查询表什么意思呀,是说 想table 加载外部表一样吗,能像上面 那样在代码编辑窗口 直接点吗
[此贴子已经被作者于2020/3/14 14:19:34编辑过]

--  作者:有点蓝
--  发布时间:2020/3/14 14:58:00
--  
比如


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

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