Q&A

  • DB 인덱스화일 동적으로 생성은 어떻게???
파라독스로 만들어진 DB 화일이 있습니다.

그런데 인덱스 화일을 처음에 만들지 안고.

실행시 동적으로 만들어서

검색에 적용하고 싶은데 어떻게 해야 하는지요?

DB 는 처음 접해보아서..정말 답답하군요..



이제 겨우...

db 화일 선택해서.. db그리드에 뿌리는데까지만 성공을 했내요..

검색을 하려면 인덱스를 생성해야 한다던데..

처음 DB 만들때 db데스크탑에서 만드는 방법말고 동적으루도

만들수 잇어 보이는데...어떻게 만들고.또 만든 인덱스를 어떻게 적용하는지

간단한 셈플 어디 없을까요??..



2  COMMENTS
  • Profile
    임형호 2000.07.15 07:20
    이현신 wrote:

    > 파라독스로 만들어진 DB 화일이 있습니다.

    > 그런데 인덱스 화일을 처음에 만들지 안고.

    > 실행시 동적으로 만들어서

    > 검색에 적용하고 싶은데 어떻게 해야 하는지요?

    > DB 는 처음 접해보아서..정말 답답하군요..

    >

    > 이제 겨우...

    > db 화일 선택해서.. db그리드에 뿌리는데까지만 성공을 했내요..

    > 검색을 하려면 인덱스를 생성해야 한다던데..

    > 처음 DB 만들때 db데스크탑에서 만드는 방법말고 동적으루도

    > 만들수 잇어 보이는데...어떻게 만들고.또 만든 인덱스를 어떻게 적용하는지

    > 간단한 셈플 어디 없을까요??..

    >

    인덱스를 동적으로 생성하는 것은 자료실이나 팁모아에 가보시면 있을겁니다.

    해답을 알려드리지 못해 죄송한데요. 아래분이 말씀하신 내용을 보고 동감이 가는 내용이라 몇자적습니다. 보통 인덱스는 자료가 많을때 보다빨리 데이타에 접근하기 위해 사용합니다.

    그러니까... DB설계를 할땜 이미 프라이머리키나 세컨더리인덱스는 설정을 하고 작업을 하거든요. 꼭 나중에 세컨더리 인덱스를 설정해야되는 중요한 이유라도 있는건지요?

    그것이 아니라면... 굳이 그렇게 구성하실 필요성이 없을것 같네요. 물론 공부하기 위해서라면 얘기가 다르지만요.

    그리구 아시겠지만 인덱스가 너무 많으면 도리어 DB를 제어하는 속도가 느려진답니다.

    입력,수정, 삭제시 다시 인덱스를 구성하는 시간때문이죠.

    그리고 델파이에서 인덱스를 적용하는부분은요. table 컴포넌트에서 findkey, findnearest, goto, gotonearest 로 검색할때는 해당 필드가 반드시 인덱스로 잡혀있어야 됩니다. 그리고 앞서서 말씀드렸지만 자료가 많을때에는 SQL문을 사용하여 검색할때에 인덱스가 잡혀있나 안잡혀있는가에 따라 속도차가 나는걸로 압니다.





    아래구문은 전에 Q&A에 있는 내용입니다. 그대로 복사해다 옮겨놓았습니다.

    김영대님께서 답변하신 내용이더군요. 찾으시는 자료인것 같아서요.

    그리고 궁금한것을 Q&A에서 검색해보시는것도 하나의 좋은 습관인것 같습니다.

    내 고통이 다른 사람의 고통인경우가 많더라구요. 그럼 즐코하세요. 이만.





    김석수 wrote:

    > 먼저 지난번에 답장 주신 임형호님, 안재현님 대단히 고맙습니다.

    > 데이타베이스 연결된 DBGrid 의 컬럼헤드 기준으로 정렬이 필요합니다.

    >

    > TTable 정렬을 위해서는 먼저 인덱스 가 필요하다는 결론이 얻어지는군요.

    > IndexFieldNames 를 사용할때 사전에 무슨 조치를 취하지 않아도 되는지요?

    > 전에 한번 하니까 에러가 나던데요.

    > 인덱스 파일이 필요하면 만드는 방법 부터 필요합니다.

    > 완전초보 이므로 상세하게 설명 부탁 드립니다.

    >

    > procedure TForm1.DBGrid1TitleClick(Column: TColumn);

    > begin

    > Table1.IndexFieldNames := DBGrid1.ColumeHeader;

    > {? 좀 이상하군요. 여기서 어떻게 하나요?

    > 그러니까 정렬 기준이 컬럼헤드의 필드명이 되게 하는 것이지요}

    > end;

    >

    > 또하나 [질문]

    > Table 정렬 은 되는데,

    > DataSource 를 이용하여 정렬도 될 수 있을까요 ?

    > 되면 같은 결과가 나오겠지요. 어떤것이 더 효율적인가요 ?



    아래 예제는 테스트한 예제입니다

    테스트는 DBDEMOS 로 했습니다



    동작은 DBGrid의 Title를 클릭하면 그 Title 의 필드로

    내림차순 sort를 합니다



    동작원리는 폼 생성시 그 테이블에 동적으로 index를 만드는 것입니다

    주의할것은 지정한 Table에 있는 모든 필드에 대해 각각 하나씩

    index가 생성되므로 table space를 낭비할 수 있으므로

    아래 소르를 보시고 특정 필드만 AddIndex하도록 고처서 사용하세요

    SQL-based 서버는 테스트 안해봐서 잘 될 지 모르겠습니다...



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    Grids, DBGrids, Db, DBTables;



    type

    TForm1 = class(TForm)

    Table1: TTable;

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    procedure FormCreate(Sender: TObject);

    procedure DBGrid1TitleClick(Column: TColumn);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    var

    i: Integer;

    begin

    Table1.Exclusive := True; // Paradox or dBASE table 인 경우만 해당

    Table1.Active := True;

    for i := 1 to DBGrid1.Columns.Count do

    begin

    try

    // table의 인덱스를 동적으로 만든다

    Table1.AddIndex(DBGrid1.Columns[i].FieldName, // index name

    DBGrid1.Columns[i].FieldName, // index field names

    [ixDescending]); // 내림차순 순서를 준다

    except // Blob 필드는 except 발생되어 인덱스생성 안됨

    ;

    end;

    end;



    Table1.Active := False;

    Table1.Exclusive := False;

    Table1.Active := True;

    end;



    procedure TForm1.DBGrid1TitleClick(Column: TColumn);

    begin

    Table1.IndexName := Column.FieldName;

    end;



    end.





  • Profile
    성호종 2000.07.15 02:31
    이현신 wrote:

    검색을 하려면 DB가 필요한 것이 아니고요

    검색의 Performance를 향상시키기 위해서 INDEX를 잡습니다.

    그런데.... paradox라면 DB의 용량이 그다지 크지 않을것 같은데..

    구지 INDEX는 필요없다고 생각이 되네요... primary key만 있으면

    용량이 그다지 크지 않은 DB에서는 INDEX가 많은 성능을 발휘하지 못합니다.





    > 파라독스로 만들어진 DB 화일이 있습니다.

    > 그런데 인덱스 화일을 처음에 만들지 안고.

    > 실행시 동적으로 만들어서

    > 검색에 적용하고 싶은데 어떻게 해야 하는지요?

    > DB 는 처음 접해보아서..정말 답답하군요..

    >

    > 이제 겨우...

    > db 화일 선택해서.. db그리드에 뿌리는데까지만 성공을 했내요..

    > 검색을 하려면 인덱스를 생성해야 한다던데..

    > 처음 DB 만들때 db데스크탑에서 만드는 방법말고 동적으루도

    > 만들수 잇어 보이는데...어떻게 만들고.또 만든 인덱스를 어떻게 적용하는지

    > 간단한 셈플 어디 없을까요??..

    >

    • 선해석
    • 2000.07.15 08:07
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 성호종
      2000.07.15 09:39
      선해석 wrote: 만약 서버와의 연결이 느리거나 끊어진다면 DB의 session이 죽은것입니다. query의 결과값...
    • 김일영
      2000.07.15 09:34
      자세한건 잘 모르겠지만... Exception이 발생하는 상황이므로 예외처리문으로 처리하면 되겠죠... 대답이...
    • 선해석
      2000.07.15 09:55
      김일영 wrote: > 자세한건 잘 모르겠지만... > Exception이 발생하는 상황이므로 예외처리문으로 처리하...
    • 안젤726
    • 2000.07.15 07:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 돌멩이
      2000.07.15 19:41
      안젤726 wrote: > BDE만으로 오라클을 접속할 수 있는지 알고 싶습니다. > 배포화일에 BDE만을 가지고 오...
    • 아세만
      2000.07.15 20:31
      돌멩이 wrote: > 안젤726 wrote: > > BDE만으로 오라클을 접속할 수 있는지 알고 싶습니다. > > 배포화...
    • 초보
    • 2000.07.15 07:03
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.07.15 08:16
      안녕하세여.. 타락임다..^^ 제가 팁모아에 올려놨습니다.. 타락천사.... 초보 wrote: > 많은 도...
    • 초보
      2000.07.15 09:12
      타락천사 wrote: > 안녕하세여.. 타락임다..^^ > > 제가 팁모아에 올려놨습니다.. > > 타락천사.......
    • 이재식
      2000.07.15 07:48
      이재식 Wrote : 안녕하세요? 간단한 해결방법은 테이블이 아닌 쿼리를 쓰시면 됩니다. 테이블 컴포...
    • 성호종
      2000.07.15 22:54
      천향신공 wrote: 쓰셔도 무방할겁니다. 왜냐면 제가 작년에 Windows2000영문BetaServer에서 작업을 해서 ...
    • 초보
    • 2001.03.28 11:22
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김일영
    • 2000.07.15 06:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김일영
      2000.07.15 06:41
      제 답을 제가 하다니... 하도 별의별걸 다 해보다가 정말 뜻밖의 우연으로 알아낸건데... ReadString('')...
    • 권오정
    • 2000.07.15 05:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정웅기
      2000.07.15 18:36
      권오정 wrote: > MDImain에서 MDIchild를 호출할때 다음과 같은문장을 넣어 놓았습니다 > > Form1...
    • 선해석
    • 2000.07.15 05:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.07.15 07:11
      선해석 wrote: > BDE error $000F 라는 메세지가 갑자기 나타나네요. > > 별 손댄것이 없는데 말이죠.....
    • heimdal
    • 2000.07.15 05:44
    • 4 COMMENTS
    • /
    • 0 LIKES
    • hugehead
      2000.07.15 07:22
      만약에 combobox 목록에 보여주어야 할 날짜가 db에서 읽어서 보여주어야 한다면 TDBLookupComboBox를 쓰세...
    • 타락천사
      2000.07.15 06:08
      안녕하세여.. 타락임다..^^ 제가 알기론 DBComboBox의 Items에 넣을려는 스트링 리스트를 넣어 줘야 해...
    • heimdal
      2000.07.15 07:18
      타락천사 wrote: > 안녕하세여.. 타락임다..^^ > > 제가 알기론 DBComboBox의 Items에 넣을려는 스트링...
    • 타락천사
      2000.07.15 08:20
      안녕하세여. 타락임다... 콤보박스 사용법을 모르는군여.. 콤보박스 에디터에 보이는건 ComboBox.Tex...
    • 장권진
    • 2000.07.15 03:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2000.07.15 06:05
      서버소켓의 알맞는 이벤트에 그냥 프로그래밍 하세요. 알아서 쓰레드로 처리해 줍니다. ^^ 장권진 wr...
    • 어린왕자
      2000.07.19 03:58
      영원한 델초보 어린왕자라구 합니다..대답은 아니구요.. DataRequest가 뭡니까요? 아마 에러가 한글단어...
    • hugehead
      2000.07.19 23:55
      TADOQuery.SQL에 넣는 것 같이 문제가 간단하지는 않습니다. 지금 MIDAS를 이용하는 환경이거든요. Multi...
    • 타락천사
      2000.07.15 04:37
      안녕하세여..타락임다..^^ 게시판에 답변 안한다루 협박이 들어와서 놀래서 뛰어 왔슴다..^^;; ADOQu...
    • hugehead
      2000.07.15 08:53
      박효진씨 대신해서 답변드립니다. 문제는 이 ADOQuery가 Insert나 Update가 아닌 Select이라는 점입니다...
    • 최석기
      2000.07.15 03:46
      cell wrote: > Select MachCode, Count(MachCode) As MachCnt > From tbl_Repair > Group By MachCode ...
    • cell
      2000.07.15 04:31
      답변에 감사합니다만 그런식으로 하면 count한 값이 전혀 달라집니다. 즉 rownum이 3보다 작은 값에대한 ...
    • kciron
    • 2000.07.15 03:39
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.07.15 03:55
      안녕하세요. 최용일입니다. 오랜만에 뵙네요... 윈도우 미디어 플래이어의 소스는 아직 본적은 없는...
    • 하얀까마귀
      2000.07.15 20:36
      이거 여기저기서 자료 받아서 조금씩 보고 있는데.. 이거 장난이 아니네요.. 아무래도 최용일님이 ...
    • 최용일
      2000.07.15 22:24
      안녕하세요. 최용일입니다. 으허~ 어떻게 알았을까나? 메신저에 그런 기능이 있는가 보죠? 전 메신저를 ...
    • 김범석
    • 2000.07.15 03:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.07.15 04:40
      안녕하세여..타락임다..^^ 제가 팁모아 올린 글이 있거든여.. 거기서 바꿔주면 돼여..ㅠㅠ 글구 ...
    • 유레카
      2000.07.15 06:54
      TTable을 쓴 경우; with Tabel do begin Append; FieldByName('No').AsInteger := IntToStr(Edi...
    • 타락천사
      2000.07.15 04:42
      안녕하세여.. 타락임다..^^ DBEdit를 써보셨나여? DBEdit.Text 에 원하는 값을 넣으면 자동으로 선택...
    • 이현신
    • 2000.07.15 02:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2000.07.15 07:20
      이현신 wrote: > 파라독스로 만들어진 DB 화일이 있습니다. > 그런데 인덱스 화일을 처음에 만들지 안...
    • 성호종
      2000.07.15 02:31
      이현신 wrote: 검색을 하려면 DB가 필요한 것이 아니고요 검색의 Performance를 향상시키기 위해서 INDEX...