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을 검색하는데 사용하는걸로 알고있습니다.
// 디렉토리 내의 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;