====== DBInterface 가이드 ====== 이 화면은 xFrameDBInterface 컴포넌트(xFrameDBInterface.ocx)에 대한 예시화면이다. ===== 예시 ===== 템플릿 위치: /XPLUS/xplus_dbinterface 템플릿 파일 * [[xf5projecthome>template/screen/XPLUS/xplus_dbinterface.xml|xplus_dbinterface.xml]] * [[xf5projecthome>template/screen/XPLUS/xplus_dbinterface.js|xplus_dbinterface.js]] * [[xf5projecthome>template/template.html?xframe_screen_url=/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(); }