40. HowTo

HowTo: 조회폼에서 바로 입력하도록 하는 방법

게시자: 염기웅, 2011. 5. 23. 오후 11:23   [ 2011. 5. 23. 오후 11:32에 업데이트됨 ]

현재 TFaccess 조회폼은 데이터 편집을 허용하지 않고 있습니다.
반드시 입력폼으로 전환하여 데이터 편집을 해야 하는데, 간혹 열이 그리 많지 않은 테이블의 경우, 일일이 입력폼에서 수정하는 작업이 조금 불편할 수 있습니다.

다음 방법을 통해 조회폼에서 바로 입력하도록 전환할 수 있으니 참고하시기 바랍니다.

1. 조회폼 모듈 수정
조회 폼 모듈에 다음의 코드를 삽입하십시오.

소스: 조회폼 편집 가능하도록 변경하기


Private Sub Form_Load()

On Error GoTo Herror
    
   Me.subA.Form.RecordsetType = 4
    
   Exit Sub
   
Herror:
    Select Case Err.Number
        Case Else
            xsberrmsg xfnErrFormat(Err.Number, Err.Description)
    End Select
    
End Sub

'--------------------------------------
'Form_Open 이벤트 프로시저는 다음과 같이 되어야 합니다.
'--------------------------------------

Private Sub Form_Open(Cancel As Integer)

On Error GoTo Herror

'BEGINNING OF VARIABLES FOR TFaccess
'END       OF VARIABLES FOR TFaccess

'BEGINNING OF CODES FOR TFaccess
    Set mobjSearch = xfnNew_xSearchForm()
    mobjSearch.Init Me
'END       OF CODES FOR TFaccess
    
    
'바운드 컨트롤의 필수 속성 지정
    If Not mobjSearch.obj.SetBoundControls(subA.Form) Then
        xsberrmsg xstrerrdesc
        Cancel = True
    End If
    Exit Sub
    
Herror:
    Select Case Err.Number
        Case Else
            Cancel = True
            xsberrmsg xfnErrFormat(Err.Number, Err.Description)
    End Select
    
End Sub

2. 조회폼 하위폼 모듈 수정
조회폼의 하위폼에 다음과 같은 코드를 삽입하십시오.

소스: 조회폼 하위폼에 들어갈 내용

'------------------------------------------
'이 부분은 모듈의 선언부에 위치해야 합니다.
'------------------------------------------
Private mobjAutoNumProperties As xAutoNumProperties
'------------------------------------------



Private Sub Form_Delete(Cancel As Integer)

On Error GoTo Herror
    
'권한 체크
    If Not Me.Parent.SearchForm.PermDelete Then
        Cancel = True
        xsberrmsg xfnConcatNL(xfnGetSysMsg(152))
        Exit Sub
    End If
    
    Exit Sub
    
Herror:
    Select Case Err.Number
        Case Else
            Cancel = True
            xsberrmsg xfnErrFormat(Err.Number, Err.Description)
    End Select
    
End Sub

Private Sub Form_Dirty(Cancel As Integer)

On Error GoTo Herror

'권한 체크
    If Not Me.Parent.SearchForm.PermUpdate Then
        Cancel = True
        xsberrmsg xfnConcatNL(xfnGetSysMsg(150))
        Exit Sub
    End If
    Exit Sub
    
Herror:
    Select Case Err.Number
        Case Else
            Cancel = True
            xsberrmsg xfnErrFormat(Err.Number, Err.Description)
    End Select
    
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)

On Error GoTo Herror

    Dim objColumn As xObjCol
    Dim ctr As Control

    Dim strMsg As String
    

'권한 체크
    If Not Me.Parent.SearchForm.PermInsert Then
        Cancel = True
        xfnUndoForm Me
        xsberrmsg xfnConcatNL(xfnGetSysMsg(151))
        Exit Sub
    End If
    

'작성자, 작성일시 입력
    If xfnIsControlExist(Me, "CID") Then
        CID.Value = xfnGetConf("UserID")
    End If
    
    If xfnIsControlExist(Me, "CTIME") Then
        CTime.Value = xfnGetCurrentTime()
    End If
    

'기본적인 자동 채번 속성 만들기
    If Not fnIsAutoNumInited() Then
        Set mobjAutoNumProperties = xfnNew_xAutoNumProperties
    
        For Each objColumn In Me.Parent.Columns
            If Not xfnIsEmpty(objColumn.AutoNumID) Then
                mobjAutoNumProperties.Add objColumn.Name
            End If
        Next
    End If
    

