Q&A

  • [질문이요]검색기능에 관한건데요,,봐주십시요.
SQL문을 써서 검색기능을 구현하다보니,

다음과 같은 문제에 봉착했습니다.

고수님들의 많은 답변 부탁드립니다.



질문)

현재 paradox형태의 db화일을 열고

그 db 화일내에서 sql의 WHERE를 이용해

이름을 검색할수 있는 기능은 되어있습니다만,,

만약,,

한 디렉토리를 지정해주고 그 디렉토리내에 존재하는

모든 db확장자를 가진 화일에서 이름을 검색할수 있도록 하려면

어떤 방법을 사용해야 하는지요...?



- 기존 방법은 OpenDialog 컴포넌트를 사용해 한 화일만 열게 됩니다.

- 그러나 위의 방법대로 하자면 특정 디렉토리내에 있는 db화일들을 차례로

한 화일씩 열어 검색하고 닫고 다른 화일을 열어 검색하는 과정이

필요한데 이것을 어떻게 구현하는지 궁금합니다.



관련소스는 다음과 같습니다.



function TFIDList.fnFindIndex(var sName:String):LongInt;

var

l_Index : LongInt;

i : integer;

begin

l_Index := 0;



with QIDName do begin

Active := False;

SQL.Clear;

SQL.Add('SELECT '+m_sTable+'."Index", '+m_sTable+'."Name"');

SQL.Add('FROM "'+m_sTable+'.DB" '+m_sTable);

SQL.Add('WHERE ('+m_sTable+'."Name" = "'+sName+'" )');

SQL.Add('GROUP BY');

SQL.Add(m_sTable+'."Index" , '+m_sTable+'."Name"');

Active := True;

if RecordCount>0 then begin

FirstlPatIndex := FieldByName('PatientIndex').AsInteger;

end;

Active := False;

end;

.

.

.

.

위의 예문에서 실제로 수정이 필요한 것은,,

특정 db화일이 저장되있는 m_sTable 변수값을

어떻게 바꾸어 주느냐가 제가 궁금한 점입니다.

(디렉토리 정해주고 그안에 있는 화일들이 차례로 m_sTable에 할당되어

fnFindIndex를 화일수 만큼 실행할 수 있도록 말이죠...)



또 이러한 과정을 통해 검색되어진 이름들을 어떤식으로 나열해줄지도

난감합니다.

p.s>

컴포넌트중 FindDialog 컴포넌트를 이용해서 db화일내의 이름검색을 하는것은 불가능 하죠?

FindDialog컴포넌트는 일반적으로 텍스트형태의 string을 검색하는데 사용하는걸로 알고있습니다.

