목차

DBInterface 가이드

이 화면은 xFrameDBInterface 컴포넌트(xFrameDBInterface.ocx)에 대한 예시화면이다.

예시

템플릿 위치: /XPLUS/xplus_dbinterface

템플릿 파일

화면 스크립트

// DB 연결/해제 버튼 이벤트
function btnConnect_on_mouseup(objInst)
{
	// 연결이 되지 않은 경우, 연결 시도
	if (ctrlDB.innerctrl.IsConnected() == false) {
		fnOpenDatabae();
	}
	// 이미 DB가 연결되어 있는 경우, 연결 해제 처리
	else {
		// DB 연결 해제
		ctrlDB.innerctrl.Disconnect();
	}

	ShowOpenDatabaeStatus();
}

// DB 연결 결과 정보 설정
function ShowAutoCommitStatus()
{
	if (ctrlDB.innerctrl.IsConnected()) {
		if (ctrlDB.innerctrl.GetAutoCommit() == 1) {
			chkAutoCommit.setcheck(true);
			btnCommit.setenable(false);
			btnRollback.setenable(false);
		}
		else {
			chkAutoCommit.setcheck(false);
			btnCommit.setenable(true);
			btnRollback.setenable(true);
		}
	}
}

// DB 연결 결과 정보 설정
function ShowOpenDatabaeStatus()
{
	if (ctrlDB.innerctrl.IsConnected()) {
		// DB 연결 버튼 텍스트 설정 및 DB 연결 정보 패널 활성화
		btnConnect.settext("Disconnect");
		pnlConnect.setenable(true);
	}
	else {
		// DB 연결 버튼 텍스트 설정 및 DB 연결 정보 패널 비활성화
		btnConnect.settext("Connect");
		pnlConnect.setenable(true);
	}

	ShowAutoCommitStatus();
}

/**
 * DB 연결 함수
 */
function fnOpenDatabae()
{
	var nDBKind = cbDBKind.getselectedcode();
	var strDBName = fieldDBname.gettext();
	var strServiceName = fieldServiceName.gettext();
	var strIPAddress = fieldIPAddress.gettext();
	var nPort = Number(fieldPort.gettext());
	var strUID = fieldUID.gettext();
	var strPWD = fieldPWD.gettext();

	if (ctrlDB.innerctrl.IsConnected() == true) {
		return true;
	}

	var bConnect = ctrlDB.innerctrl.Connect(nDBKind, strDBName, strServiceName, strIPAddress, nPort, strUID, strPWD);

	return bConnect;
}

// 쿼리 실행 버튼 이벤트
function btnExecQuery_on_mouseup(objInst)
{
	var ret, strQuery, nFieldCount, nFieldIndex, nRecordCount, strValue, nRowIndex, nColumnIndex;

	// 그리드 내용 및 컬럼 삭제
	gridResult.deleteall();
	gridResult.deleteallcolumn();

	if (ctrlDB.innerctrl.IsConnected() == false && fnOpenDatabae() == false) {
		screen.alert("DB가 연결되어 있지 않습니다.");
		return;
	}

	strQuery = mmQuery.gettext();
	if (strQuery.length <= 0) {
		screen.alert("쿼리를 입력하세요.");
		return;
	}

	// 쿼리 실행
	if (ctrlDB.innerctrl.ExecuteSQL(strQuery) == false) {
		screen.alert("쿼리 수행에 실패하였습니다.");
		return;
	}

	// 쿼리 결과 레코드 갯수를 구함
	nRecordCount = ctrlDB.innerctrl.GetResultRecordCount();
	factory.consoleprint("nRecordCount : " + nRecordCount);
	if (nRecordCount <= 0) {
		screen.alert("쿼리 실행 결과 레코드 갯수 = " + nRecordCount);
		return;
	}

	// 쿼리 결과 필드 갯수를 구함 (Select 쿼리가 아닌 경우에는, 필드 갯수가 0임)
	nFieldCount = ctrlDB.innerctrl.GetResultFieldCount();
	if (nFieldCount <= 0) {
		screen.alert("쿼리 실행 결과 레코드 갯수 = " + nRecordCount);
		return;
	}

	factory.consoleprint("nFieldCount : " + nFieldCount);

	// 쿼리 결과 필드 갯수만큼 컬럼 생성
	for (nFieldIndex = 0; nFieldIndex < nFieldCount; nFieldIndex++) {
		nColumnIndex = gridResult.addcolumn();
		if (nColumnIndex < 0) {
			screen.alert("그리드 컬럼 추가 실패하였습니다.");
			continue;
		}

		// 필드 이름을 구하여 컬럼 헤더 텍스트 설정
		gridResult.setheadertext(0, nColumnIndex, ctrlDB.innerctrl.getResultFieldName(nFieldIndex));

		gridResult.setcolumnautowidth(nColumnIndex, false);
		gridResult.setcolumnwordellipsis(nColumnIndex, true);
	}

	// 쿼리 결과 한 레코드를 패치
	nResult = ctrlDB.innerctrl.GetResultRecordFetch();
	factory.consoleprint("Result record fetch : " + nResult);

	// 쿼리 결과 한 레코드를 패치가 성공인 경우일 동안 Loop
	while (nResult == 1) {
		// 그리드에 행 추가
		nRowIndex = gridResult.additem(false, false);

		// 레코드에서 컬럼 인덱스에 대한 값을 구하여 그리드 아이템에 설정
		for(nColumnIndex = 0; nColumnIndex < nFieldCount; nColumnIndex++) {
			strValue = ctrlDB.innerctrl.GetFieldValue(nColumnIndex);
			gridResult.setitemtext(nRowIndex, nColumnIndex, strValue);
		}

		// 쿼리 결과 한 레코드를 패치
		nResult = ctrlDB.innerctrl.GetResultRecordFetch();
	}
}

// Commit 버튼 이벤트
function btnCommit_on_mouseup(objInst)
{
	if (ctrlDB.innerctrl.IsConnected() == false) { return; }

	if (ctrlDB.innerctrl.Commit() == false) { screen.alert("Commit error"); }
}

// Rollback 버튼 이벤트
function btnRollback_on_mouseup(objInst)
{
	if (ctrlDB.innerctrl.IsConnected() == false) { return; }

	if (ctrlDB.innerctrl.Rollback() == false) { screen.alert("Rollback error"); }
}

// AutoCommit 체크 박스 이벤트
function chkAutoCommit_on_click(objInst)
{
	if (chkAutoCommit.getcheck() == true) {
		if (ctrlDB.innerctrl.GetAutoCommit() == 0) {
			ctrlDB.innerctrl.SetAutoCommit(true);
		}
	}
	else {
		if (ctrlDB.innerctrl.GetAutoCommit() == 1) {
			ctrlDB.innerctrl.SetAutoCommit(false);
		}
	}
	
	ShowAutoCommitStatus();
}