'자동 채번
    For Each objColumn In Me.Parent.Columns
        'AutoNumID가 정의되어 있는 컬럼 중에서...
        If Not xfnIsEmpty(objColumn.AutoNumID) Then
        
            '폼의 모든 컨트롤 중...
            For Each ctr In Me.Controls
            
                'ControlSource 속성이 있는 컨트롤에 대해서...
                If xfnIsObjectValid(ctr, "ControlSource") Then
                
                    'Image Type의 컨트롤의 경우 채번하지 않음
                    If Not TypeOf ctr Is Image Then
                    
                        '열 이름과 ControlSource 속성이 같은 컨트롤에 대해서 새 ID 할당
                        If xfnStrComp(ctr.ControlSource, objColumn.Name) Then
                            ctr.Value = objColumn.GetNewAutoNum(mobjAutoNumProperties(objColumn.Name))
                        End If
                    
                    End If
                    
                End If
                
            Next
            
        End If
        
    Next
    
    Exit Sub
    
Herror:
    Cancel = True
    strMsg = xfnErrFormat(Err.Number, Err.Description)
    strMsg = xfnConcatNL( _
                xfnGetSysMsg(131) _
                , strMsg _
                )
    xfnUndoForm Me
    xsberrmsg strMsg
    
End Sub

Private Function fnIsAutoNumInited() As Boolean

On Error GoTo Herror

    Dim a
    
    a = mobjAutoNumProperties.Count
    fnIsAutoNumInited = True
    Exit Function
    
Herror:
    fnIsAutoNumInited = False
    
End Function

Private Sub Form_BeforeUpdate(Cancel As Integer)

On Error GoTo Herror

'수정자, 수정일시 입력
    If xfnIsControlExist(Me, "EID") Then
        EID.Value = xfnGetConf("UserID")
    End If
    
    If xfnIsControlExist(Me, "ETIME") Then
        ETime.Value = xfnGetCurrentTime()
    End If


'필수 입력 필드값 체크
    If Not xfnAllRequiredFieldFilled(Me) Then
        Cancel = True
        Exit Sub
    End If
    Exit Sub
    
Herror:
    Cancel = True
    xsberrmsg xfnConcatNL( _
                xfnGetSysMsg(132) _
                , xfnErrFormat(Err.Number, Err.Description) _
                )
    
End Sub

HowTo: TFaccess 응용프로그램을 배포하는 방법

게시자: 염기웅, 2010. 9. 3. 오전 3:17   [ 2010. 9. 3. 오전 3:41에 업데이트됨 ]

TFaccess 응용프로그램을 배포하기 위해서는 기본적으로 다음 파일만 해당 컴퓨터에 복사하면 됩니다.
(물론, 해당 컴퓨터에 Access 2007 SP2가 설치되어 있어야 합니다.)

일반적인 TFaccess 응용프로그램에는 다음과 같은 파일이 있습니다.

여기에서 App1.adp 파일이 실제 실행 파일입니다.
DB_Conn.ini 파일은 데이터베이스 접속 정보를 저장해 놓은 파일입니다.
TFaccess.ade 파일은 TFaccess 파일입니다.

이 3개의 파일이 있어야 TFaccess 응용프로그램이 정상적으로 동작합니다.

이 3개의 파일을 다른 사람의 컴퓨터에 복사해 주면, 해당 사람도 데이터를 공유하고 TFaccess 응용프로그램을 사용할 수 있습니다.

다만, TFaccess가 정상적으로 동작하기 위해서는 몇몇 시스템 구성요소가 필요합니다.
이러한 구성요소를 설치하는 것이 선행되어야 합니다.


TFaccess 운영 환경 요소를 설치하려면 다음의 절차를 밟습니다.
  1. 상기한 링크에서 파일을 다운로드한 후 실행합니다.

  2. 설치가 완료되면 다음과 같은 테스트 프로그램이 실행됩니다.

  3. 테스트 프로그램에서 임의의 문자를 입력하고 '테스트' 버튼을 클릭합니다. '테스트 결과'에 'OK'라고 표시되어야 합니다. 'ERROR'라고 표시된 경우 TFaccess 응용프로그램을 실행할 수 없습니다.


