Q&A

  • Query Component의 두가지 의문사항
안녕하세요 ^^; 초보~



query component와 Data Source component와 DB Grid만을 가지고 간단한



프로그래밍을 하는데요 Query component는 Table component처럼 TableName



같은걸 제가 못 찾았거든요 DatabaseName을 한번 병경했더니 DB Grid에



자료가 나타나지 않았습니다. 왜그까? ^^; 이런 관계의 설명 부탁 드리고요



또 한가지 실행시 SQL 문장 사용하기 실습을 하는데요 Query1.Active :=



False; 했더니 Declaration expected but identifier "Query1" found라는



에러가 생기는데요 쩝~ 왜 그러는지 잘 모르겠어요 가르쳐 주세요 ^^;



부탁~ 꾸벅~!

2  COMMENTS
  • Profile
    이재식 1999.09.21 22:01
    오이 wrote:

    > 안녕하세요 ^^; 초보~

    >

    > query component와 Data Source component와 DB Grid만을 가지고 간단한

    >

    > 프로그래밍을 하는데요 Query component는 Table component처럼 TableName

    >

    > 같은걸 제가 못 찾았거든요 DatabaseName을 한번 병경했더니 DB Grid에

    >

    > 자료가 나타나지 않았습니다. 왜그까? ^^; 이런 관계의 설명 부탁 드리고요

    >

    > 또 한가지 실행시 SQL 문장 사용하기 실습을 하는데요 Query1.Active :=

    >

    > False; 했더니 Declaration expected but identifier "Query1" found라는

    >



    이재식 wrote :

    안녕하세요?

    질문내용이 무슨 의미인지는 알겠는데요, 정확히 무엇을

    알고 싶으신것인지 사실 이해가 좀...

    아무튼 대략 이해한 바대로 감히 설명을 좀 할께요.

    우선 거시적으로 그림(?)을 봅시다. 아주 대략적인 그림이므로

    상세한것은 책을 보시길 바랍니다.



    user<-->DataConrol<-->DataSource<-->DataSet<-->BDE/SQL Link<-->물리DB



    그림 멋있죠? 하하

    그림에서 알 수 있듯이 DataControl는 사용자와의 인터페이스 컴포넌트라고

    생각하시면 됩니다. 그리고, DataSet에는 3가지가 있습니다.

    TQuery, TTable, TStoredProc.

    우리가 쿼리를 던지면 그에 해당하는 데이터를 DB에 접속해서 가져요조.

    여기서 쿼리와 DB사이의 매개체 역할을 하는것이 BDE랍니다.

    그런데, Table에는 TableName이 있죠.

    즉,Table컴포넌트에는 쿼리를 던질 수 있는 기능이 없습니다.

    단지 Filter기능이 있어서 데이터를 가져올때 자신이 원하는 레코드를

    부분 선택해서 가져올 수는 있습니다.

    그리고 Query컴포넌트에는 TableName속성이 없죠?

    대신에 Query컴포넌트에는 SQL속성에서 자신이 원하는 테이블을

    지정해서 쿼리를 던지거나 아니면 코딩상에서 원하는 테이블을 지정해서

    쿼리를 던지죠.

    즉, Query컴포넌트가 훨씬 더 유동적이죠.

    한마디로 Table컴포넌트는 한개의 테이블만을 지정하게 되어있어요.

    물론 Master, Slave관계를 고려치 않는다면...

    대신에 Query컴포넌트는 말그래로 여러개의 테이블을 조인하거나,

    아니면 한개의 테이블에 접근하되, 쿼리를 던지라는 의미이죠.



    그리고, DatabaseName이라는것은 사용자가 접근하는 DB에대한

    가상적 이름이라고 생각하면 되요.

    가령, 서버DB를 쓴다면 반드시 앨리어스가 필요해요.

    DB공간을 분할해서 각각의 공간에 여러 앨리어스를 주어서 여러 사용자에게

    접근 및 공간을 허용하는 것이죠.

    로컬DB인경우에는 앨리어스나 디렉토리지정으로 접근해요.

    이러한 앨리어스나 디렉토리경로가 바로 DataBaseName이 되는 것이죠.

    즉, 사용자가 접근하고자하는 DB에따라 DataBaseName속성이

    만들어지고, 역으로 DataBaseName속성에따라 접근하는

    DB가 결정되는 것입니다.

    가령, 자신을 누군가가 부른다고 합시다.

    생김새, 모양새, 성격, 사고방식등등을 일일이 열거하면서

    상대를 부를수는 없잔아요.

    그냥 통틀어서 대표격으로 상대방이름을 부른다면 자신을 부른다는것을

    알잖아요.

    바로 이러한 특성이 DataBaseName속성입니다.

    즉, DataBaseName이 가지는 값은 해당DB에대한 각종 정보를

    추상적으로 대표한다고 생각하시면 됩니다.



    그리구, 위의 에러는 어려운 에러가 아닙니다.

    그것은 그렇게 코딩을 했다해서 발생하는 에러는 아닙니다.

    여러경우에 그렇게 발생하는데, 그것은 봐야겠군요.

    단순한 syntax에러에 불과해요.



    그리고, DatabaseName속성을 한번 바꿨다고 하는데,

    무슨 의미인지...



    그럼 도움이 되셨으면 합니다.



  • Profile
    순용 1999.09.21 18:29
    오이 wrote:

    > 안녕하세요 ^^; 초보~

    >

    > query component와 Data Source component와 DB Grid만을 가지고 간단한

    >

    > 프로그래밍을 하는데요 Query component는 Table component처럼 TableName

    >

    > 같은걸 제가 못 찾았거든요 DatabaseName을 한번 병경했더니 DB Grid에

    >

    > 자료가 나타나지 않았습니다. 왜그까? ^^; 이런 관계의 설명 부탁 드리고요

    >

    > 또 한가지 실행시 SQL 문장 사용하기 실습을 하는데요 Query1.Active :=

    >

    > False; 했더니 Declaration expected but identifier "Query1" found라는

    >

    > 에러가 생기는데요 쩝~ 왜 그러는지 잘 모르겠어요 가르쳐 주세요 ^^;

    >

    > 부탁~ 꾸벅~!

    Query로 는 Sql에 다음과 같이 씁니다.



    1. 화일의 전체 내용을 출력하고 싶은경우

    select * from "화일명.확장자"

    2. 조건에 맞는 내용을 출력하고 싶은경우

    select * from "화일명.확장자" where 조건

    3. 실행중 조건을 바꿀 경우



    with query1 do

    begin

    close;

    sql.Clear; //반드시 써야함

    sql.add ('select * from "자료.dbf"');

    sql.add('where 조건');

    open;

    end;

    4. 조건문 사용법은 따로 배우싶시오.