精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Powerbuilder>>PFC>>Bugs>>PFC bug list!

主题:PFC bug list!
发信人: edison()
整理人: edison(1999-10-20 16:23:01), 站内信件
PFC 中 u_tvs 是一个非常好的 treeview 使用它可以轻松的将数据库中的数据显示到

tree 中, 同时还省去很多工作, 但是里面却有好多 BUG, 现总结如下,

望各路 PFC 好手多多提意见!!!



1.  help 中说 deletestyle 的默认值是 Discard_Rows ( 只从内存中删除数据 ), 而事

实上 Delete_Rows ( 同时从内存中与数据库中删除数据 )



2.  你不能使用一个数剧源注册两层数据源而采用不同的 labelcolumn 。这样做根本无
效。两层的 labelcolumn 最终都是层号较低的那一层注册的 labelcolumn 。这是 

pfc_n_cst_tvsrv_levelsource 的 of_getlevel ( nds ads_obj ) 函数的 BUG 造成的。
要解决这个问题不是不可以只是比较麻烦。通常这种情况我们都可以想想其他办法从而避

免。函数 of_getlevel 的意思是确定 DS 对应的层号。而他判断一个 DS 是不是属于这
层是通过判断这个 DS 的 DataObject 是否与这层注册时一样,因此,显然如果你将两层

的数据源注册成一样,那肯定只能返回最低的那个层号。



3.  pfc_n_cst_tvsrv_levelsource 的 Event pfc_undodelete 的第 59 行没有检查
数组上限

原始脚本:
lds_undo = inv_attrib[li_undolevel].ids_obj

纠正如下:
// 检查该层是否为递归层
if li_undolevel > UpperBound ( inv_attrib ) Then &
        li_undolevel = UpperBound ( inv_attrib ) // 该层为递归层
lds_undo = inv_attrib[li_undolevel].ids_obj

                             

4.  pfc_n_cst_tvsrv_levelsource 的 Event pfc_undodelete 的第 66 行

原始脚本。
// Compare the keys to see if we really have the right row
ll_deleterowid = lds_undo.GetRowIDFromRow(ll_row, Delete!)

由于 GetRowIDFromRow 函数当 Filter 缓冲区中没有数据的时候,始终返回 -1 ,这是 

PB 的一个 BUG。使得 ll_deleterowid 总是返回 -1,不能得到正确的结果。因此,改成
如下代码。
// 首先将数据暂时移到 Filter 缓冲区
li_rc = lds_undo.RowsMove ( ll_row, ll_row, Delete!, lds_undo, 1, Primary! )
// 获取被删除纪录的 ID 
ll_deleterowid = lds_undo.GetRowIDFromRow(1, Primary!)
// 再将数据移回 Delete 缓冲区
li_rc = lds_undo.RowsMove ( 1, 1, Primary!, lds_undo, ll_row, Delete! )



5.  pfc_n_cst_tvsrv_levelsource 的 Event pfc_undodelete 的第 78 行

原始代码,ll_undoafterhandle 会出现 <= 0 的情况, 即被删除的节点是父节点第一个
子节点。
//ll_newhandle = itv_requestor.InsertItem(ll_undoparenthandle, &
ll_undoafterhandle, ltvi_undo)

// 修改如下:
if ll_undoafterhandle <= 0 Then
ll_newhandle = itv_requestor.insertItemFirst (ll_undoparenthandle, &
ltvi_undo)
Else
ll_newhandle = itv_requestor.InsertItem(ll_undoparenthandle, &
ll_undoafterhandle, ltvi_undo)
End IF



6. pfc_n_cst_tvsrv_levelsource 的 function of_convertrow

aa_columnvalues[] 参数类型错了应该是 any 而不是 string!



7. pfc_n_cst_tvsrv_levelsource 的 function of_convertrow
在函数的最后几行里的如下这行代码:

ads_obj.object.data[al_row, li_cnt] = aa_columnvalues[li_cnt]

//由于 aa_columnvalues 可能会出现 null 或 "" 的情况,因此上面的代码就会出问题
// 现改为如下:
If Not IsNull ( aa_columnvalues[li_cnt] ) Then
If trim ( String ( aa_columnvalues[li_cnt] ) ) <> "" Then 
        ads_obj.object.data[al_row, li_cnt] = aa_columnvalues[li_cnt]
   End If
End If


可能其他的 object 里还有 BUG,我一下子忘了在哪,所以只能待续...

--
谢谢没有在 "将本文章寄一份给原作者" 处打勾, 再次感谢!

※ 来源:.网易 BBS bbs.netease.com.[FROM: bbs.szptt.net.cn]

[关闭][返回]