참고: 설치 중 다음과 같은 오류 메시지를 접할 수 있습니다. 이 때에는, 이미 해당 파일이 컴퓨터에 설치되어 있는 경우이므로 '무시'를 클릭하면 됩니다. 

설치 중 어떤 오류를 접하더라도, 최종적으로 'TFaccess 환경 테스트 프로그램'에서 'OK'가 표시되면 TFaccess 응용프로그램을 실행할 수 있습니다.


HowTo: TFaccess 버전을 확인하는 방법

게시자: 염기웅, 2010. 9. 1. 오전 12:27

TFaccess는 지속적으로 업그레이드 됩니다. 현재 사용중인 TFaccess의 버전이 궁금하다면 다음 절차를 따릅니다. 
  1. TFaccess 응용프로그램을 실행합니다.
  2. 메뉴에서 <TFaccess> - <정보> - <TFaccess 정보>를 클릭합니다.
  3. 'TFaccess 정보' 화면에서 우측 상단의 TFaccess Version과 TFaccess DB Version을 확인합니다.
    1. 2010년 9월 1일 현재, 최신 버전은 2.00.20100818.01 버전입니다.
    2. TFaccess Version과 TFaccess DB Version은 서로 일치해야 합니다.
    3. 만약, 업데이트가 제대로 되지 않았다면 업데이트 프로그램을 다시 한 번 실행해 주십시오.

HowTo: Access 2007의 버전을 확인하는 방법

게시자: 염기웅, 2010. 7. 18. 오후 11:20   [ 알 수 없는 사용자에 의해 업데이트됨(2010. 7. 26. 오후 4:47) ]

  1. Access 2007을 실행합니다.
  2. 좌측 상단의 오피스 버튼을 클릭하고 'Access 옵션'을 클릭합니다.
  3. 표시되는 'Access 옵션' 창의 좌측 하단 '리소스'를 클릭합니다.
  4. 빨강색 밑줄처럼 'SP2'가 표시되는지 확인합니다.

HowTo: SQL Server의 포트 번호를 확인하는 방법

게시자: 염기웅, 2010. 7. 11. 오후 12:25   [ 2010. 7. 11. 오후 12:38에 업데이트됨 ]

SQL Server는 기본적으로 1433 (TCP) 포트를 사용합니다.
 
그러나 기본 인스턴스(MSSQLSERVER)가 아닌, 명명된 인스턴스(사용자가 임의로 설정한 인스턴스)로 SQL Server를 설치하였을 경우, 임의의 포트를 할당하게 됩니다.
 
이 때, 어떤 포트로 통신하는지 알아보기 위해서는 다음의 과정을 거칩니다.
  1. <시작>-<모든 프로그램>-<Microsoft SQL Server 2005>-<구성 도구>-<SQL Server 구성 관리자> 를 클릭하여 실행합니다.
  2. 왼편의 창에서 <SQL Server 구성 관리자 (로컬)>-<SQL Server 2005 네트워크 구성>-<(인스턴스명)에 대한 프로토콜> 을 클릭합니다.
  3. 오른편의 창에서 <TCP/IP>를 더블클릭합니다.
  4. <TCP/IP 속성> 창이 표시됩니다. <IP 주소> 탭을 클릭합니다.
  5. 목록 최 하단의 'IPALL' 항목 하위의 'TCP 포트' 란에 기록된 숫자가 할당된 포트 번호입니다.

HowTo: TFaccess 로그온 폼을 사용자 정의하는 방법

게시자: 염기웅, 2010. 4. 4. 오전 4:08   [ 2010. 4. 5. 오후 6:23에 업데이트됨 ]

개요

TFaccess 로그온 폼을 사용자 정의할 수 있는 방법을 설명하는 문서입니다.
이 문서의 내용은 다음을 정의하고 있습니다.
  1. TFaccess가 시작될 때, 로그온 폼이 표시되기 직전의 동작을 사용자 정의할 수 있습니다.
  2. TFaccess 로그온 폼이 표시된 후, 사용자가 '로그온' 버튼을 클릭하였을 때의 동작을 사용자 정의할 수 있습니다.
  3. TFaccess 로그온 인증 과정이 완료된 후의 동작을 사용자 정의할 수 있습니다.
  4. TFaccess 로그온 폼에서 임의의 명령 버튼, 텍스트 상자, 콤보 상자를 제어할 수 있습니다.

TFaccess 로그온 폼 개요

사용자 정의가 가능한 컨트롤

