当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 就是把vc 写的程序编译成不带动态链接库的那种. 就是一个可执行的文件就行! bcb里我知道怎么设但是vc 里怎么设呢? ......
    摘要: 我找到一本清华的教材《计算机图形学》,是不是一定要学bezier 、b样条、 nurbs这些?图形学最前卫的是哪些方向?硕士、博士都研究什么?各位都在作什么? ......


一个关于递归的问题,大家帮忙看看,谢谢

GoodsItemID         UpperGoodsItemID  
  10000 10000  
  10001 10000  
  10002 10000  
  10003 10000  
  10004 10000  
  10005 10004  
  10006 10004  
  10007 10006  
  10008 10006  
  10009 10006  
  10010 10004  
  10011 10004  
  10012 10000  
  10013 10012  
  10014 10013  
  10015 10013  
  10016 10013  
   
  取得选择的资产名称所有子资产名称代码  
  Sub   GetGoodsItemId(TmpID   As   Long)  
          Dim   Tmprst   As   ADODB.Recordset  
          Dim   TmpStr   As   String  
          Dim   Rst   As   ADODB.Recordset  
           
          Set   Tmprst   =   OpenDB("Select   GoodsItemID,UpperGoodsItemID   from   GoodsItem   Where   GoodsItemID="   &   TmpID)  
          Do   While   Not   Tmprst.EOF  
                  TmpGoodsItemID   =   TmpGoodsItemID   &   Tmprst!GoodsItemId   &   ","  
                  Set   Rst   =   OpenDB("select   GoodsItemID,UpperGoodsItemID   from   Goodsitem   Where   UpperGoodsItemID="   &   Tmprst!GoodsItemId)  
                  Do   While   Not   Rst.EOF  
                          Call   GetGoodsItemId(Rst!GoodsItemId)  
                          Rst.MoveNext  
                  Loop  
                  Tmprst.MoveNext  
          Loop  
  End   Sub  
   
  以上这段代码是原来的,现在要用数组改进  
  下面是我新写的,但是有问题  
   
  Sub   GetGoodsItemId(TempID   As   Long)  
          Dim   Tmprst   As   ADODB.Recordset  
          Dim   i,   J,   K,   L,   M,   n,   O,   P   As   Integer  
          Dim   gk()   As   StructGoodskinds  
          Dim   TmpGID,   TmpUGID   As   Long  
          Dim   Low,   Mid,   Hig   As   Integer  
                 
          取得记录集并排序  
          Set   Tmprst   =   OpenDB("Select   GoodsItemID,GoodsItemNo,UpperGoodsItemID   from   GoodsItem   order   by   GoodsItemID,UpperGoodsItemID")  
          Tmprst.MoveLast  
          ReDim   gk(Tmprst.RecordCount)   As   StructGoodskinds  
          Tmprst.MoveFirst  
           
          将记录集中的所需数据放入数组中  
          For   i   =   0   To   Tmprst.RecordCount   -   1  
                  gk(i).GoodsItemID   =   Tmprst!GoodsItemID  
                  gk(i).GoodsItemNO   =   Tmprst!GoodsItemNO  
                  gk(i).UpperGoodsItemID   =   Tmprst!UpperGoodsItemID  
                  Tmprst.MoveNext  
          Next   i  
           
          在数组中取得资产ID号(GoodsItemID)  
          Low   =   0  
          Hig   =   Tmprst.RecordCount   -   1  
          Do   While   (Low   <=   Hig)  
                  Mid   =   (Low   +   Hig)   /   2  
                  i   =   Mid  
                  If   gk(i).GoodsItemID   =   TempID   Then  
                          Exit   Do  
                  ElseIf   TempID   >   gk(i).GoodsItemID   Then  
                          Low   =   Mid   +   1  
                  Else  
                          Hig   =   Mid   -   1  
                  End   If  
          Loop  
           
          将所需数据暂存变量  
          TmpGID   =   gk(i).GoodsItemID  
          TmpUGID   =   gk(i).UpperGoodsItemID  
          TmpGoodsItemID   =   TmpGoodsItemID   &   gk(i).GoodsItemID   &   ","  
           
          按照所取得的资产ID号,取出拥有下级子资产的ID放入数组gk().TempID中  
          For   J   =   0   To   Tmprst.RecordCount   -   1  
                  If   gk(J).UpperGoodsItemID   =   TmpGID   Then  
                          K   =   K   +   1  
                          gk(K).TempID   =   gk(J).GoodsItemID     递归之后值会被冲掉!  
                          TmpGoodsItemID1   =   TmpGoodsItemID1   &   gk(K).TempID   &   ","  
                  End   If  
          Next   J  
           
          如果子资产中还有下级子资产,利用递归找出其所有子资产,将取出的所有子资产放入全局变量TmpGoodsItemID中  
          For   L   =   1   To   K  
                  For   M   =   0   To   Tmprst.RecordCount   -   1  
                          If   gk(L).TempID   =   gk(M).UpperGoodsItemID   Then  
                                  Call   GetGoodsItemId(gk(L).TempID)  
                          End   If  
                  Next   M  
                  TmpGoodsItemID   =   TmpGoodsItemID   &   gk(L).TempID   &   ","  
          Next   L  
  End   Sub  
   
  现在的问题是那个被冲掉的数据怎么保护啊~~

