1:数据库与TreeView的问题,要求可以实现无层次限制,并且不用递归,效果不是很好!
   谈谈你的树结构数据表是怎样的!
2:控制Word的问题,处理表格和文档,如果用模板实现,将数据库中的相干信息进行替换
   ,如何操作?
3:数据库多人访问之数据库一致性控制问题,不要求有具体的细节,可以谈谈控制思想和方法。我在后面的几天,要出外一趟,可能来不了!但希望论坛的朋友们帮帮忙!
先谢了!
如果你要分,我可以直接另开贴,你说一下!

解决方案 »

  1.   

    1.不用遞歸?那就不知道怎麼做了,我是用遞歸做的,其實做起來也很簡單。不用遞歸的話,用堆棧也可以,不過都大同小異的。
    2.word沒控制過,只控制過EXCEL,使用vba應該都一樣的。
    3.我的一般做發是:在表中加一個修改的datetime字段,在每次改變數據庫中資料以前,用數據集中的該字段和後台數據庫中該字段比較,如果不一樣,說明被別人改動了。然後給出提示,是否重新整理,確定的話,就用後台數據庫中資料刷新數據集中的資料。
      

  2.   

    To suton;
      1:用递归速度不是很好,用堆栈有新意,可否说一下。
      2:如果是”一样“那就好解决了,位置等是不好控制的!
      3:这个datetime 是否过于烦琐To Geranium:
       事物锁会否带来数据库效益方面的影响,Sql SERVER后台有这方面的控制!
      

  3.   

    The Second question i have finished and i use TWordDocument.bookThe first and third question ???
      

  4.   

    首先聲明:堆棧的做法我沒具體研究過,只是了解那種思路。是我在<電腦編程技巧與維護>第七期上看到的。文章題目是<用asp實現商務網站動態樹型商品目錄的顯示>。
    我簡單介紹一下它的思想,它做的東西在網頁上也是一個類似treeview的樹。
    它用到的表結構:
    fieldname        meaning
    id               目錄id號
    name             目錄名
    fatherid         父目錄id
    level            層次數
    treeno           樹中的序號
    childnum         孩子數
    descendanNum     子孫數
    spread           是否展開
    memo             備注對這個結構,你不一定要全部照套,因為asp中沒有treeview控件,它為了要做到那個效果,加了比如“是否展開”之類的字段。然後,具體做發是:首先定義一個堆棧,用來存放各級目錄尚待顯示的兄弟數,當顯示下級目錄的時候,先將本級目錄的兄弟數量壓棧,顯示完下級目錄,再顯示本級目錄項時,將原來壓入堆棧的本級兄弟數量出棧。再讀取目錄表中的記錄,並按序號排列。然後一條一條的顯示每一個目錄項。
    和堆棧有關的函數我可以提供給你,是asp的,你可以參考一下:
    <% dim stack(15)
    dim top
    top=0
    '出棧
    function pop(stack,top)
    if top<1 then
        response.write("overflow_down")
    else
        pop=stack(top)
        top=top-1
    end if
    end function
    '壓棧
    sub push(stack,top,x)
    if top>15 then
        response.write("overflow_up")
    else
        top=top+1
        stack(top)=x
    end if
    end sub%>
      

  5.   

    To suton:
      Thank you very much! I will look for and view the document .To All;
      I will leave some days and i will pay some tiem on these titles
      

  6.   

    TWordDocument.book
    能够保证格式嘛,可以编辑嘛?
    第一个问题关注
    第三个问题,关键就是识别脏数据的问题,你可以参考interbase的事务管理过程,对事务进行版本控制。数据锁定也为了解决这个问题的。
    如果是让别人能同步看到你修改后的数据,可以采用keyset cursor啊
      

  7.   

    TWordDocument.book
    能够保证格式嘛,可以编辑嘛?
    第一个问题关注
    第三个问题,关键就是识别脏数据的问题,你可以参考interbase的事务管理过程,对事务进行版本控制。数据锁定也为了解决这个问题的。
    如果是让别人能同步看到你修改后的数据,可以采用keyset cursor啊
      

  8.   

    TWordDocument.book
    能够保证格式嘛,可以编辑嘛?
    第一个问题关注
    第三个问题,关键就是识别脏数据的问题,你可以参考interbase的事务管理过程,对事务进行版本控制。数据锁定也为了解决这个问题的。
    如果是让别人能同步看到你修改后的数据,可以采用keyset cursor啊
      

  9.   

    关于TreeView
    将创建的节点内容保存入库,然后下次读取库中内容,进行遍历
      

  10.   

    第一个问题我没有使用递归和堆栈,直接使用深度排序(也可以使用节点排序只要保证父节点在前面就行)后生成,速度很快。这是参考一位前辈老师的做法。
    第三个问题,只能使用事务和锁,在Delphi中可以通过数据连接控件设置隔离级别来实现
      

  11.   

    谢谢各位的回复,我想关于加锁的问题,肯定会对数据库的效率有影响。一般也是采用事务和锁。To czp(万非) :
    设置隔离级别我不太明白这个意思???peiweiwei(一指残) 
    可以保证格式,甚至你还可以用表格。
      

  12.   

    1:关键是各级代码的内置ID编码长度设定,然后根据这个内置ID编码一级一级的创建
       或者只创建第一层的树,在浏览树结点的时候,再动态的添加下一层,浏览下一层的时候,再添 加下一层,一直添加完成,当然,在浏览的时候要先判断一下有没有下级节点,如果有,就不用再添加了。
    以上两种方法的速度都很快,我一万条记录的创建都没有感觉到有速度的延迟其它的我用事务,锁没有用过
      

  13.   

    TO cjs5210(我是菜鸟) :
      方法2。你这一方法要求对后台数据库进行频繁的访问,会带来带宽的问题!
      

  14.   

    我怎么发三次啊,不好意思。
    cjs5210(我是菜鸟)的方法是在浏览时进行判断啊。不会频繁访问啊!
      

  15.   

    关于TreeView
    我也遇到这个问题,在ERP主界面上放一TreeView,系统功能以树的形式显示,但需要显示哪些内容
    显示的层次如何各用户可以自定义,可能每个客户端定义样式都不异样,不想写到服务器的表里面,我用了本地的一个文本文件(作为数据库)来处理,每次启动时从文本文件创建树创建完成后,不再与文本文件连接,如果用户更改了树的样式需要保存,再把树结果写回到文本文件,但好像比较慢几十条记录,用了好几秒。
      

  16.   

    将树型内容写入到表中,并有顺序控制,然后使用SQL语句按顺序读出,添加到TreeView中
      

  17.   

    看你用什么数据库了,oracle实现起来比较方便,sqlserver可以使用:
    declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
    insert @a values(1,0,'中国')
    insert @a values(2,0,'美国')
    insert @a values(3,0,'加拿大')
    insert @a values(4,1,'北京')
    insert @a values(5,1,'上海')
    insert @a values(6,1,'江苏')
    insert @a values(7,6,'苏州')
    insert @a values(8,7,'常熟')
    insert @a values(9,6,'南京')
    insert @a values(10,6,'无锡')
    insert @a values(11,2,'纽约')
    insert @a values(12,2,'旧金山')declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200),lev int)
    insert @tmp1 select *,1 from @a where tc_ID=1
    while exists(select 1 from @a a,@tmp1 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from @tmp1))
      insert @tmp1 select a.*,1 from  @a a,@tmp1 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from @tmp1)
    select * from @tmp1上面的代码你放到查询分析器里执行一下就可以看到结果,其他的数据库可以按这种方式。
      

  18.   

    如果你闲查询速度慢,你可以使用:a        b
    ----------
    01      aa
    0101    bb
    02      cc
    0201    dd这种方式存储,这样虽然比上面的方法存储冗余,但查询起来比较方便。
      

  19.   

    sqlserver 200帮助里面有实现的代码
      

  20.   

    1、CSDN 的数据库专 版,有个很好的案例和解释。
       提高速度的办法就是,随用随调,打开时候只打开其子节点;
    2、我的办法是用WORD 事先生成 绘制 表格的宏代码,然后将宏代码放进程序,用字段替换
       单元格的内容;
    3、数据一致性的保证:启用事务
       “Begin Transaction actionName ”
        // 代码
       “Commit Transaction actionName ”
      

  21.   

    我自己的一个控件,只在D6下试过。
    还不是行完善,以后开放源码。
    http://www.myjinsui.com/down/soft/bgxx.exe
      

  22.   

    3。可以用updatesql解决啊,要把所有的字段选上,当你修改记录而没提交时,别人是改不了的。或者设置隔离几别
      

  23.   

    http://expert.csdn.net/Expert/topic/1882/1882200.xml?temp=.9726526http://expert.csdn.net/Expert/topic/2080/2080420.xml?temp=.1372034如上两个问题好久没人光顾,请看一下,我来的机会不是很多,想揭贴。
    不想失去信誉分。
      

  24.   

    先顶,不过我做的是一个TreeView是动态的,即平时只显示一层,当用户点击某一个结点时才生成下面的结点,这种情况当然可以不用递归啦