• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

팁사용기

[팁] Database-4 데이타의 검색

  • - 첨부파일 : Database_4.zip (81.3K) - 다운로드

본문

*시작하기 전에... 예제파일을 다운 받아서 직접 텍스트 에딧으로 보시면 그림도 볼 수 있고 편리할 것입니다..^^;;

안녕하세요?
미쉐린 김성준입니다.
데이러베이스 네번째 시간입니다.
이번에는 지난 강좌에 이어서 리얼베이직의 데이러베이스의 검색에 대해서 공부해 보도록 하겠습니다.
검색 기능은 리얼베이직이나 오라클이나 MySQL 이나 기타 다른 곳에서도 70~80% 동일하게 사용되기 때문에
익혀 놓으면 어디든지 쉽게 적응할 수 있을 것 입니다.

1. 데이타베이스의 데이터 검색
지난 강좌에 이어서 내용을 진행해 보자면 데이타의 입력 까지 했습니다.
하지만 검색에 대해서는 아직 확인할 수 없었죠.
우선 데이타베이스에서 가장 중요한 것 중에 하나가 검색 일 것 입니다.
입력이 없으면 검색도 불가능하겠지만 어떤 데이타를 적절하게 어떤 형식으로 검색해서 보여주느냐가
데이타베이스를 사용하는 중요한 이유중 하나겠죠.
따라서 적절하게 빠르게 원하는 데이타만을 검색하게 보여주는 것이 아주 중요합니다.
리얼베이직이나 비주얼 베이직, 델파이 등도 이러한 용도를 위해 만들어진 갭라툴이라 할 수 있죠.
여튼....리얼베이직의 검색에 대해서 알아보도록 하겠습니다.

리얼베이직의 데이타베이스 검색도 데이타베이스이기 때문에 SQL 문중에 Select 문을 이용하여 검색을 합니다.
Select 문의 기본형은 다음과 같습니다.

        Select 필드명1, 필드명2 from 테이블명 where 검색 조건 order by 정렬 조건

여기에서 검색 조건과 정렬 조건은 없어도 되지만 원하는 데이타를 순서대로 검색하기 위해서는 검색 조건과 정렬 조건이 항상 같이 쓰이게 됩니다.
검색 조건은 Where 문 이후에 나오게 되고 정렬 조건은 Order by 이후에 나오게 되죠.
그럼 지난 강좌를 기본으로 하여 예를 들어보도록 하겠습니다.

지난 번의 테이블 내용을 보면 그 안에 필드가 Name, Age, Sex 가 있었습니다.
여기에서 먼저 아무 조건도 없는 검색문을 만들어 보도록 하겠습니다.

        Select * from TestTable

위의 내용은 TestTable 에 있는 모든 데이타를 출력하라는 것 입니다. 특정한 조건이나 정렬에 대한 내용을 추가하지 않았기 때문에 입력한 순서대로 출력이 됩니다.
그리고 "*" 표시는 모든 필드를 말합니다. 원래는 Select Name, Age, Sex from TestTable 이렇게 해야하지만 필드명이 많을 경우에는 좀 다 적기 힘들잖아요. 그래서 편리하게 * 표시를 해서 전체를 나타내 줍니다.
그리고 검색시에는 전체 데이타 중에서 몇개만 뽑아내는 경우가 많기 때문에 필드명을 적기 보다는 대부분 * 표시를 해줍니다.
그럼 다음과 같은 예를 보도록 하죠.

        Select * from TestTable where Name='김영권'

위의 예를 보면 TestTable 에 들어간 데이타 중에 이름이 "김영권" 인 모든 데이타를 검색하라는 것 입니다.
그럼 위의 예를 조금 수정을 해보도록 하겠습니다.

        Select * from TestTable where Name Like '김%'

위의 예는 말이죠. 처음에 시작하는 이름 중에 김으로 시작하는 이름은 모두 찾아주라는 것입니다.
그리고 위와 같이 할 경우에는 '=' 대신에 'Like' 라고 해줘야 합니다.
영어 그대로 비슷한것(?)은 다 찾아주라는 거죠..머..^^:;
그럼 여기에서 나이순으로 나타나게 하려면 어떻게 할까요? Order by 다음에 정렬 조건을 써주면 됩니다.
다음의 예를 보도록 하죠.

        Select * from TestTable where Name Like '김%' order by Age

어때요? 간단하죠? 정렬 조건에 해당 필드명을 써주기만 하면 작은것 부터 순차적으로 정렬이 되어서 순서대로 검색이 됩니다.
흠.그럼 거꾸로 정렬을 하려면 어떻게 할가요? 다음처럼 끝에 DESC만 붙여주면 됩니다.

        Select * from TestTable where Name Like '김%' order by Age desc

어때요? 간단하죠? SQL 문은 이렇게 간단한 문법을 갖고 수많은 검색 조건을 이용하여 검색을 할 수 있습니다.
그럼 약간 더 검색 조건문을 추가해서 복잡하게 만들어보도록 하죠.
다음의 예를 보도록 하겠습니다.

        Select * from TestTable where Name Like '김%' and Sex='남' order by Age

