vb :: 드라이브, 폴더, 파일처리 _파일에 데이터추가 텍스트 파일이 작성된 뒤 파일에 데이터를 추가하려면 다음 단계를 밟으면 된다. - 파일열기 :: file.openAsTextStream 또는 fileSystemObject.openTextFile - 데이터추가 :: write 또는 writeLine과 writeBlankLines 모두 textStream개체로 writeLine메서드는 지정된 문자열 끝에 줄바꿈 문자를 추가하고 커서를 다음라인 첫칸으로 이동한다. writeBlankLines메서드는 새 줄을 텍스트파일에 추가하는 것이다. - 파일닫기 :: textStream.close
#아래 예제는 3개의 쓰기 메서드 모두를 사용하여 파일을 열고 데이터를 추가하고 파일을 닫도록 한다.
#파일읽기 텍스트파일에서 데이터를 읽으려면 다음 메서드들이 사용된다. 이들은 모두 textStream개체들이다.
메서드
설 명
read
파일에서 지정된 개수의 문자를 읽는다.
readLine
줄바꿈 문자(줄바꿈 문자제외)까지 한 줄 전체를 읽는다.
readAll
텍스트파일의 전체내용을 읽는다.
skip
지정한 문자를 뛰어 넘어 읽는다.
skipLine
지정한 줄을 뛰어 넘어 읽는다.
다음은 파일을 작성하여 쓰고, 다시 읽는 예제코드이다.
#파일 이동, 복사, 삭제 FSO모델에는 파일을 이동하고 복사하고 삭제하기 위한 메서드가 다음표처럼 각각 두개씩 있다.
메서드
설 명
file.move 또는 fileSystemObject.moveFile
파일 이동
file.copy 또는 fileSystemObject.copyFile
파일 복사
file.delete 또는 fileSystemObject.DeleteFile
파일 삭제
아래 예제는 c드라이브의 내문서폴더에 텍스트파일을 만들고 그 파일에 대한 정보를 작성하여 \tmp라는 폴더로 이동하고 \temp라는 폴더에 사본을 만들고 두 폴더 모두에서 사본들을 삭제한다.
Public Function IsBeing(경로 As String, Optional 형식 As Byte = 0) As Boolean '먼저 프로젝트메뉴->참조의 Microsoft Scriping Runtime 을 참조해야 합니다. '형식 Value : 0 -> 파일, 1 -> 디렉터리, 2 -> 드라이브 Dim fso As New FileSystemObject Dim objDrive As Object
Select Case 형식 Case 0 IsBeing = IIf(fso.FileExists(경로), True, False) Case 1 IsBeing = IIf(fso.FolderExists(경로), True, False) Case 2 IsBeing = IIf(fso.DriveExists(경로), True, False) End Select End Function
그냥 텍스트 박스에서 써넣은 후 아래 함수로 체크해서 하위폴더중 없는 폴더가 있으면 자동으로 생성하는
함수를 만들었네요.. 인덱스를 Integer을 썼으니 6만 얼마 생성가능한데 OS가 그만큼 지원해주는지는 모르
겠네여.. 어쨋든 유용하게 써먹으시길
'이 함수는 경로를 인수로 받아서 디렉터리가 있는지 확인하고 없으면 생성시켜주는 함수입니다. Public Function IsBeingDir(StrPath As String) As Boolean On Error GoTo err
If IsBeing(StrPath, 1) = True Then IsBeingDir = True Exit Function End If
Dim FolderCount() As String Dim DiffStr As String Dim Idx As Integer FolderCount = Split(StrPath, "\")
DiffStr = FolderCount(0) For Idx = 1 To UBound(FolderCount) DiffStr = DiffStr & "\" & FolderCount(Idx) If IsBeing(DiffStr, 1) = False Then MkDir DiffStr End If Next IsBeingDir = True Exit Function err: IsBeingDir = False End Function
visual basic6.0부터는 Open문을 사용해 파일만을 처리했던 구 버전과는 달리 파일은 물론, 드라이브, 폴더까지 다룰 수 있는 FSO(File System Object)모델을 소개하고 있다. FSO모델을 사용하면 폴더를 작성, 변경, 이동, 삭제뿐만 아니라 폴더에 대해 여러가지 정보를 얻을 수 있다. 또한 파일을 쉽게 처리할 수 있다. 파일을 처리하는 주요목표는 공간과 컴퓨터자원을 효율적으로 사용하고 접근하기 쉬운 데이터를 저장하는 것이다. 이러한 파일처리목표를 달성할 수 있는 것이 FSO모델이다.
#파일시스템개체(FSO)구성 FSO모델의 개체구성원을 사용하려면 먼저 [프로젝트-참조]메뉴를 선택해 참조대화상자에서 "Microsoft Scripting Runtime"을 선택해야 한다. Scripting형식 라이브러리를 참조했다면 [보기-개체찾아보기]메뉴를 선택하여 개체찾아보기 대화상자에서 Scripting라이브러리를 선택하면 개체에 들어 있는 다양한 속성과 메서드 그리고 이벤트에 대한 내용을 볼 수 있다.
FSO모델은 아래와 같이 대표적인 개체로 구성되어 있다. - drive :: 시스템에서 사용할 수 있는 디스크공간, 디스크의 공유이름과 같은 디스크정보를 얻을 수 있게 해준다. "drive"에는 하드디스크 이름이외에도 cd-rom드라이브, ram디스크와 같은 이름을 사용할 수 있다. - folder :: 폴더를 만들고 삭제하고 이동할 수 있도록 해주며 이름과 경로 등에 대하여 시스템에 쿼리할 수 있게 한다. - files :: 파일을 만들고 삭제하고 이동할 수 있도록 해주며 이름과 경로 등에 대하여 시스템에 쿼리할 수 있게 한다. - FileSystemObject :: 그룹의 주 개체로 드라이브, 폴더, 파일을 일반적으로 조작하고 만들고 삭제하고 정보를 얻을 수 있도록 해주는 메서드가 들어있다. 이 개체와 연관된 많은 메서드들은 다른 개체에 들어있는 메서드들과 중복되어 있다. - textStream :: 텍스트파일을 읽고 쓸 수 있게 한다.
#FSO모델 프로그래밍 이러한 FSO모델로 드라이브, 폴더, 파일을 다루려면 다음과 같은 3가지작업이 필요하다. - CreateObject메서드를 사용하거나 변수를 FileSystemObject개체로 선언하여 FileSystemObject개체를 하나 만든다. - 새로 만든 개체에 적절한 메서드를 사용한다. - 개체의 속성을 엑세스한다.
#FileSystemObject개체 만들기 첫째 작업은 작업할 FileSystemObject개체를 만드는 것으로, 다음 두가지 방법이 있다. |형식| dim fso as new FileSystemObject '변수를 FileSystemObject개체형식으로 선언
또는 |형식| set fso = CreateObject("scripting.FileSystemObject") 'CreateObject메서드를 사용하여 FileSystemObject개체를 만든다.
#적절한 메서드사용 다음 작업은 FileSystemObject개체의 적절한 메서드를 사용하는 것이다. 예를 들어, 폴더에 대해선 CreateFolder메서드를 사용하여 폴더를 작성한다거나 MoveFolder메서드를 사용해 폴더를 이동할 수 있다.
#개체의 속성 엑세스 개체에 대한 핸들을 얻으면 get메서드를 사용하여 개체의 정보를 액세스할 수 있다. 예를 들어 특정폴더의 이름을 얻으려면 먼저 해당개체의 인스턴스를 하나 만들고 적절한 메서드를 사용하여 인스턴스에 대한 핸들을 얻을 수 있다.
다음은 이러한 3가지 단계를 이용해 새 폴더를 만들어보고, 기존 폴더에 대한 정보를 액세스하는 예제코드이다.
이 예제코드에서 createFolder메서드를 사용하여 새폴더를 만들 때는, name, path, dateCreated와 같은 속성을 액세스하는데 getFolder메서드를 사용할 필요가 없다. 반면에 기존에 있는 폴더의 속성을 액세스하려면 반드시 getFolder메서드가 필요함을 보여주고 있다.
예제 : nper(연금의 총지불 기간수를 지정), pmt(각 기간에 지불할 지불액을 지정), pv(장래의 지불액이나 수령액 에 대한 현재의 값을 지정), fv(마지막으로 지불한 후에 원하는 장래의 값), type(지불만기일), guess(추정치를 지정하는 Variant는 Rate로 얻음)
텍스트박스안에 입력된 문구를 거꾸로 출력한다. 개체변수를 사용하는 것은 다른 변수를 사용하는 것과 비슷하지만 변수를 지정할 때는 다음과 같은 단계를 따른다. 먼저 Dim [변수] As [클래스이름] 구문을 사용해 변수를 선언하고, Set [변수] = New [개체]문을 사용해 개체를 변수에 지정한다.
#코드모듈 Visual Basic의 코드는 모둘이라는 곳에 저장된다. 이러한 코드모듈에는 폼, 표준, 클래스의 3가지 종류가 있다. 간단한 응용프로그램이라면 하나의 폼으로도 구성이 가능하며 모든 코드도 폼 모듈내에 작성할 수 있지만 응용프로그램이 커지고 복잡해짐에 따라 많은 폼을 추가하게 된다. 여러 폼에서 실행되는 코드가 공통적으로 사용된다면 공통적인 코드는 각 폼에 중복시키지 않고 독립된 모듈내에 만드는 게 좋다. 이 독립된 모듈이 표준 모듈이 된다. 시간이 지나면 공유프로시저를 가지는 모듈의 라이브러리를 만들 수 있다. 이러한 코드모듈(폼, 표준, 클래스모튤)에는 다음과 같은 구조로 형성되어 있다. - 선언부분 폼, 클래스, 표준모듈의 모듈수준에 상수, 형식, 변수, 동적연결 라이브러리(DLL)프로시저를 선언하는 곳이다. - 프로시저 부분 Sub, Function, Property 프로시저와 같은 하나의 단위로 실행될 수 있는 간단한 코드들이 존재한다.
#폼모듈 프로젝트 탐색기 창에 폼이라는 폴더에는 일반 폼과 추가될 수 있는 MDI폼이 있음을 볼 수 있다. 여기에 작성될 폼 모듈에는 폼과 컨트롤에 대한 설명, 컨트롤 속성에 대한 설명을 포함하며, 상수, 변수, 외부 프로시저, 이벤트 프로시저, 일반 프로시저에 대한 폼 수준 선언도 포함될 수 있다. 이 폼모듈에는 Form_Load()이벤트프로시저라는 코드구역이 있으며 이 곳에 특정이벤트에 응답하여 실행되는 명령을 놓아두면 된다. 폼은 컨트롤을 가지며 폼 모듈에는 폼의 각 컨트롤에 대응하는 일련의 이벤트 프로시저가 있다. 이벤트 프로시저 외에도 폼 모듈은 다른 이벤트 프로시저의 호출에 응답하여 실행하는 VaildateTime()과 같은 일반 프로시저도 가질 수 있다.
#표준모듈 표준모듈(.bas)은 폼 모듈과 달리 프로시저, 형식, 데이터선언과 정의만 포함하는 모듈을 의미한다. 즉, 특정폼이나 컨트롤과 관련되지 않은 코드가 들어있다. 표준모듈에서 모듈수준선언과 정의는 기본값이 Public이다. 이러한 표준모듈은 응용프로그램 내에서 다른 모듈들이 공통으로 액세스할 수 있는 프로시저와 선언영역에 대한 컨테이너가 된다. 표준모듈에 작성하는 코드가 반드시 특정프로그램에 묶여있을 필요는 없다. 즉, 이름으로 특정폼이나 컨트롤을 참조하지 않는 것만 주의한다면 표준모듈은 서로 다른 많은 응용프로그램에서 다시 사용할 수 있음을 명심하기 바란다.
#클래스모듈 클래스모듈(.cls)은 화면에 보이는 사용자 인터페이스가 없다는 점만 제외하고는 폼 모듈과 비슷하다. 이러한 클래스모듈은 VisualBasic에서 개체지향 프로그래밍의 기초가 된다. 또한 클래스모듈에 코드를 작성한여 새로운 개체를 작성할 수 있다. 이렇게 만들어진 새로운 개체에 사용자 정의한 속성과 메서드를 넣을 수 있다. 실제로 폼 역시 폼 창을 화면에 나타내고 그 위에 컨트롤을 놓을 수 있는 클래스모듈의 일부분임을 알아야 한다.
이번 장은 버튼을 누르면 아이콘을 출력하는 간단한 프로그램을 작성한다. form의 Load이벤트에 코드를 작성한다.
Load이벤트란 폼을 컴퓨터메모리에서 불러올 때 발생하게 된다. Load이벤트가 발생되면, Load이벤트 내의 코드를 실행하게 된다. 즉, 현재 PictureBox를 보이지않게 하라는 의미인 picIcon.Visible=false를 실행하게 된다. 그리고 End Sub를 만나 프로시저를 종료한다.
작은 따옴표(')로 시작된 문장은 주석문이다. 주석문은 컴파일시 실행되지 않으며, 그 코드에 대한 부연설명을 하기 위한 것이다. 좋은 프로그램은 얼마만큼 주석문을 잘 표시해 놓느냐에 따라 달려있다. 팀 단위로 어플리케이션이 공동개발될 경우 팀원간에 코드를 공유할 필요가 있게 되는데. 이때 다른 팀원이 이해하기 쉽도록 주석문을 달아 놓는다. 주석문과 마찬가지로 들여쓰기를 잘 해놓으면 나중에 자신뿐만 아니라 타인이 보더라도 잘 이해할 수 있다.
코드창의 개체상자 리스트박스에서 cmdIcon을 선택하면, Click이벤트프로시저가 자동적으로 나올 것이다. 이 이벤트프로시저는 기본적으로 CommandButton을 선택했을 때 기본적으로 나오는 이벤트이다. 이처럼 각 개체마다 기본적으로 갖는 이벤트는 다르다. 예를 들어, 폼을 선택했을 때 기본적으로 나타나는 이벤트 프로시저는 Load이벤트이다.
비주얼베이직은 어떤 이벤트에 의해 실행되지 때문에, 이벤트 중심 프로그램이라 불린다. 모든 윈도우용 어플리케이션은 이벤트단위로 코드가 이루어져 있기 때문에 특정사건을 유발시켜야 그 사건에 해당하는 이벤트를 실행하게 된다. 우리가 작성한 어플리케이션도 마찬가지이다. 실행시 초기화면에는 아무 그림도 나타나지 않는다. 그대로 방치하면 어떠한 변화도 폼에는 일어나지 않는다. 그러나 [실망이야]버튼을 클릭했을 때 해당이벤트, cmdIcon_Click이벤트를 만나 그 안에 있는 코드를 실행시켰다는 것을 알기 바란다.
#구성요소를 저장시 - 폼 파일 (.frm) : 모든 폼과 MDI폼을 저장한다. - 클래스 파일 (.cls) : 모든 클래스모듈을 저장한다. - 모듈 파일 (.bas) : 모든 표준 모듈을 저정한다. - 속성 페이지 파일 (.pag) : 모든 속성페이지를 저장한다. - 사용자 정의 컨트롤파일 (.ctl) : 모든 사용자컨트롤을 저장한다. - 문서개체파일 (.dob) : 모든 문서개체를 저장한다. 이러한 구성요소는 하나의 개체로 작용되기 때문에 독립되어 저장된다. 이처럼 비주얼베이직 파일은 독립개체로 저장되기 때문에 나중에 필요한 구성요소를 찾아 다른 프로젝트에서도 재사용할 수 있다.
2. DB connect Function(여기서 XXX 부분에 Oracle Client에서 설정한 값을 입력한다.) - DB 연결이 필요한 부분에 아래 function을 호출한다.
Private Sub ConnectDB() Set adoOraCon = New ADODB.Connection
With adoOraCon .ConnectionString = "Provider=MSDAORA.1;Data Source=XXX;User ID=XXX;Password=XXX;Persist Security Info=True" .ConnectionTimeout = 60 .Open End With End Sub
3. 모듈에 다음 function을 입력한다. Option Explicit Public adoOraCon As ADODB.Connection
' Procedure : GetRecordSet ' Description : 인자로 넘어오는 쿼리를 실행하고, 결과값을 RecordSet으로 반환 ' Parameter : szSql(쿼리) 'Return Value : Recordset Public Function GetRecordSet(ByVal szSql As String) As ADODB.Recordset
' Procedure : ExecuteQuery ' Description : 인자로 넘어오는 쿼리를 실행하고 성공여부를 반환 ' Parameter : szSql(쿼리) 'Return Value : True/False Public Function ExecuteQuery(szSql As String) As Boolean
On Error GoTo ErrHandler
adoOraCon.Execute szSql
ExecuteQuery = True
Exit Function
ErrHandler: If Err.Number <> 0 Then MsgBox Err.Source & vbCrLf & Err.Description, vbExclamation, "쿼리 수행 오류" ExecuteQuery = False Err.Clear End If End Function
4. 원하는 쿼리를 만들어 모듈의 function을 실행한다. - 일반적으로 값을 가지고 오는 Select Query이면, GetRecordSet를 실행하고, - insert, delete와 같은 데이터 조작 쿼리인 경우에는 ExecuteQuery를 실행한다.
예) SELECT Query Dim strSQL As String Dim adoRs As ADODB.Recordset
'//IMPORTANT : 조회 쿼리 생성 strSQL = "SELECT * FROM TEST_TAB ORDER BY A_COL"
Set adoRs = GetRecordSet(strSQL)
While Not adoRs.EOF '//IMPORTANT : 가지고 온 결과를 처리하는 부분 adoRs.MoveNext Wend
1. F1 : 선택된 항목에 대한 비주얼 베이직 도움말 보기 2. F2 : 개체 찾아보기 3. F3 : 다음 찾기 4. F5 : 컴파일하기 5. Crtl+F5 : 전체 컴파일한 후 다시 시작하기 6. Crtl+F : 찾아보기 (Find) 7. Crtl+H : 바꾸기 8. Crtl+I : 변수등의 요약 정보 9. Crtl+J : 속성과 메소드 목록보기 10. Crtl+Z : 실행 취소 11. Crtl+DEL : 한 단어만 지우기 12. Crtl+오른쪽 화살표 : 한 단어만큼 오른쪽으로 이동 13. Crtl+왼쪽 화살표 : 한 단어만큼 왼쪽으로 이동 14. Crtl+Home : 해당 모듈의 처음으로 이동 15. Crtl+End : 해당 모듈의 끝으로 이동 16. Crtl+아래쪽 화살표 : 다음 프로시저의 첫번째 줄로 이동 17. Crtl+위쪽 화살표 : 이전 프로시저의 첫번째 줄로 이동 18. Crtl+Page Up : 이전 프로시저 선언으로 가기 19. Crtl+Page down : 다음 프로시저 선언으로 가기 20. Crtl+스페이스바 : 나머지 단어 채우기 21. Shift+F2 : 프로시저 정의 보기 22. Shift+F3 : 이전 찾기 23. Shift+F10 : 오른쪽 마우스 버튼 클릭한것과 동일한 효과 24. Shift+Tab : 선택된 부분의 들여쓰기 해제 25. Shift+오른쪽 화살표 : 오른쪽으로 한 단어 더 선택하기 26. Shift+왼쪽 화살표 : 왼쪽으로 선택된 한 단어 해제하기 27. Shift+아래쪽 화살표 : 위로 한 줄 더 선택하기/지우기 28. Ctrl+Shift+F2 : 가장 마지막으로 가기 29. Ctrl+Shift+J : 상수 열거 30. Ctrl+Shift+I : 인수 정보 보기
1. Shift + F2 : 선언된 함수, 변수로 이동하기 2. Shift + Ctrl + F2 : Shift + F2 로 가서 되돌아오기 3. F8 : 한문장씩 실행하기(중지모드에서 사용) 4. Shift + F8 : 어떤 문장이 사용자 정의 함수를 호출할시 F8키는 함수안으로 들어가지만, Shift + F8 키는 함수를 모두 실행하고 다음 문장으로 이동합니다. (중지모드에서 사용) 5. Ctrl + F9 : 노란색선을 원하는 위치로 이동하기 중지모드에서 현재 실행중인 코드가 노란색으로 나타납니다. 마우스나 키보드로 특정문장으로 커서를 이동 시킨뒤 Ctrl + F9키를 누르면 여기부터 다시 실행할 수 있습니다. 6. Ctrl + SpaceBar : 단어채우기 코딩중 긴함수나 긴변수를 일일히 쓰는건 아주 짜증나는 일입니다. 만약 변수명이 mintRecordCount 일 경우 mintR 한다음에 Ctrl + SpaceBar를 누르면 단어가 자동으로 채워 집니다. (중복 단어가 있으면 골라서 사용할 수 있습니다.) 7. 꽁수(....^^) 만약 어떤 이벤트를 테스트할 목적으로 디버깅 하려면 여러분들은 보통 어떤식으로 하십니까?... 아마 그 이벤트에 F9키를 눌러서 중단점을 잡아 놓고서 F5키를 눌러서 실행 할 것입니다. 그런데 중단점을 잡아 놓지 않고, 할수 있는 방법이 있는데 그 방법을 설명해 드리겠습니다...
먼저 실행도중에 Ctrl + Break키를 눌러서 중지모드 상태로 들어갑니다. 다음에 F8키를 누르고, 어떤 이벤트(버튼클릭 또는 키보드 입력 ....)를 발생시키면 디버깅 상태로 들어갈 것입니다.(전재조건 : 발생시킨 이벤트 안에는 반드시 코드가 있어야겠죠...)
단축키(ShortCut Key) 설명 CTRL+C 선택영역 복사하기 CTRL+X 선택영역 잘라내기 CTRL+Y 현재줄 잘라내기 CTRL+V 붙여넣기 CTRL+DELETE 문장단위로 지우기 TAB 선택영역 한번에 내여쓰기 SHIFT+TAB 선택영역 한번에 들여쓰기 CTRL+Z 되돌리기(실행취소) CTRL+RIGHT ARROW 다음 단어로 이동 CTRL+LEFT ARROW 이전 단어로 이동 CTRL+DOWN ARROW 다음 프로시져로 이동 CTRL+UP ARROW 이전 프로시져로 이동 SHIFT+F2 정의 보기 CTRL+F 찾기 CTRL+H 바꾸기 CTRL+S 저장하기 F7 코드창으로 이동하기 F4 속성창으로 이동하기 CTRL+R 프로젝트 탐색기로 이동하기 F5 실행 F8 한 단계씩 코드 실행