TFaccess 로그온 폼을 디자인 보기로 보면 다음 그림과 같이 표시됩니다.
이 중, 다음 항목은 사용자 정의가 가능한 항목입니다.
  • cmdButton1 ~ cmdButton3
  • txtText1 ~ txtText3
  • lblText1 ~ lblText3
  • cboCombo1 ~ cboCombo3
  • lblCombo1 ~ lblCombo3

사용자 정의가 가능한 컨트롤 매핑

이 로그온 폼의 컨트롤을 가리키는 변수가 'xfStartUp' 폼에 저장되어 있습니다. 이 변수는 컨트롤 이름에 'm'을 붙인 것으로 되어 있습니다.
이 변수를 이용해 'xfStartUp' 폼에서 쉽게 접근이 가능하며, 사용자 정의 이벤트로 정의할 수 있습니다.
  • cmdButton1 --> mcmdButton1
  • cmdButton2 --> mcmdButton2
  • cmdButton3 --> mcmdButton3

  • txtText1 --> mtxtText1
  • txtText2 --> mtxtText2
  • txtText3 --> mtxtText3

  • lblText1 --> mlblText1
  • lblText2 --> mlblText2
  • lblText3 --> mlblText3

  • cboCombo1 --> mcboCombo1
  • cboCombo2 --> mcboCombo2
  • cboCombo3 --> mcboCombo3

  • lblCombo1 --> mlblCombo1
  • lblCombo2 --> mlblCombo2
  • lblCombo3 --> mlblCombo3
참고: TFaccess는 바이너리 형태로 배포되기 때문에 수정이 불가능합니다.
따라서 응용프로그램의 'xfStartUp' 폼의 모듈에서 모든 조작이 가능해야 합니다.
이를 위해 로그온 폼의 컨트롤들을 'xfStartUp' 폼에서 제어할 수 있도록 변수를 할당하여 제어합니다.

컨트롤 별 사용자 정의가 가능한 이벤트

각 컨트롤 별 사용자 정의가 가능한 이벤트는 다음과 같습니다.
  • 명령 버튼 (Command Button)
    • Click
    • Enter
    • Exit
  • 텍스트 상자 (TextBox)
    • BeforeUpdate
    • AfterUpdate
    • Click
    • DblClick
    • Enter
    • Exit
  • 콤보 상자 (ComboBox)
    • BeforeUpdate
    • AfterUpdate
    • Click
    • DblClick
    • Enter
    • Exit
    • NotInList

사용자 정의가 가능한 시점

사용자 정의가 가능한 시점은 다음과 같습니다.
  • 로그온 화면이 표시 되기 직전: xfStartUp 폼의 RunCodeBeforeLogon 프로시저에 정의
  • 로그온 화면이 표시된 후, 사용자가 '로그온' 버튼을 클릭하였을 때: xfStartUp 폼의 RunCodeClickLogonButton 프로시저에 정의
  • 사용자가 '로그온' 버튼을 클릭한 이후, 로그온 프로세스가 정상적으로 실행된 이후: xfStartUp 폼의 RunCodeAfterLogon 프로시저에 정의

시나리오

로그온 이후, 로그온한 사용자 부서 정보를 TFaccess 전역 변수에 넣는 방법

개요

사용자가 로그온 한 이후, 사용자의 부서 정보를 TFaccess 전역 변수에 삽입합니다. 이 방법을 사용하지 않으면, 로그온한 사용자의 부서 정보를 알기 위해 매 번 데이터베이스에 쿼리해야 합니다. 이 방법을 사용하면, 데이터베이스에 쿼리할 필요 없이, xfnGetConf 함수를 이용하여 사용자 PC에 저장된 TFaccess 전역 변수에서 값을 불러올 수 있습니다.

따라하기

  1. 'xfStartUp' 모듈을 Visual Basic 편집기에서 엽니다.
  2. 'RunCodeAfterLogon' 프로시저로 이동합니다.
  3. '사용자 정의 코드 시작' 주석과 '사용자 정의 코드 종료' 주석 사이에 다음 코드를 삽입합니다.

    코드

        Dim rst As ADODB.Recordset
        Dim strDeptID As String
        
        '데이터베이스에서 부서 정보 불러오기
        Set rst = xfnGetRst("SELECT DeptID FROM tUsers WHERE UserID = " & xfnDbInsVal(xfnGetConf("UserID"), xenlQuotationMarkYes, True))
        
        '오류 처리: xfnGetRst 함수는 오류 발생시 Nothing을 반환하고, 그 때의 오류 메시지를 xstrErrDesc에 저장한다.
        If rst Is Nothing Then
            xsbErrMsg xstrErrDesc
            RunCodeAfterLogon = False
            Exit Function
        End If
        
        'TFaccess 전역 변수에 값 할당
        strDeptID = Nz(rst("DeptID").Value, "")
        xfnSetConf "DeptID", strDeptID
