차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

tdatabase [2012/07/25 14:33] (현재)
admin 새로 만듦
줄 1: 줄 1:
 +TDATABASE 클래스는 인덱스의 논리적인 위치, 논리적인 갯수, Scope, db운영의 안정성 등의 이유로 해서 클리퍼 5.3을 기준으로 코딩되어져 있습니다.
  
 +Append, Delete, Save, Load 등의 Event에 Trigger를 발생시켜 효율적으로 db를 관리하고, 동적 object를 생성하여 소스코드를 줄일 수 있어 프로그램 개발속도를 개선해 줍니다.
 +
 + 
 +
 +기존의 프로그램에서는 백개의 입력폼을 받는다면 oField와 cField가 각각 100개 즉 200개가 선언되어야 합니다.
 +
 +<code>
 +  Local oField[100], cField[100]
 +  USE TEST NEW
 +  REDEFINE oField[1] VAR cField[1] ...
 +  REDEFINE oField[2] VAR cField[2] ...
 +  ......
 +</code>
 +
 +그리고 불러오기, 저장하기에도 같은 분량의 코드가 필요합니다.
 +
 +불러오기
 +
 +<code>
 +  cField[1]:= ALIAS -> FIELD1
 +  cField[2]:= ALIAS -> FIELD2
 +  ......
 +</code>
 +
 +저장하기
 +
 +<code>
 +  ALIAS -> FIELD1 := cField[1]
 +  ALIAS -> FIELD2 := cField[2]
 +  ......
 +</code>
 +
 +하지만 TDATABASE 클래스 사용하면 동적 object를 생성하여
 +
 +<code>
 +  USE TEST NEW
 +  oDb := TdataBase():New()
 +
 +  REDEFINE oDb:oFIELD1 VAR oDb:FIELD1
 +  REDEFINE oDb:oFIELD2 VAR oDb:FIELD2
 +    ......
 +</code>
 +
 +이런식으로 코딩하면됩니다.
 +(FIELD1, FIELD2는 실제 필드명을 적으면 됩니다.)
 +
 + 
 +
 +저장은
 +
 +<code>
 +  oDb:Save()
 +</code>
 +
 +하면 됩니다.
 +
 + 
 +
 +또한 Append, Delete, Save, Load의 Event에 Trigger(체크기능)를 발생시킬 수 있습니다.
 +
 +<code>
 +  oDb:bPreAppend := {|| ... }   Append 하기 전 할 행동
 +  oDb:bAfterAppend := {|| ... }   Append 한 후 할 행동
 +  oDb:bPreDelete := {|| ... }   Delete 하기 전 할 행동
 +  oDb:bAfterDelete := {|| ... }   Delete 한 후 할 행동
 +  oDb:bPreSave := {|| ... }   Save 하기 전 할 행동
 +  oDb:bAfterSave := {|| ... }   Save 한 후 할 행동
 +  oDb:bAfterLoad := {|| ... }   Load 한 후 할 행동
 +</code>
 +
 +NSAMPLES\TDBASE\COMPANY.PRG 참조
 +
 +{{:00113.jpg|}}
 +
 +<code>
 +#include "npp.ch"
 +
 +FUNCTION Main()
 +
 +      App_init()
 +      TCompany():New()
 +
 +RETURN NIL
 +
 +
 +CLASS TCompany
 +
 +      DATA oDlg
 +      DATA oLabels AS ARRAY INIT Array(11)
 +      DATA nLabels INIT 11
 +      DATA oDb
 +      DATA oSubBut AS ARRAY INIT Array(2)
 +
 +      METHOD New() CONSTRUCTOR
 +      METHOD FormCreate()
 +      METHOD ReLabel()
 +      METHOD ReAccesorry()
 +      METHOD Open()
 +        METHOD RegOpen()
 +      METHOD Close()
 +      METHOD ReGet()
 +      METHOD ReButton()
 +      METHOD NameChk1()
 +      METHOD NameChk2()
 +
 +ENDCLASS
 +
 +METHOD New() CLASS TCompany
 +       ::Open()
 +       ::FormCreate()
 +       ::Close()
 +RETURN Self
 +
 +METHOD Open() CLASS TCompany
 +
 +       ::RegOpen()                            // 화일 열기
 +       ::oDb := TDataBase():New()             // oDb 선언
 +       ::oDb:bPreSave   := {|| ::NameChk1() } // 저장 전 검사
 +       ::oDb:bAfterSave := {|| ::NameChk2() } // 저장 후 검사
 +
 +       IF ::oDb:OrdKeyCount() == 0  // 레코드 개수가 0 이면
 +          ::oDb:Append()            // 빈레코드 1개 추가
 +       ENDIF
 +
 +RETURN NIL
 +
 +METHOD RegOpen() CLASS TCompany
 +
 +       LOCAL cFile    := "COMPANY.DBF"
 +       LOCAL cCDX     := "COMPANY.CDX"
 +       LOCAL cAlias   := "COMPANY"
 +       LOCAL aStruct  := {{ "CODE   ", "C", 09, 00 },{ "NAME   ", "C", 40, 00 },;
 +                          { "INDATE ", "D", 08, 00 },{ "BOSS   ", "C", 12, 00 },;
 +                          { "JUMINNO", "C", 14, 00 },{ "SAUPNO ", "C", 13, 00 },;
 +                          { "TEL1   ", "C", 15, 00 },{ "FAX    ", "C", 15, 00 },;
 +                          { "UPTAE  ", "C", 20, 00 },{ "JONGMOK", "C", 40, 00 },;
 +                          { "POST1  ", "C", 07, 00 },{ "ADDR1  ", "C", 65, 00 },;
 +                          { "POST2  ", "C", 07, 00 },{ "ADDR2  ", "C", 65, 00 } }
 +
 +        IF !File ( cFile )
 +           dbCreate ( cFile, aStruct )
 +        ENDIF
 +
 +        USE (cFile) NEW SHARED ALIAS (cAlias)
 +
 +        IF FILE( cCDX )
 +           SET INDEX TO (cCDX)
 +         Else
 +           INDEX ON COMPANY->NAME TAG NAME TO (cCDX) FOR !Deleted()
 +        ENDIF
 +
 +RETURN Nil
 +
 +METHOD Close() CLASS TCompany
 +       ::oDb:Close()   // 화일 닫기
 +RETURN NIL
 +
 +METHOD FormCreate() CLASS TCompany
 +
 +   DEFINE DIALOG ::oDlg RESOURCE "D_COMPANY"
 +      ::ReLabel()
 +      ::ReGet()
 +      ::ReButton()
 +      ::ReAccesorry()
 +      ::oDlg:lMovement := .t.       // 다이얼로그 드래그 시 이동
 +   ACTIVATE DIALOG ::oDlg CENTER
 +RETURN NIL
 +METHOD ReLabel() CLASS TCompany
 +       LOCAL nI      := 0
 +
 +       FOR nI := 1 TO ::nLabels
 +           ::oLabels[ nI ] := TDr3dText():Redefine ( 500 + nI , ::oDlg )
 +           ::oLabels[nI]:SetGrade( 4, 100, 1 , CLR_BLACK, nRGB(221,224,227)  )
 +           ::oLabels[nI]:nStClr :=  nRGB(160,170,180)
 +           ::oLabels[nI]:nEndClr := nRGB(240,246,247)
 +           ::oLabels[nI]:nLineDepth := 1
 +       NEXT
 +
 +RETURN NIL
 +
 +
 +METHOD ReAccesorry() CLASS TCompany
 +       LOCAL oTitle     := ''
 +       LOCAL oClose     := ''
 +       LOCAL oMinimize  := ''
 +       LOCAL oAni       := 0
 +
 +       oTitle := TDr3dText():Redefine ( 1701, ::oDlg )
 +       oTitle:SetGrade( 1, 13, 30, CLR_WHITE, CLR_BLACK )
 +       oTitle:lMovement := .t.
 +
 +       oMinimize := TDr3dText():Redefine ( 1703, ::oDlg )
 +       oMinimize:SetGrade( 1, 12, 1, CLR_WHITE, CLR_BLACK )
 +       oMinimize:bAction := {|| ::oDlg:End() }
 +
 +       oAni := TDrAni3():Redefine( 801, ::oDlg,  ;
 +               "B_LINE_HOUSE", 1, 0, nRGB ( 255, 0, 255 ) )
 +
 +RETURN NIL
 +
 +
 +METHOD ReGet() CLASS TCompany
 +
 +       REDEFINE GET ::oDb:oSAUPNO      VAR    ::oDb:SAUPNO   ID 101  OF ::oDlg ;
 +                PICTURE "999-99-99999"
 +                ::oDb:oSAUPNO:bGotFocus := { || ::oDb:oSAUPNO:Dr_Han() }
 +
 +       REDEFINE GET ::oDb:oNAME        VAR    ::oDb:NAME     ID 102  OF ::oDlg
 +       REDEFINE GET ::oDb:oBOSS        VAR    ::oDb:BOSS     ID 103  OF ::oDlg
 +       REDEFINE GET ::oDb:oINDATE      VAR    ::oDb:INDATE   ID 104  OF ::oDlg
 +       REDEFINE GET ::oDb:oJUMINNO     VAR    ::oDb:JUMINNO  ID 105  OF ::oDlg ;
 +                PICTURE "999999-9999999"
 +
 +       REDEFINE GET ::oDb:oUPTAE       VAR    ::oDb:UPTAE    ID 106  OF ::oDlg
 +       REDEFINE GET ::oDb:oJONGMOK     VAR    ::oDb:JONGMOK  ID 107  OF ::oDlg
 +       REDEFINE GET ::oDb:oPOST1       VAR    ::oDb:POST1    ID 108  OF ::oDlg ;
 +                PICTURE "999-999"
 +                ::oDb:oPOST1:disable()
 +
 +       REDEFINE GET ::oDb:oADDR1       VAR    ::oDb:ADDR1    ID 109  OF ::oDlg
 +
 +       REDEFINE GET ::oDb:oPOST2       VAR    ::oDb:POST2    ID 112  OF ::oDlg  ;
 +                PICTURE "999-999"
 +                ::oDb:oPOST2:disable()
 +
 +       REDEFINE GET ::oDb:oADDR2       VAR    ::oDb:ADDR2    ID 113  OF ::oDlg
 +
 +       REDEFINE GET ::oDb:oTEL1        VAR    ::oDb:TEL1     ID 110  OF ::oDlg
 +       REDEFINE GET ::oDb:oFAX         VAR    ::oDb:FAX      ID 111  OF ::oDlg
 +
 +RETURN NIL
 +
 +METHOD ReButton() CLASS TCompany
 +
 +       REDEFINE BUTTON ::oSubBut[1] ID 201 OF ::oDlg ;
 +                ACTION ::oDb:Save() // 저장
 +
 +       REDEFINE BUTTON ::oSubBut[2] ID 202 OF ::oDlg ;
 +                ACTION ::oDlg:End() // 종료
 +
 +RETURN NIL
 +
 +METHOD NameChk1()  // 화일 저장 전 체크할 내용
 +       iF EMPTY(::oDb:NAME)
 +          Msginfo("상호가 없음","입력오류")
 +          ::oDb:oNAME:SetFocus()
 +          Return .f.
 +       End
 +Return .t.
 +METHOD NameChk2() // 화일 저장 후 체크할 내용
 +       Msginfo("자료가 입력되었습니다.","입력완료")
 +Return Nil
 +
 +FUNCTION App_init()
 +     REQUEST DBFCDX
 +     RDDSETDEFAULT( "DBFCDX" )
 +     SET RESOURCES TO "COMPANY.DLL"
 +     SET DATE FORMAT "YYYY.MM.DD"
 +     Dr_GSetcolor ( { CLR_BLACK, nRGB( 235, 255, 255 )} ,;
 +                    { CLR_WHITE, CLR_BLACK } ,;
 +                    { CLR_BLACK, nRGB ( 255, 255, 235 ) } )
 +RETURN NIL
 +</code>
 

Link categories 1

Link categories 2