|
오브젝트 하나 만들어 달라고 해서 만들면서 만든 함수 하나 소개 할까 합니다.
DW를 그리지 않고 DS 와 ListView를 이용하여 SQL Select 를 실행하고 결과를 보여주기 입니다.
필요없다고 생각하지 마시고 파빌을 이렇게도 사용가능하구나 하고 너그럽게...
///--------------------------------------------------------------------------------------
// long of_autolistview( listview alv_list, string as_SQL, transaction atrans )
// 반환값 : 행 갯수
// 전달값 1 : 보여질 ListView
// 전달값 2 : SQL 스크립트
// 전달값 3 : 트렌젝션 DataStore lds Long row, rowcnt, lpos String ls_tmp, ls_SQL, ls_column[], ls_DWsyntax, ls_ColType Integer i, li_Item Any la_data[]
as_sql = Upper( as_sql ) // Select 문인지 검사한다. lpos = Pos(as_sql,'SELECT') ls_SQL = Trim( Upper(Mid(as_sql, lpos, Len('SELECT') )) ) if ls_SQL <> Upper('SELECT') then Return 0 // 컬럼의 갯수를 파악한다. lpos = Pos(as_sql,'SELECT') ls_SQL = Upper(Mid(as_sql, lpos + Len('SELECT') )) ls_SQL = Left(ls_SQL, Pos(ls_SQL, 'FROM') - 1 ) ls_SQL = Trim(ls_SQL) + ',' lpos = Pos(ls_SQL, ',') i = 0 Do While lpos > 0 ls_tmp = '' ls_tmp = Left( ls_SQL, lpos - 1 ) ls_SQL = Mid( ls_SQL, lpos + 1 ) if Not ( Trim(ls_tmp) = '' or IsNull(ls_tmp) ) then i ++ ls_column[i] = ls_tmp end if lpos = Pos(ls_SQL, ',') Loop // ListView를 컬럼 형식으로 조정한다. alv_list.View = listviewreport! // List형식으로 alv_list.SortType = UnSorted! // 정렬하지 않음 alv_list.ButtonHeader = true // 제목을 버튼으로 alv_list.Hideselection = false // 선택 사용 alv_list.FullRowSelect = true // 행선택 사용 alv_list.FaceName = '굴림' alv_list.TextSize = 12 // 파악한 컬럼을 가지고 ListView 컬럼을 만들과 변수를 초기화 한다. For i = 1 to UpperBound(ls_column) alv_list.AddColumn(ls_column[i], Left! , 800) la_data[i] = '' Next // 자료를 조회 한다. lds = Create DataStore ls_SQL = as_sql ls_DWsyntax = atrans.SyntaxFromSQL(ls_SQL, "style(type=grid)", ls_SQL) lds.Create ( ls_DWsyntax ) lds.SetTransObject( atrans ) rowcnt = lds.Retrieve()
// 조회된 값을 넣는다.
alv_list.SetRedraw(false)
alv_list.DeleteItems() for row = 1 to rowcnt
for i = 1 to UpperBound(ls_column) // Column Type 에 따른 값읽기 ls_ColType = Lower ( ls_column[i]+'.ColType' ) ls_ColType = lds.describe(ls_ColType) if Pos(ls_ColType,'(') > 0 then ls_ColType = Left(ls_ColType, Pos(ls_ColType,'(') - 1) end if choose case ls_ColType case 'decimal' ;la_data[i] = lds.GetItemDecimal (row,i) case 'char' ;la_data[i] = lds.GetItemString (row,i) case 'date' ;la_data[i] = lds.GetItemDate (row,i) case 'time' ;la_data[i] = lds.GetItemTime (row,i) case 'datetime';la_data[i] = lds.GetItemDateTime(row,i) case else ;la_data[i] = lds.GetItemNumber (row,i) //'number', 'long', 'real' end choose if i = 1 then // 첫컬럼이면 행추가 li_Item = alv_list.AddItem(String(la_data[i]), 1) else alv_list.SetItem(li_Item, i, String(la_data[i])) end if Next next
alv_list.SetRedraw(true) DESTROY lds
return rowcnt |