넥사크로17 에서 로컬 sqlite db를 사용방법에 대하여 알아보겠습니다.
넥사크로에서는 sqlite만 지원한는것 같습니다. 본 내용은 TOBESOFT 활용 가이드를 참고하였습니다.
먼저 아래와 같이 화면 구성을 합니다.
맨위 Static 컴포넌트에는 Value 속성에 local DB file 주소를 입력 합니다.
콤보박스에는 innerdataset 에
01 : insert into tb_pos values('08', 'Intern')
02 : delete from tb_pos where pos_name='Intern'
03 : update tb_pos set pos_name='Staff' where pos_name='intern'
등록 합니다.
그리드에 Dataset을 연결 합니다.
그리고 invisible object 에는 아래 처럼 object를 등록 해야하는데 컴포넌트 파렛트에 LiteDBConnection, LiteDBStatement 가 없는 경우 TypeDefinition - Objects 에 들어가서 nexacro.LiteDBConnection 과 naxacro.LiteDBStatement 를 체크해서 추가 합니다.
소스 분석
- Form onload 이벤트 발생시 isConnected() 함수를 사용해서 Database 가 연결 되었는지 확인
/* Form의 onload 이벤트 함수 */
this.frmQuerySample_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo)
{
this.LiteDBConnection00.isConnected();
};
- 연결이 안되어 있기 때문에 1205 오류가 발생하고 Database 에 연결함(open)
this.LiteDBConnection00_onerror = function(obj:nexacro.LiteDBConnection,e:nexacro.LiteDBErrorEventInfo)
{
switch(e.statuscode.toString())
{
case "1203": //LiteDBConnection close() error
alert("DB close failed.");
break;
case "1205": //LiteDBConnection isConnected() error
this.LiteDBConnection00.set_datasource(this.edt_dbfile.value);
this.LiteDBConnection00.open();
break;
case "1206": //LiteDBConnection open() error
alert("DB open failed.");
break;
case "00001": //Parameter setting error
case "1201": //DB response timeout error
case "1202": //LiteDBConnection begin() error
case "1204": //LiteDBConnection commit() error
case "1207": //LiteDBConnection rollback() error
default: //Unknown error
var strResult = "[LiteDBConnection00_onerror]";
strResult += "\n["+ e.errortype +" "+ e.statuscode +"] "+ e.errormsg;
strResult += "\ne.ldberrorcode: "+ e.ldberrorcode;
strResult += "\ne.ldberrormsg: "+ e.ldberrormsg;
alert(strResult);
}
};
-연결이 되면 5 코드가 발생되고 grid를 활성화 한다음 tb_pos 테이블을 select 함
this.LiteDBConnection00_onsuccess = function(obj:nexacro.LiteDBConnection,e:nexacro.LiteDBEventInfo)
{
switch(e.reason)
{
case 2: // LiteDBConnection close()
this.Grid00.set_visible(false);
this.btn_query.set_enable(false);
break;
case 4: // LiteDBConnection isConnected()
alert("Already connected to DB.");
break;
case 5: // LiteDBConnection open()
this.Grid00.set_visible(true);
this.btn_query.set_enable(true);
this.LiteDBStatement00.set_ldbconnection(this.LiteDBConnection00);
this.LiteDBStatement00.executeQuery("select * from tb_pos");
break;
case 1: // LiteDBConnection begin()
case 3: // LiteDBConnection commit()
case 6: // LiteDBConnection rollback()
default:
break;
}
};
- 그러면 LiteDBStatement success 7 메세지를 받아 그리드에 조회된 내용을 보여줌
/* LiteDBStatement 오브젝트 onsuccess 이벤트 함수 */
this.LiteDBStatement00_onsuccess = function(obj:nexacro.LiteDBStatement,e:nexacro.LiteDBEventInfo)
{
switch(e.reason)
{
case 7: // LiteDBStatement executeQuery()
this.Dataset00.copyData(e.returnvalue);
this.Dataset00.set_keystring("S:+POS_CD+POS_NAME");
this.Grid00.createFormat();
break;
case 8: // LiteDBStatement executeUpdate()
this.LiteDBStatement00.set_query("select * from tb_pos");
this.LiteDBStatement00.executeQuery();
break;
case 9: // LiteDBStatement close()
default:
break;
}
};
- 아래는 조회된 내용
- DB 조회 및 실행 처리도중 에러가 발생하면 관련 메세지를 보여줌
/* LiteDBStatement 오브젝트 onerror 이벤트 함수 */
this.LiteDBStatement00_onerror = function(obj:nexacro.LiteDBStatement,e:nexacro.LiteDBErrorEventInfo)
{
switch(e.statuscode.toString())
{
case "1210": //LiteDBStatement executeQuery() error
alert("LiteDBStatement executeQuery() error.");
break;
case "1211": //LiteDBStatement executeUpdate() error
alert("LiteDBStatement executeUpdate() error.");
break;
case "00001": //Parameter setting error
case "1201": //DB response timeout error
default: //Unknown error
var strResult = "[LiteDBStatement00_onerror]";
strResult += "\n["+ e.errortype +" "+ e.statuscode +"] "+ e.errormsg;
strResult += "\ne.ldberrorcode: "+ e.ldberrorcode;
strResult += "\ne.ldberrormsg: "+ e.ldberrormsg;
alert(strResult);
}
};
- Query 버튼 클릭시 select, insert, update, delete 구분에 따라 알맞는 실행 함수를 호출
/* Query 버튼 onclick 이벤트 함수 */
this.btn_query_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.LiteDBStatement00.set_query(this.ExtCombo00.text);
var arrString = this.LiteDBStatement00.query.split(" ");
switch(arrString[0])
{
case "select":
this.LiteDBStatement00.executeQuery();
break;
case "insert":
case "update":
case "delete":
this.LiteDBStatement00.executeUpdate();
break;
default:
alert(arrString[0] + " is illegal query statement.");
}
};
- Stop 버튼을 클릭하면 Database를 Close 함
/* Stop 버튼 onclick 이벤트 함수 */
this.btn_stop_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
this.LiteDBStatement00.close();
};
- 아래는 실행된 화면입니다. 참고해주시면 고맙겠습니다.
넥사크로플랫폼17 Device API 활용 워크북 - LiteDB 내용을 참고 하셔도 좋지만 제공되는 소스가 없어 조금 헷갈리는 부분이 있습니다. 그래서 테스트한 소스도 같이 첨부 합니다.
본 내용은 넥사크로플랫폼 17 Device API 활용 워크북 17.1.0.100 LiteDB 참고해서 테스트한 내용입니다.