以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  加载树报错  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=127428)

--  作者:我要高飞
--  发布时间:2018/11/14 0:54:00
--  加载树报错
在合同表的after_load中的代码
If args(0)="合同表" Then
    With DataTables("合同表")
        \'重载关联子表
        .loadchildren("合同明细表")
        .loadchildren("应收日期")
    End With
    \'重载关联多列关联表
    With DataTables("合同明细表")
        .loadchildren("订单明细表","fcontractid]+[fentryid","[fcontractinterid]+[fcontractentryid]")
        .loadchildren("收款明细表","fcontractid]+[fentryid","[fid_src]+[fentryid_src]")
    End With
    \'重载关联父表
\'    DataTables("收款明细表").loadchildren("收款表","fbillid","fbillid")
End If

每次打开项目后,第一次点击加载树里的任何节点的,都能正常显示。但是再点击任意节点时,就会报错:
错误所在事件:加载[收款明细表]失败!
详细错误信息:
\')\' 附近有语法错误。

之前合同表、合同明细表等表都是数据库里的表的时候是正常的,把这些表改为查询表以后,就报这个错了。
[此贴子已经被作者于2018/11/14 8:19:55编辑过]

--  作者:有点甜
--  发布时间:2018/11/14 9:38:00
--  

1、查询表应该不支持使用 loadchildren,请改回数据表

 

2、你把下面的代码,改成1列,看是否还报错

 

        .loadchildren("订单明细表","fcontractid]+[fentryid","[fcontractinterid]+[fcontractentryid]")
        .loadchildren("收款明细表","fcontractid]+[fentryid","[fid_src]+[fentryid_src]")

 

3、你多列关联的情况,你两列都必须是【字符串列】才行的,不能一列字符串、一列数值

 

 


--  作者:我要高飞
--  发布时间:2018/11/14 10:20:00
--  
查询表是可以执行loadchildren的,项目打开的时候,第一次点加载树的节点,加载的各项子表都是正常的。

并且下面语句执行是正常的,无论加载树怎么操作都不会出错。
     .loadchildren("订单明细表","fcontractid]+[fentryid","[fcontractinterid]+[fcontractentryid]")

只有下面这句第二次点加载树节点的时候报错
        .loadchildren("收款明细表","fcontractid]+[fentryid","[fid_src]+[fentryid_src]")

所有的关联字段都是整数型的

--  作者:有点甜
--  发布时间:2018/11/14 10:22:00
--  

那就是你收款明细表的问题。

 

1、贴出所写的sql语句;

 

2、复杂的查询表,是不支持loadchildren加载以及loadfilter、load的。


--  作者:我要高飞
--  发布时间:2018/11/18 13:00:00
--  
研究了一下报错的原因,发现和查询表写的SQL语句有关系

主表和子表都是查询表的情况下

如果主表查询的SQL用了类似inner join这样的多表连接,那么子表也必须是inner join之类的多表连接。如果主表是多表连接,子表用的selece * from
xxx这样的单表查询,就会出现loadchildren报错的情况。如果主子表都是单表查询,也是可行的,不会报错。

这个加载子表能改进一下吗?

另外子表查询selec t a.fid_src from a inner join b on a.fitemid=b.fitemid,主表和子表的关联字段是fid_src,如果子表查询a表和b表里都有fid_src字段,调用loadchildren时会提示  列名 \'fid_src\' 不明确。实际子表查询的结果只selecet a.fid_src,并没有显示两个fid_src。
[此贴子已经被作者于2018/11/18 13:09:01编辑过]

--  作者:有点甜
--  发布时间:2018/11/18 23:35:00
--  

回复5楼,如果提示【不明确】,那么你写列名的时候,要指定 a.fid_src

 

复杂查询表不支持你这样用的,没办法。如果你确实需要加载,你可以用sqlload或者fill等写sql语句实现加载。