2017-03-04 15 views
0
  1. powerbuilder의 데이터 윈도우에서 해당 컬럼의 컬럼 이름과 기본 테이블 이름에 액세스하는 방법. 인스턴스 변수를 가지고 itemfocuschanged 이벤트에서이 인스턴스 변수에 dwo.name을 할당하여 열 이름을 얻을 수있었습니다. 그러나이 칼럼의 테이블 이름을 얻는 방법.powerbuilder의 데이터 윈도우에있는 컬럼 테이블

  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") 이것은 데이터베이스의 이름을 tablename.columnname으로 줄 것입니다. 그런 다음 구문 분석 할 수 있습니다.

질문 1 : 무슨 뜻인지 확실하지 않습니다. 당신이에서 DataWindow 중 하나가 마지막으로 포커스를받은 알고 싶은 경우에, 당신은 윈도우 인스턴스 변수 (유형의 데이터 윈도우)를 정의하고 바꾸어 다양한에서 DataWindow의 GetFocus 이벤트를 사용할 수 있습니다

idw_datawindowfocue = this

그래도 난 궁금해 왜 이것을 필요로 하죠? 그 이유를 설명해 주시겠습니까?