4  COMMENTS
  • Profile
    이기현 2000.04.28 00:48
    /////////////////////////////////////////

    // 디렉토리 내의 File검색

    procedure TForm1.Button2Click(Sender: TObject);

    var

    Status: Integer;

    SearchRec: TSearchRec;

    begin

    Status := FindFirst('C:Program FilesBorlandDelphi 3DemosDATA*.Db', faAnyFile, SearchRec);

    try

    while Status = 0 do

    begin

    FileListBox.Items.Add(SearchRec.Name);

    Status := FindNext(SearchRec);

    end;

    finally

    FindClose(SearchRec);

    end;

    end;



    // TDatabase 내의 Table 검색

    procedure TForm1.Button3Click(Sender: TObject);

    var

    I: Integer;

    begin

    for I := 0 to Database1.DataSetCount - 1 do

    begin

    if Database1.DataSets[I] is TTable then

    FileListBox.Items.Add(Database1.DataSets[I].Name);

    end;

    end;



    // TDatabase 내의 Table 검색

    procedure TForm1.Button4Click(Sender: TObject);

    begin

    Database1.Session.GetTableNames('DBDEMOS', '*.db', True, False, FileListBox.Items);

    end;

  • Profile
    김태형 2000.04.26 22:04
    >

    > 질문)

    > 현재 paradox형태의 db화일을 열고

    > 그 db 화일내에서 sql의 WHERE를 이용해

    > 이름을 검색할수 있는 기능은 되어있습니다만,,

    > 만약,,

    > 한 디렉토리를 지정해주고 그 디렉토리내에 존재하는

    > 모든 db확장자를 가진 화일에서 이름을 검색할수 있도록 하려면

    > 어떤 방법을 사용해야 하는지요...?

    >



    > - 기존 방법은 OpenDialog 컴포넌트를 사용해 한 화일만 열게 됩니다.

    > - 그러나 위의 방법대로 하자면 특정 디렉토리내에 있는 db화일들을 차례로

    > 한 화일씩 열어 검색하고 닫고 다른 화일을 열어 검색하는 과정이

    > 필요한데 이것을 어떻게 구현하는지 궁금합니다.



    =>> 파라독스던지 어떤 데이타베이스 내에서 테이블을 몽땅 가져오는 Method가 있습니다. 다음과 같은 방식으로 쓰죠.



    Session1.GetTableNames('DB-Alias Name', '*.DB', True, False, TableList.Items);



    TSession에 대한 도움말을 열어보면 자세한 것을 알 수 있습니다. TableList는 리스트박스 컴포넌트입니다. 그 다음에 리스트박스에 있는 것에 대해서 모조리 검색을 해보면 되겠지요.



    그럼 이만..



  • Profile
    윤찬석 2000.04.28 02:46
    답변 감사합니다.

    다름이 아니라 GetTableNames Help를 보니,,

    이게 제가 원하는건지 확실히 모르겠어서 다시금 여쭙고자 합니다.

    전 db화일 검색이 필요한게 아니라

    db화일을 구성하는 field중 'Name' 라는 레코드에서 검색어와 일치하는 필드를 찾아내고자 하는데요,

    이 메소드로 구현이 가능한지요?

    결국 record를 검색하는데

    한 db화일이 아니라 모든 db화일내의 'Name' 레코드에서 검색하는 방법이 궁금한 것이거든요.



    김태형 wrote:

    > >

    > > 질문)

    > > 현재 paradox형태의 db화일을 열고

    > > 그 db 화일내에서 sql의 WHERE를 이용해

    > > 이름을 검색할수 있는 기능은 되어있습니다만,,

    > > 만약,,

    > > 한 디렉토리를 지정해주고 그 디렉토리내에 존재하는

    > > 모든 db확장자를 가진 화일에서 이름을 검색할수 있도록 하려면

    > > 어떤 방법을 사용해야 하는지요...?

    > >

    >

    > > - 기존 방법은 OpenDialog 컴포넌트를 사용해 한 화일만 열게 됩니다.

    > > - 그러나 위의 방법대로 하자면 특정 디렉토리내에 있는 db화일들을 차례로

    > > 한 화일씩 열어 검색하고 닫고 다른 화일을 열어 검색하는 과정이

    > > 필요한데 이것을 어떻게 구현하는지 궁금합니다.

    >

    > =>> 파라독스던지 어떤 데이타베이스 내에서 테이블을 몽땅 가져오는 Method가 있습니다. 다음과 같은 방식으로 쓰죠.

    >

    > Session1.GetTableNames('DB-Alias Name', '*.DB', True, False, TableList.Items);

    >

    > TSession에 대한 도움말을 열어보면 자세한 것을 알 수 있습니다. TableList는 리스트박스 컴포넌트입니다. 그 다음에 리스트박스에 있는 것에 대해서 모조리 검색을 해보면 되겠지요.

    >

    > 그럼 이만..

    >

  • Profile
    잠꾼 2000.06.17 07:26
    호. 문제 답이 다 나온거 같은 데엽..

    쩝.. 밑에 TableList.Items[..] 를 Sqldp Db 이름 으로 사용 해서 찾음 되져..

    글구 찾을때 마다 찾은 건 다른 Db로 밀어 넣구여..

    쩝..























    윤찬석 wrote:

    > 답변 감사합니다.

    > 다름이 아니라 GetTableNames Help를 보니,,

    > 이게 제가 원하는건지 확실히 모르겠어서 다시금 여쭙고자 합니다.

    > 전 db화일 검색이 필요한게 아니라

    > db화일을 구성하는 field중 'Name' 라는 레코드에서 검색어와 일치하는 필드를 찾아내고자 하는데요,

    > 이 메소드로 구현이 가능한지요?

    > 결국 record를 검색하는데

    > 한 db화일이 아니라 모든 db화일내의 'Name' 레코드에서 검색하는 방법이 궁금한 것이거든요.

    >

    > 김태형 wrote:

    > > >

    > > > 질문)

    > > > 현재 paradox형태의 db화일을 열고

    > > > 그 db 화일내에서 sql의 WHERE를 이용해

    > > > 이름을 검색할수 있는 기능은 되어있습니다만,,

    > > > 만약,,

    > > > 한 디렉토리를 지정해주고 그 디렉토리내에 존재하는

    > > > 모든 db확장자를 가진 화일에서 이름을 검색할수 있도록 하려면

    > > > 어떤 방법을 사용해야 하는지요...?

    > > >

    > >

    > > > - 기존 방법은 OpenDialog 컴포넌트를 사용해 한 화일만 열게 됩니다.

    > > > - 그러나 위의 방법대로 하자면 특정 디렉토리내에 있는 db화일들을 차례로

    > > > 한 화일씩 열어 검색하고 닫고 다른 화일을 열어 검색하는 과정이

    > > > 필요한데 이것을 어떻게 구현하는지 궁금합니다.

    > >

    > > =>> 파라독스던지 어떤 데이타베이스 내에서 테이블을 몽땅 가져오는 Method가 있습니다. 다음과 같은 방식으로 쓰죠.

    > >

    > > Session1.GetTableNames('DB-Alias Name', '*.DB', True, False, TableList.Items);

    > >

    > > TSession에 대한 도움말을 열어보면 자세한 것을 알 수 있습니다. TableList는 리스트박스 컴포넌트입니다. 그 다음에 리스트박스에 있는 것에 대해서 모조리 검색을 해보면 되겠지요.

    > >

    > > 그럼 이만..

    > >

    • 이기현
    • 2000.04.26 23:54
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 사발우성
      2000.04.27 00:58
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • 사발우성
      2000.04.27 00:22
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • 이기현
      2000.04.27 00:31
      // Crrsor:=10; 에서 에러가 나걸랑요 // 철자가 틀린가 같은데요. 저는 아무이상 없었요. // 또는 Missi...
    • 사발우성
      2000.04.27 00:13
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • xref
    • 2000.04.26 23:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 어린왕자
      2000.04.27 04:37
      xref wrote: > 델파이에 입문한지 얼마 되지 않습니다. 다름이 아니라 DB프로그램을 짰는데 > 컴파일후 ...
    • 이기현
      2000.04.27 01:55
      ////////////////////// 애니메이션 동우회 에서 물어 보세요. 사용하는 도구들을 많이 알려주것으로 보...
    • 고종일
      2000.04.27 02:48
      //프로시져입니다. procedure ComponentAlign(var myForm: TForm); var i : Integer; begin with myF...
    • 선희
      2000.04.27 03:51
      제 질문에 답변해주시고 이 문제를 함께 고민해 주시는 모든 분들께 감사드립니다... 저도 질문을 올려...
    • 최용일
      2000.04.27 04:17
      안녕하세요. 최용일입니다. TControl의 Font속성은 Protected모드로 접근이 불가능하지만 다음과 같은 ...
    • 선희
      2000.04.27 19:05
      안녕하세요, 선희입니다... 여러분의 도움으로 어제 올린 질문에 대한 해답을 모두 찾았습니다... 제...
    • 하얀노래
      2000.04.26 23:20
      안녕하세요 저도 예전에 프로젝트 진행중에 그런일이 있었거든요.. 1024로 백개가 넘는 모듈을 만들었...
    • killer
      2000.04.26 22:02
      성 일호 wrote: > NT server 4 에서 delphi 5 를 실행하면 component 가 딱 한개만 나타납니다. > Admini...
    • 성 일호
      2000.04.26 23:31
      권한설정에는 문제가 없습니다. 왜냐하면 처음에는 *.bpl 파일 접근권한에 문제가 있는줄 알고 권한을 바...
    • 윤찬석
    • 2000.04.26 20:02
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이기현
      2000.04.28 00:48
      ///////////////////////////////////////// // 디렉토리 내의 File검색 procedure TForm1.Button2Click(...
    • 김태형
      2000.04.26 22:04
      > > 질문) > 현재 paradox형태의 db화일을 열고 > 그 db 화일내에서 sql의 WHERE를 이용해 > 이름을 검...
    • 윤찬석
      2000.04.28 02:46
      답변 감사합니다. 다름이 아니라 GetTableNames Help를 보니,, 이게 제가 원하는건지 확실히 모르겠어서 ...
    • 잠꾼
      2000.06.17 07:26
      호. 문제 답이 다 나온거 같은 데엽.. 쩝.. 밑에 TableList.Items[..] 를 Sqldp Db 이름 으로 사용 해서 ...
    • 윤영균
    • 2000.04.26 19:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.27 04:23
      안녕하세요. 최용일입니다. 3.0이하는 한번도 안써봐서... 만약에 IMM유닛이 2.0에 있다면 아래의 방법...
    • parkisu
      2000.04.26 20:16
      윤영균 wrote: > >안녕하십니까 > > 한/영키 자동변환에 관한 TIP을 보면 각 COMPONENT에 IMEMODE가 있...
    • 강인규
      2000.04.26 20:00
      인스톨하는 경로에 data란 하위폴더 라면..... data 경로를 이렇게 써주시면 됩니다. 인스톨 위치에 ...
    • HART
      2000.04.26 18:53
      아래 검색을 location 이란는 문장으로 하지 말고. Sql 문장에서 검색하면 아래와 같은 문제를 없을 것 ...
    • nilriri
      2000.04.26 19:11
      뭔가 이상한것이... 아래와 같은 기능을 하는데 왜 table1과 datasource1이 등장을 하는지요??? 이렇...
    • techie
    • 2000.04.26 14:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • mad
    • 2000.04.26 12:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김일영
      2000.04.26 13:12
      mad님 좀 실망인데요. mad님을 도와주시는 분들이 여러 분 계신데 결과가 좋으면 아무런 말씀도 더 이상 ...
    • mad
      2000.04.26 23:59
      죄송합니다. 많은 분들이 답변을 해 주셨는데... 아무말도 않고 제가 나쁜 놈이죠.. 제가 질문을 해놓고 ...
    • 장지용
      2000.04.29 00:52
      동문서답하는건지 모르겠습니다만... 앞에 "0" 을 붙이면서 증가하시면 어떨까요??? function TForm.Ge...
    • 김일영
      2000.04.26 12:28
      가장 바람직한 방법은 DB에 Unique Constraint를 부여하는 것인데 어떤 DB를 어떻게 연결해서 쓰고 계신지...
    • 강인규
      2000.04.26 11:40
      여러가지 방법이 있겠지만 이런 방법도 하나의 예가 될 수 있겠네요. 신규입력 후 확인시에 검사만 한다...
    • 이기현
      2000.04.26 11:36
      //////////////////////////////////////////////////////// procedure TSearchDlg.SearchButtonClick(Sen...
    • 이기현
      2000.04.26 11:18
      ////////////////////////////// procedure TForm1.Button1Click(Sender: TObject); begin Table1.Emp...
    • 이기현
      2000.04.26 11:46
      procedure TForm3.SpeedButton1Click(Sender: TObject); var LicenseNo: LongInt; begin Table1.Op...
    • 이기현
      2000.04.26 11:13
      /////////////////////////////// procedure TForm3.SpeedButton1Click(Sender: TObject); begin Tabl...
    • mad
      2000.04.26 11:28
      제가 회원번호를 Alpha로 해서 그런지 디비의 레코드가 레코드/회원번호 1 1 2 11 3 ...
    • 이기현
      2000.04.27 00:58
      ////////////////////////////////////////////////////////////// Table에 (회원번호에 Secondary Indexe...