How to access column name and underlying table name of that column in a datawindow in powerbuilder. I could get the column name by having an instance variable and assigning dwo.name to this instance variable in itemfocuschanged event. But how to get the table name of this column.
If I have multiple datawindow controls in a window how to get the name of the selected datawindow control.
0
votes
2 Answers
1
votes
First get the SQL Statement for the DW by using the code below...
ls_sql = this.dw_report.Object.DataWindow.Table.SQLSelect
OR
ls_sql = dw_report.Describe("DataWindow.Table.Select")
Then I use this custom function to return the Table name...
ls_table = f_get_table_name(ls_sql)
Code of the "f_get_table_name()" function...
//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
votes
Question 1:
Use dw_a.Describe("<yourcolumn>.dbName")
This will give you the database name of the colum, in the form tablename.columnname
. You can then parse it.
Question 1:
Not sure what you mean. If you want to know which one of the datawindows has received focus lastly, you could define a window instance variable (type datawindow) and use the GetFocus
event of the various datawindows by putting :
idw_datawindowfocue = this
I wonder though why you need this. Could you explain the rationale?