SW Engineer & Developer/Project ezPo

SyntaxFromSQL로 PBL 내에 datawindow를 생성하는 방법은?

ByteCraft 2025. 2. 13. 11:56

📌 1. 기본 흐름

  1. SyntaxFromSQL을 사용하여 DataWindow의 Syntax를 생성
  2. LibraryCreate 함수를 사용하여 PBL에 새로운 DataWindow 객체를 저장

📌 2. 코드 예제

아래 예제는 SyntaxFromSQL을 이용해 DataWindow의 Syntax를 생성하고, 이를 LibraryCreate로 PBL 파일에 저장하는 방식입니다.

 

string ls_syntax, ls_error, ls_pbl, ls_dw_name
string ls_sql
integer li_result

// SQL 문 작성
ls_sql = "SELECT id, name, price FROM products"

// DataWindow Syntax 생성
ls_syntax = SQLCA.SyntaxFromSQL(ls_sql, "Tabular", ls_error)

IF ls_syntax = "" THEN
    MessageBox("Error", "SyntaxFromSQL 실패: " + ls_error)
    RETURN
END IF

// PBL 경로 및 DataWindow 이름 지정
ls_pbl = "C:\PB_Projects\my_library.pbl"
ls_dw_name = "d_products"

// 기존 DataWindow 삭제 (있다면)
LibraryDelete(ls_pbl, ls_dw_name)

// 새 DataWindow 생성
li_result = LibraryCreate(ls_pbl, ls_dw_name, ls_syntax, ls_error)

IF li_result = 1 THEN
    MessageBox("Success", ls_dw_name + " DataWindow가 성공적으로 생성되었습니다.")
ELSE
    MessageBox("Error", "LibraryCreate 실패: " + ls_error)
END IF

 

📌 3. 코드 설명

단계설명

SyntaxFromSQL을 이용해 DataWindow의 Syntax 생성
기존에 같은 이름의 DataWindow가 있으면 LibraryDelete로 삭제
LibraryCreate를 이용해 PBL에 새로운 DataWindow 추가
성공 여부를 확인하고 MessageBox로 결과 출력

 

📌 4. 주의할 점

  1. PBL 경로가 정확한지 확인
    • ls_pbl에 지정한 PBL 경로가 올바르게 설정되어 있어야 합니다.
  2. DataWindow 이름 중복 확인
    • 같은 이름의 DataWindow가 존재하면 LibraryDelete로 삭제 후 새로 생성합니다.
  3. DataWindow 생성 후 적용
    • PBL에 저장된 DataWindow는 PowerBuilder IDE에서 바로 확인할 수 있습니다.
    • dw_1.DataObject = "d_products"를 설정하여 UI에서 사용할 수도 있습니다.

 

 


위 방법은 PowerBuilder 11.5 이후 버전에서 가능.

PowerBuilder 10.5에서는 LibraryImport()로 처리.

 

 

//dw.buttonclicked
String ls_btn, ls_sql, ls_error, ls_syntax
String ls_prst, ls_prst_style
String ls_pbl, ls_dw
Long ll_rv

ls_btn = dwo.name

this.AcceptText()
ls_sql  = gf_null2space(this.object.sql [1])
ls_prst = gf_null2space(this.object.prst[1])
ls_pbl  = gf_null2space(this.object.pbl [1])
ls_dw   = gf_null2space(this.object.dw  [1])

choose case ls_btn
	case "b_sql"
		/* ------------------------------------------------------------ */
		// SyntaxFromSQL
		/* ------------------------------------------------------------ */
		if len(ls_sql) = 0 then
			mbox("SQL을 입력하세요.!");return;
		end if

		ls_prst_style = "style(type=" + ls_prst + ")" //"style(type=grid)"
		ls_syntax = SQLCA.SyntaxFromSQL(ls_sql, ls_prst_style, ls_error)
		IF ls_syntax = "" THEN
			 this.object.msg[1] = ls_error
		ELSE
			this.object.syntax[1] = ls_syntax
			this.object.msg   [1] = "SyntaxFromSQL OK!"
		END IF
		
	case "b_crt"
		/* ------------------------------------------------------------ */
		// LibraryCreate
		/* ------------------------------------------------------------ */
		if len(ls_pbl) = 0 then
			mbox("PBL을 입력하세요.!");return;
		end if
		if len(ls_dw) = 0 then
			mbox("DW을 입력하세요.!");return;
		end if

		/* ------------------------------------------------------------ */
		// LibraryImport
		/* ------------------------------------------------------------ */
		ls_syntax = this.object.syntax[1]
		ll_rv = LibraryImport(ls_pbl, ls_dw, ImportDataWindow!, ls_syntax, ls_error)
		if ll_rv = 1 then
			this.object.msg   [1] = "LibraryImport OK!"
		else
			this.object.msg   [1] = ls_error
		end if
		  
end choose

'SW Engineer & Developer > Project ezPo' 카테고리의 다른 글

Django REST Framework 첫번째 Test  (1) 2025.02.09
ezPo 프로젝트 소개  (0) 2025.02.09