提取DataWindow的引數

2021-08-29 13:22:22 字數 3288 閱讀 7365

這裡說的datawindow是指dataobject的那個,而不是datawindow control

datawindow可以有幾個引數,但是pb並沒有提供專門的函式去取得這些引數,dw syntax也沒有指出用那些關係可以去除這些引數資訊。但是這些資訊還是可以直接取得

dw_control.object.datawindow.table.arguments

取出來的是乙個字串,引數之間通過~n連線,引數名和引數型別之間通過~t連線

比如有引數arg1/string和arg2/number,我們用上述語句得到的結果就會是

"arg1~tstring~narg2~tnumber"

所以這裡取出來還需要做一些出來才能利用這些資訊

// 定義乙個custom user object去記錄引數資訊

(pb**)

$pbexportheader$nvo_dw_args.sru

forward

global type nvo_dw_args from nonvisualobject

end type

end forward

global type nvo_dw_args from nonvisualobject autoinstantiate

end type

type variables

string argname

string argtype

end variables

on nvo_dw_args.create

call super::create

triggerevent( this, "constructor" )

end on

on nvo_dw_args.destroy

triggerevent( this, "destructor" )

call super::destroy

end on

event constructor;/**

* this object use to store the argument info of datawindow

* argname store argument's name

* argtype store argument's data type

*/end event

// 讀取和分析引數並返回引數資訊

(pb**)

$pbexportheader$n_cst_dw_util2.sru

forward

global type n_cst_dw_util2 from nonvisualobject

end type

end forward

global type n_cst_dw_util2 from nonvisualobject

end type

global n_cst_dw_util2 n_cst_dw_util2

type variables

datawindow idw

end variables

forward prototypes

public function integer of_getarguments (ref nvo_dw_args args)

end prototypes

public function integer of_getarguments (ref nvo_dw_args args);/**

* get the registe datawindow arguments.

* the arguments will be store into nvo_dw_args array args

* @param ref args- nvo_dw_args

* @return integer

* - return the arguments count if successful

* - return 0 if no arguments

* - return -1 if invalid idw or error

* @author ben

* @history

* 1. created 21-apr-2008 ben

*/string ls_argstr

string ls_tmparg

integer li_pos, li_postab, li_index

if not isvalid(idw) then return -1

ls_argstr = idw.object.datawindow.table.arguments

if isnull(ls_argstr) or ls_argstr = "" then return 0

do li_pos = pos(ls_argstr, '~n')

if li_pos > 0 then

ls_tmparg = left(ls_argstr, li_pos - 1)

ls_argstr = right(ls_argstr, len(ls_argstr) - li_pos)

else

ls_tmparg = ls_argstr

end if

if not isnull(ls_tmparg) and ls_tmparg <> "" then

li_postab = pos(ls_tmparg, '~t')

if li_postab > 0 then

li_index = upperbound(args) + 1

args[li_index].argname = left(ls_tmparg, li_postab - 1)

args[li_index].argtype = right(ls_tmparg, len(ls_tmparg) - li_postab)

end if

end if

loop while li_pos > 0

return 1

end function

on n_cst_dw_util2.create

call super::create

triggerevent( this, "constructor" )

end on

on n_cst_dw_util2.destroy

triggerevent( this, "destructor" )

call super::destroy

end on

返回的nvo_dw_args陣列包含了引數名和引數型別,這樣比較方便使用.

Datawindow的使用技巧 IT man

csdn blogdatawindow的使用技巧 bsp 當retrieve時不清除原有datawindow資料 當你呼叫retrieve函式,powerbuilder自動清除原有datawindow然後retrieve資料。在datawindowretrievestart事件中,使用return2...

C 中使用pb的dataWindow

使用方法詳細看 注意 需在 工具箱 中新增 新增選項卡 命名該選項卡後右擊選擇 選擇項 將dll檔案引用進來。出現問題1 缺少sybase引用,將目標框架改為 net framwork 4 此時會出現問題2.出現問題2 混合模式程式集是針對 v2.0.50727 版的執行時生成的,在沒有配置其他資訊...

STL提取引數模版的型別

一 解決的問題 1 其實是可以推導出函式的返回值型別的 但是是無法在模版類的外面進行使用的 下面的兩種情況是編譯通過的 1 templatet print t x 2 templatestruct a 2 解決t無法在類模版的外面進行使用的問題 例如 函式定義 templatestruct b ty...