回 帖 发 新 帖 刷新版面

主题:TreeView问题

我有三个表:tbls,tblj,tblh
tbls(sbh,smc),tblj(sbh,jbh,jmc),tblh(sbh,jbh,hbh,hmc)*括号内是每个表的字段。
我在表单控件的init中写代码:
this.lineStyle= 1
this.style = 7  && tvwTreelinesPlusMinusPictureTex
this.ImageList =thisform.iMAGELIST1 
SELECT tbls
SCAN 
this.Nodes.Add(,,tbls.sbh,tbls.smc,1,2)
SELECT tbls
  SELECT * FROM tblj WHERE ALLTRIM(tbls.sbh)=ALLTRIM(tblj.sbh) INTO CURSOR emp01
  SELECT emp01
  SCAN 
  this.Nodes.Add(sbh,4,jbh,jmc,2,2)
  ENDSCAN 
  SELECT tblj
  SELECT * FROM tblh WHERE ALLTRIM(tblj.jbh)=ALLTRIM(tblh.jbh ) INTO CURSOR emp02
  SELECT emp02
  SCAN 
** this.Nodes.Add(jbh,4,hbh,hmc,3,2)&&这句有问题
  ENDSCAN 
  ENDSCAN 
我的目的是建立一个三层的内容。
请指导
谢谢了

回复列表 (共13个回复)

沙发

你是否可以将三个表先合并为一个表?
目录树的建立,只要指定本级结点和父结点就可以.
合并后按顺序追加就可以了.
理论上这样的已经可以建立好多级了.

Hpbh    Hpparent       Hptitle                                               
2    0    2.0.0-基础资料                                        
3    1    1.1.0-重要设置                                        
4    3    1.1.1-账套选项                                        
5    3    1.1.2-单据参数                                        
6    3    1.1.3-权限设置                                        
7    3    1.1.4-自定义查询设计                                  
8    3    1.1.5-基础资料导入                                    
9    3    1.1.6-数据导入/导出                                   


以下数据全属于猜测:
sbh         smc                                                
----------- -------------
1           AAA
2           BBB
3           CCC
4           DDD

(所影响的行数为 4 行)

sbh         jbh         jmc                                                
----------- ----------- --------
1           1           EEE
1           2           FFF
2           3           GGG
3           4           HHH

(所影响的行数为 4 行)

sbh         jbh         hbh         hmc                                                
----------- ----------- ----------- --------
1           1           1           III
1           1           2           JJJ
1           2           3           KKK
2           3           4           LLL

(所影响的行数为 4 行)

======================华丽的分割===========================


[color=FF0000]PARENT      BH          CAPTION                                            
----------- ----------- ---------
0           1           AAA
0           2           BBB
0           3           CCC
0           4           DDD
1           2           EEE
1           3           FFF
2           3           III
2           4           JJJ
2           5           GGG
3           6           KKK
3           7           HHH
5           9           LLL

(所影响的行数为 12 行)[/color]

板凳

表就是这样的。

3 楼

忘记贴语句了,仅供参考:

SELECT * FROM TBLS
SELECT * FROM TBLJ
SELECT * FROM TBLH


--合并三张表:
SELECT * FROM (
SELECT 0 AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT SBH AS PARENT,SBH+JBH AS BH,JMC AS CAPTION FROM TBLJ
UNION ALL
SELECT SBH+JBH AS PARENT,SBH+JBH+HBH AS BH,HMC AS CAPTION FROM TBLH
)A ORDER BY PARENT,BH

4 楼

谢谢Vii
问题没有解决,谁能说的详细一些吗!
sbh         smc                                                
----------- -------------
S1           AAA
S2           BBB
S3           CCC
S4           DDD

(所影响的行数为 4 行)

sbh         jbh         jmc                                                
----------- ----------- --------
S1           J1           EEE
S1           J2           FFF
S2           J3           GGG
S3           J4           HHH

(所影响的行数为 4 行)