위의 예는 이름이 김으로 시작되고 성별은 남자만 검색을 하며 나이순으로 검색 되도록 한 예입니다.
Select 문중에 가장 중요한 것은 제대로 된 검색입니다. 제대로 검색을 하기 위해서는 조건이 한가지가 아니라 여러가지가 오게 되는데요.
이것은 예전에 수학에서 배운 교집합과 합집합이 적용이 됩니다.
교집합은 and 합집합은 or 이라고 보면 되죠.
즉 동시에 같은 조건이 만족하려면 and 로 하면 되고 이것도 되고 저것도 되는 모든 조건중에 하나만 만족해도 되는 경우에는 or 이 사용되게 됩니다.
다음의 2가지 예를 보도록 하죠.

        Select * from TestTable where Name Like '김%' and Sex='남'
        Select * from TestTable where Name Like '김%' or Sex='남'

위의 2가지 예를 보면 모두 같지만 where 절 이후에 나오는 조건 부의 접속사만 다릅니다.
하나는 and 이고 하나는 or 이죠.
and 는 앞서 설명한 것 처럼 이름이 김으로 시작되고 성별이 남자인 것만 검색하는 것이구요.
or 은 이름이 김으로 시작하거나 성별이 남자이거나 하나만 만족하면 모두 검색을 하는 것이 됩니다.
즉 or 이 합집합의 경우구요. 많은 데이타를 검색할 경우에는 or 조건이 더 많은 검색 결과를 얻게 될 것 입니다.

뭐 Select 문에 대한 설명은 이정도면 될 것이라고 생각합니다.
그럼 지난 강좌에 이어서 Select 문을 이용하여 검색을 하고 결과를 나타내도록 해보죠.


2. 검색 기능 추가
그럼 리얼베이직에서 프로그램에 어떻게 검색 기능을 넣으면 될까요?
지난 강좌의 내용에 추가를 해보도록 하죠.

1) 인터페이스의 수정
먼저 지난 화면에서 하단 부분에 Listbox 콘트롤을 하나 추가합니다.
그리고 Listbox의 속성을 다음과 같이 수정합니다.

        Name : SearchListbox
        ColumnCount : 3
        InitialValue : 이름 나이 성별 - (사이에는 탭을 추가해서 입력합니다.)
        DefaultRowHeight : 20

직접 수정을 해보도록 하는 것이 좋습니다.
귀찮을 경우는 강좌파일을 다운로드 해서 보시면 바로 이해가 가실 것 입니다.

*그림은 강좌 파일을 다운로드해서 보시면 나타납니다.

- Listbox 속성 윈도우 -

이제는 PushButton 콘트롤을 하나 추가해서 Caption 속성을 "데이타 검색"으로 합니다.
수정된 화면은 다음의 그림과 같습니다.

*그림파일은 강좌 파일을 다운로드 해보시면 볼 수 있습니다.


- 수정한 그림 -


2) 리얼베이직의 데이타베이스 검색을 위한 준비
리얼베이직에서 데이타를 검색하기 위해서는 다음과 같은 구성물(?)이 필요합니다.

        RealSQLDatabase 클래스
        RecordSet 클래스
        SQL 문

따라서 각각의 해당 클래스의 객체를 생성해주고 초기화 해줘야 합니다.
보통 객체의 초기화는 New 키워드를 통해서 하는데 데이타베이스의 검색을 위한 RecordSet 객체는
RealSQLDatabase 함수인 SQLSelect 함수를 이용하여 초기화(?) 합니다.
이 내용은 코드 수정에서 확인할 수 있습니다.
위의 구성물(?)을 잘 기억하고 코드 수정을 해보도록 하겠습니다.
        

3) 코드 수정
인터페이스를 추가했으니 그럼 이제 소스를 추가해보도록 하겠습니다.
소스추가는 마지막에 추가한 "데이타 검색" 버튼만 하면 됩니다.
그럼 "데이타 검색" 버튼을 더블클릭하여 코드에디터를 열어주고 Action 이벤트에 다음과 같은 코드를 추가해 줍니다.


  dim RDB as REALSQLDatabase
  dim rs as RecordSet
  dim SQL as String
  dim Name, Age, Sex as String
  
  
  RDB = DatabaseConnectMethod()  //접속 함수
  if RDB = nil then
    return
  end if
  
  //Select 문은 이용한 SQL 문
  SQL = "Select * from TestTable "
  SQL = SQL+" Where Name like '김%'"
  
  SQL = SQL.ConvertEncoding(Encodings.MacKorean)
  rs = RDB.SQLSelect(SQL)
  
  if rs = nil then
    return
  end if
  
  while not rs.EOF
    Name = rs.Field("Name").StringValue
    Age = rs.Field("Age").StringValue
    Sex = rs.Field("Sex").StringValue
    
    SearchListBox.AddRow Name
    SearchListBox.cell(SearchListBox.LastIndex, 1) = Age
    SearchListBox.cell(SearchListBox.LastIndex, 2) = Sex
    
    rs.MoveNext
  wend
  

