Q&A

  • 쿼리결과한값을화일명으로찾으려는데에러가납니다.
아래처럼 쿼리 해서 나온 ID에 TXT확장자를 붙여서 지정한 디렉토리 참조해서 화일찾고,생성날자를 참조 하려고,
아래처럼 작성 했는데, 뭐가 잘 못 되었는지 INDEX BOUNDS(1) 에러가 납니다. 초보라 이것저것 한참 생각해도 모르겠고..
고수님들 부탁 좀 드립니다.
쿼리하면 아래와 같은 결과를 보여 줍니다.
ID
CA25-001
CA25-002
CA25-003
CA25-004
CA25-005

qry := TStringList.Create();
qry.add('select distinct id from DB ');

AdoQry.Close;

        adoQry.SQL := qry;
        adoQry.Open ;

        If (not adoQry.IsEmpty) then
        begin
   // columns ...

            lstReport.Columns.Clear;
            For idx := 0 To adoQry.FieldCount-1 do
            begin
             with lstReport.Columns.Add do
             begin
            Caption := adoQry.Fields[idx].FieldName;
             end;
            end;

            lstReport.Columns[0].Width:=70;
            lstReport.Columns[1].Width:=75;

        end;

      lstReport.Clear;

        While (not adoQry.Eof) do
        begin
        tmp := lstReport.Items.Add;
        tmp.Caption := adoQry.Fields[0].AsString;

         dir1 := 'C:\';                 //디렉토리 지정
         dir2 := 'C:\Program files';    //디렉토리 지정
        
         For idx := 1 to adoQry.FieldCount-1 do

         fullFilePath := FileSearch(adoQry.Fields[idx].AsString+'.TXT', dir1);
          if fullFilePath = '' THEN
          fullFilePath := FileSearch(adoQry.Fields[idx].AsString+'.TXT', dir2);
         if fullFilePath = ''
         then
         tmp.SubItems.Add(fullFilePath+' not found')//화일이 없을때
         else
         tmp.SubItems.Add(fullFilePath+DateTimeToStr(FileDateToDateTime(FileAge(fullFilePath))));
         adoQry.Next;
        end;
        FreeAndNil(qry);
    finally
     adoQry.Close;
2  COMMENTS
  • Profile
    최용일 2009.10.28 22:05
    아래코드는 메모리릭을 발생시키는 코드입이다.
    adoQry.SQL := qry;
    아래와 같이 고치세요...
    adoQry.SQL.Text := qry.Text;
    다 끝나고 난후에 qry객체 해제시키구요...

    의심가는 코드들은 아래코드이네요... 브레이크포인트걸고 디버깅해보세요...
    Caption := adoQry.Fields[idx].FieldName;
    lstReport.Columns[1].Width:=75;
    fullFilePath := FileSearch(adoQry.Fields[idx].AsString+'.TXT', dir1);
    fullFilePath := FileSearch(adoQry.Fields[idx].AsString+'.TXT', dir2);
  • Profile
    최용일 2009.10.28 22:08
    아... 쿼리한 필드가 Id하나인데... 아래 for문에서 for idx := 1 부터시작하네요...
    Field의 index는 0부터시작합니다.
    아래 for문에서 1을 0으로 바꾸셔야 겠네요...