sbh   jbh   hbh  hmc  pd                                             
---- ----- ---- ----  ----
S1    J1    H1  III   .T.
S1    J1    H2  JJJ   .F.
S1    J2    H3  KKK   .T.
S2    J3    H4  LLL   .T.

(所影响的行数为 4 行)
tblh中pd是为了插入不同图标用的。

5 楼

SELECT * FROM (
SELECT '1' AS XH,'P0' AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT '2' AS XH,SBH AS PARENT,JBH AS BH,JMC AS CAPTION FROM TBLJ
UNION ALL
SELECT '3' AS XH,JBH AS PARENT,HBH AS BH,HMC AS CAPTION FROM TBLH
)A ORDER BY XH,PARENT,BH

增加序号列排序,以免按顺序追加结点时出现错误.

我的意见还是三张表能否设计的时候就在一张上?现在这样关联上麻烦,万一来个有子结点,没父结点的就麻烦.

--处理了一下,过滤没有父结点的,参考.

SELECT * FROM (
SELECT '1' AS XH,'P0' AS PARENT,SBH AS BH,SMC AS CAPTION FROM TBLS
UNION ALL
SELECT '2' AS XH,M1.SBH AS PARENT,M1.JBH AS BH,M1.JMC AS CAPTION FROM TBLJ M1 WHERE EXISTS (SELECT 1 FROM TBLS M2 WHERE M1.SBH=M2.SBH)
UNION ALL
SELECT '3' AS XH,M3.JBH AS PARENT,M3.HBH AS BH,M3.HMC AS CAPTION FROM TBLH M3 
WHERE EXISTS (SELECT 1 FROM (SELECT M1.SBH,M1.JBH,M1.JMC AS CAPTION FROM TBLJ M1 WHERE EXISTS (SELECT 1 FROM TBLS M2 WHERE M1.SBH=M2.SBH)) M4 WHERE M3.SBH=M4.SBH AND M3.JBH=M4.JBH)
)A ORDER BY XH,PARENT,BH

6 楼

我有三个表,一个是室,室内有十个架,每个架有20个号,一共3个室。怎样设计一张表,实现这个功能。

 

                   号1 
            架1  <   
   室   <          号2         ……    
            架2

7 楼

再笨的兔也有三个窝,三个表,三个室,这就是习惯!
[color=FF0000]** this.Nodes.Add(jbh,4,hbh,hmc,3,2)&&这句有问题[/color]
其实这句是没问题的,除非你图标3没有添加,我想不会吧!
根据你所说的到了最后一句出问题,哪么一定是EMP02这个表出了问题,要么这个表根本就没有数据,要么这个表生存了一个错误的数据,只要在程序出错的上一句加brow查看一下就知道了!

8 楼

有问题,但忽略能打到想要的效果,但是插入不准确,请多多指教


下面是截图的连接地址

http://static14.photo.sina.com.cn/small/5e8d2423h731e5bf2dc6d&690

9 楼


SELECT  tbls
SCAN 
    this.Nodes.Add(,,tbls.sbh,tbls.smc,1,2)  &&添加父结点
ENDSCAN
SELECT tbls
SELECT * FROM tblj WHERE ALLTRIM(tbls.sbh)=ALLTRIM(tblj.sbh) INTO dbf emp01
SELECT emp01
SCAN 
    this.Nodes.Add(sbh,4,jbh,jmc,2,2)  &&添加子结点
ENDSCAN 
SELECT a.jbh,b.hbh,b.hmc FROM tblj a,tblh b WHERE ALLTRIM(a.jbh)=ALLTRIM(b.jbh ) AND !empty(b.hbh) INTO dbf emp02
SELECT emp02
SCAN 
  this.Nodes.Add(jbh,4,hbh,hmc,3,2)  &&添加下节子结点
ENDSCAN

10 楼

非常感谢,在你的指导下,问题已经得到解决。

我来回复

您尚未登录,请登录后再回复。点此登录或注册