NO.1   作者: victorycyz

太长,晕......

NO.2   作者: yijiansong

再定义一个数组保存原记录!

NO.3   作者: handwolf

将你的程序更改如下:  
    添加一个临时变量就可以了  
  Sub   GetGoodsItemId(TempID   As   Long)  
          Dim   Tmprst   As   ADODB.Recordset  
          Dim   i,   J,   K,   L,   M,   n,   O,   P   As   Integer  
          Dim   gk()   As   StructGoodskinds  
          Dim   Temp_gk()   as   StructGoodskinds   添加的临时变量  
          Dim   TmpGID,   TmpUGID   As   Long  
          Dim   Low,   Mid,   Hig   As   Integer  
              K   =   -1   给K赋初值    
          取得记录集并排序  
          Set   Tmprst   =   OpenDB("Select   GoodsItemID,GoodsItemNo,UpperGoodsItemID   from   GoodsItem   order   by   GoodsItemID,UpperGoodsItemID")  
          Tmprst.MoveLast  
          ReDim   gk(Tmprst.RecordCount)   As   StructGoodskinds  
          ReDim   Temp_gk(Tmprst.RecordCount)   As   StructGoodskinds  
          Tmprst.MoveFirst  
           
          将记录集中的所需数据放入数组中  
          For   i   =   0   To   Tmprst.RecordCount   -   1  
                  gk(i).GoodsItemID   =   Tmprst!GoodsItemID  
                  gk(i).GoodsItemNO   =   Tmprst!GoodsItemNO  
                  gk(i).UpperGoodsItemID   =   Tmprst!UpperGoodsItemID  
                  Tmprst.MoveNext  
          Next   i  
           
          在数组中取得资产ID号(GoodsItemID)  
          Low   =   0  
          Hig   =   Tmprst.RecordCount   -   1  
          Do   While   (Low   <=   Hig)  
                  Mid   =   (Low   +   Hig)   /   2  
                  i   =   Mid  
                  If   gk(i).GoodsItemID   =   TempID   Then  
                          Exit   Do  
                  ElseIf   TempID   >   gk(i).GoodsItemID   Then  
                          Low   =   Mid   +   1  
                  Else  
                          Hig   =   Mid   -   1  
                  End   If  
          Loop  
           
          将所需数据暂存变量  
          TmpGID   =   gk(i).GoodsItemID  
          TmpUGID   =   gk(i).UpperGoodsItemID  
          TmpGoodsItemID   =   TmpGoodsItemID   &   gk(i).GoodsItemID   &   ","  
           
          按照所取得的资产ID号,取出拥有下级子资产的ID放入数组gk().TempID中  
          For   J   =   0   To   Tmprst.RecordCount   -   1  
                  If   gk(J).UpperGoodsItemID   =   TmpGID   Then  
                        K   =   K   +   1  
                        Temp_gk(K).TempID   =   gk(J).GoodsItemID     递归之后值会被冲掉!  
                        TmpGoodsItemID1   =   TmpGoodsItemID1   &   Temp_gk(K).TempID   &   ","                          
                  End   If  
          Next   J  
           
          如果子资产中还有下级子资产,利用递归找出其所有子资产,将取出的所有子资产放入全局变量TmpGoodsItemID中  
          For   L   =   0   To   K   这里循环由0开始  
                  For   M   =   0   To   Tmprst.RecordCount   -   1  
                          If   Temp_gk(L).TempID   =   gk(M).UpperGoodsItemID   Then  
                                  Call   GetGoodsItemId(Temp_gk(L).TempID)  
                          End   If  
                  Next   M  
                  TmpGoodsItemID   =   TmpGoodsItemID   &   Temp_gk(L).TempID   &   ","  
          Next   L  
  End   Sub  
  同时我想问一下:  
  1),这里下面两个变量的作用在你的第一个代码中没有  
  TmpGoodsItemID   与   TmpGoodsItemID1    
  2),注意这里可能出现的无限递归调用


 ·excel的问题。up者有分    »显示摘要«
    摘要: 如何在excel里将小数不为0的数加1,为0的数不变。如: 23.1 变换后输出为 24 23.8 变换后输出为 24 ===================== 23.0 变换后输出为 23 帮帮忙呀!!!! ......
» 本期热门文章:
· 热门栏目:
» 相关精选文章
» 其它相关:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE