2017-03-04 132 views
0
  1. 如何訪問powerbuilder中datawindow中列名和該列的基礎表名。我可以通過在itemfocuschanged事件中添加一個實例變量並將dwo.name賦給此實例變量來獲取列名。但是如何獲得這個列的表名。powerbuilder中的datawindow中的列表

  2. 如果我在窗口中有多個數據窗口控件如何獲取所選數據窗口控件的名稱。

回答

0

首先通過使用下面的代碼獲得了DW的SQL語句...

ls_sql = this.dw_report.Object.DataWindow.Table.SQLSelect 

OR 

ls_sql = dw_report.Describe("DataWindow.Table.Select") 

然後我用這個自定義函數返回表名稱...

ls_table = f_get_table_name(ls_sql) 

「f_get_table_name()」函數的代碼...

//Obtains the main Table name from the passed SQL string 

long ll_pos1 
long ll_pos2 
string ls_table = "" 

ll_pos1 = PosA(Upper(as_sql), "FROM") 
ll_pos1 = PosA(as_sql, '"', ll_pos1 + 1) 
ll_pos2 = PosA(as_sql, '~~', ll_pos1 + 1) 
ls_table = MidA(as_sql, ll_pos1 + 1, ll_pos2 - ll_pos1 - 1) 

if (ls_table = "" OR isNull(ls_table)) then 
    ll_pos1 = PosA(Upper(as_sql), "SELECT") 
    ll_pos1 = PosA(as_sql, ' ', ll_pos1 + 1) 
    ll_pos2 = PosA(as_sql, '.', ll_pos1 + 1) 
    ls_table = MidA(as_sql, ll_pos1 + 1, ll_pos2 - ll_pos1 - 1) 
end if 

if (ls_table = "" OR isNull(ls_table)) then 
    ll_pos1 = PosA(Upper(as_sql), "WHERE") 
    ll_pos1 = PosA(as_sql, ' ', ll_pos1 + 1) 
    ll_pos2 = PosA(as_sql, '.', ll_pos1 + 1) 
    ls_table = MidA(as_sql, ll_pos1 + 1, ll_pos2 - ll_pos1 - 1) 
end if 

if (ls_table = "" OR isNull(ls_table)) then 
    ll_pos1 = PosA(Upper(as_sql), "FROM") 
    ll_pos1 = PosA(as_sql, ' ', ll_pos1 + 1) 
    ll_pos2 = PosA(as_sql, ' ', ll_pos1 + 1) 
    ls_table = MidA(as_sql, ll_pos1 + 1, ll_pos2 - ll_pos1 - 1) 
end if 

return Trim(ls_table) 
0

問題1: 使用dw_a.Describe("<yourcolumn>.dbName") 這將爲您提供colum的數據庫名稱,格式爲tablename.columnname。然後你可以解析它。

問題1: 不確定你的意思。如果你想知道哪個數據窗口的一個已收到焦點最後,你可以定義一個窗口實例變量(類型的DataWindow),並通過將使用GetFocus事件的各種數據窗口的:

idw_datawindowfocue = this

雖然我不知道爲什麼你需要這個。你能解釋一下理由嗎?

相關問題