본문 바로가기

프로그램 개발/nexacro

넥사크로17 nexacro 로컬DB 사용 방법

728x90
반응형


넥사크로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  참고해서 테스트한 내용입니다. 




반응형