주의: 이 예제에 사용한 SQL 구문 및 DeptID 라는 열 이름은, 여러분이 사용자 테이블을 어떻게 정의했느냐에 따라 달라질 수 있습니다. 

확인하기

이렇게 설정한 다음, 정상적인 로그온을 하고 난 다음, 다음 절차를 따르면 확인할 수 있습니다.
  1. 직접 실행 창을 엽니다. (Ctrl-G 키로 열 수 있습니다.)
  2. 다음과 같은 명령을 입력한 후 'Enter' 키를 누릅니다.
    ?xfnGetConf("DeptID")
  3. 직접 실행 창에 다음과 유사한 결과가 표시됩니다.
    Sales

부제목(H3)로그온 폼에 '새 사용자 추가' 버튼을 삽입하는 방법

개요

로그온 폼에 '새 사용자 추가' 버튼을 삽입하면, 익명 사용자가 로그온하여 활용 가능한 시스템을 만들 수 있습니다.
사용자 계정이 없는 사용자의 경우, '새 사용자 추가' 버튼을 클릭하여, 자신의 계정을 만든 후 시스템을 사용할 수 있습니다.

따라하기

  1. 'xfStartUp' 폼의 'sbSetCustomControls' 프로시저에 다음과 같은 코드를 삽입합니다.

    코드

        With mcmdButton1
            .Left = CON_LEFT                '컨트롤 X 좌표 설정
            .Top = CON_BOTTOM - .Height     '컨트롤 Y 좌표 설정
            .Width = CON_DEFAULT_WIDTH * 2  '컨트롤 너비 설정 (단위: 트윕)
            .Caption = "새 사용자 추가"     '버튼 캡션
            .TabIndex = 3                   '탭 정지 속성 설정
            .Visible = True                 '로그온 폼에 표시
        End With
  2. 'xfStartUp' 폼의 'mcmdButton1_Click' 프로시저에 다음과 같은 코드를 삽입합니다.

    코드

        DoCmd.OpenForm "새_사용자_추가_폼"
        '주의: "새_사용자_추가_폼"에는 여러분이 만든 새 사용자를 추가할 수 있는 폼 이름을 입력해야 합니다.
        '참고: 이곳에 버튼을 클릭했을 때의 추가적인 코드를 삽입하면 됩니다.

확인하기

'xfStartUp' 폼을 저장하고, 응용프로그램을 다시 시작하면 다음 그림과 유사한 형태의 로그온 폼을 볼 수 있습니다.

로그온 폼에 '접속할 서버' 콤보상자를 삽입하는 방법

이 예제는, 바로 앞의 '로그온 폼에 '새 사용자 추가' 버튼을 삽입하는 방법'과 거의 동일합니다. 다만, 명령 버튼이 아닌, 콤보상자를 사용자 정의하는 것이니 콤보상자를 정의하는 추가적인 속성 설정이 필요합니다.
다음 코드를 'xfStartUp' 폼의 'sbSetCustomControls' 프로시저에 삽입하면 됩니다.

코드

    With mlblCombo1
        .Left = CON_LEFT
        .Top = CON_BOTTOM - .Height
        .Width = CON_DEFAULT_WIDTH
        .Caption = "서버 선택"
    End With

    With mcboCombo1
        .Left = mlblCombo1.Left + mlblCombo1.Width
        .Top = CON_BOTTOM - .Height
        .Width = Int(CON_DEFAULT_WIDTH * 1.5)
        'Combo Box Setting / 콤보상자 설정
        '주의: 'ServerList' 라는 콤보ID가 이미 정의되어 있어야 함.
        If Not xfnSetCombo(mcboCombo1, "ServerList") Then
            xsbErrMsg xstrErrDesc
        End If
        .Value = .ItemData(1)    '첫번째 항목 기본적으로 선택
        .TabIndex = 3
        .Visible = True
    End With

이 절차를 마치면, 다음 그림과 유사한 형태의 로그온 폼을 볼 수 있습니다.

1-6 of 6