위의 코드를 보면 우선 몇가지 객체와 변수를 선언했는데요.
RDB 와 rs 는 데이타베이스 객체와 RecordSet 객체구요.
SQL 은 Select 문을 넣기 위한 문자형 변수이며 Name, Age, Sex 는 데이타 검색 결과를 저장하귀 위한 문자형 변수입니다.

그리고 코드에서 먼저 지난강좌에서 처럼 처음에 DatabaseConnectMethod() 함수를 통해서 초기화를 해줍니다.
그 이후에 간단한 에러체크를 해줬구요.
SQL 문인 Select 문을 만들어서 SQL 문자형 변수에 넣었습니다.
(문자형 변수명을 SQL 로 해서 설명에는 좀 혼동될 수도 있지만 코드로 상요하기에는 좋습니다..^^;;)
SQL 문은 2개로 나누었는데 가독성을 좋게 하기 위해서 이렇게 나누었구요. 내용은 다음과 같습니다.

        Select * from TestTable Where Name like '김%'

내용은 '김'으로 시작되는 이름을 갖는 모든 내용을 검색하라는 뜻이 되겠습니다..^^;;
그리고 rs = RDB.SQLSelect(SQL) 문은 검색을 위한 RecordSet 객체의 초기화(?) 부분입니다.
여기에서 다음과 같이 써도 같은 결과 입니다.

        rs = RDB.SQLSelect("Select * from TestTable Where Name like '김%'")

긴 Select 문을 사용할 경우에 위와 같이 하기에는 좀 어렵겠죠?
따라서 문자형 변수에 넣고 대입을 했습니다.
그리고 검색시에 Select 문을 사용할 경우에는 RealSQLDatabase 의 SQLSelect 함수를 사용한다는 것을 꼭 기억해두시고 그렇게 하시기 바랍니다.
그리고 간단한 에러체크와 다음에는 While 반복문을 통한 반복문 안에 데이타를 검색해 주는 것입니다.
여기에서 While 문이 조건은 RecordSet 객체인 rs 의 EOF 값이 True 가 되면 반복을 멈추라는 것 입니다.
EOF 는 End Of File 의 약자로 볼 수 있습니다. 뭐 여기에서는 데이타의 끝까지 갔다라는 것을 나타내는 것이라 볼 수 있습니다.
그리고 반복문 내에 데이타 검색 후 다음 데이타를 검색하라는 문구는 rs.MoveNext 문입니다.
이 문장을 사용하지 않으면 데이타를 검색하기 위한 순서가 다음으로 넘어가지 못하고 제자리만 돌기 때문에 무한반복(?무한루프라 볼 수 있죠..^^;;)에 걸리는 문제가 발생하게 됩니다.

위와 같이 하고 프로그램을 실행해보시기 바랍니다. 그러면 데이타의 생성, 입력, 검색을 모두 확인할 수 있을 것 입니다.
강좌를 다운로드해서 그림을 같이 확인해 보시기 바랍니다.


- 예제 그림 -



마치며...
이번 강좌까지 리얼베이직의 데이타베이스 기본 기능에 대해서 알아봤습니다.
리얼베이직에서 위와 같은 방식은 다른 데이타베이스에서도 동일하게 사용됩니다.
그리고 데이타베이스 간의 차이는 각각의 데이타베이스 시스템을 별도로 공부해야 할 것 입니다.
예를 들어서 오라클이나 MySQL 은 기본적인 SQL 문법은 동일하지만 생성문이나 검색문에서 약간의 차이는 있기 때문입니다.
이곳 강좌에서 다른 데이타베이스 시스템에 대해서는 강좌하지는 않습니다. 해당 데이타베이스 시스템의 특성이나 사용법, 설치등은 해당 데이타베이스 시스템의 강좌를 공부하시면 될 것 입니다. 대신에 이를 리얼베이직에서 활용하는 방법은 앞으로도 계속 할 것입니다.
여튼 데이타베이스의 기본은 간단한듯 하지만 간단하지는 않습니다. 하지만 계속 사용하고 익히면 굉장히 간단하고 쉽기 때문에 잘 익혀 두시기 바랍니다.
다음에는 다른 데이타베이스 시스템의 기본 활용 방법에 대해서 공부를 해보도록 하고 가장 대표적인 무료 데이타베이스 시스템인 MySQL 에 대해서 약간 자세히 알아보도록 하겠습니다.
그럼 좋은 하루 되세요..^^;;
그럼 이만..휘릭~!

PS. 오타, 오류, 질문에 대해서는 게시판에 여지없이 리플 달아주세요.
그럼 이만.휘릭~!


from michelin
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 5,044
가입일 :
2004-01-25 23:38:19
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 1

머그컵님의 댓글

배우는데 도움이 되네요^^

전체 48 건 - 1 페이지