Q&A

  • 쿼리 콤포넌트를 이용한 검색..?
안녕하세요 먼저 봐주셔서 감사하고요..

지금 제가 짜는 프로그램은 쿼리 콤포넌트를 써서 (sql)

쿼리를 하고 그 결과를 데아타 그리드에 보여주는 간단한 프로그램입니다.

거기에 검색 기능이 하나 추가 되야 하는데. 검색을 하면 그 내용만 나오는게

아니고 커서가 딱 맞는 데이타 위치로만 옮겨가면 되거든요..

MakeQuery.Locate('partno',VarArrayOf([PartBookNameSeek.Text],[loPartialKey]));

이렇게 했는데 에러가 납니다. MakeQuery 는 쿼리 컨포넌트고

sql 서버 연결된 알리아스를 하나 만들어서 바로 그 알리아스를 연결해서

사용하고 있거든요.

이럴경우 location을 쓰는게 맞는건지, 아님 다른 방법을 사용해야할지

도움 부탁드립니다.
4  COMMENTS
  • Profile
    어린왕자A 2002.05.10 03:31
    전 그냥 첨부터 next하면서 레코드를 하나씩 검색을 했습니다.

  • Profile
    신강섭 2002.05.10 02:40
    도움이 될런지 모르겠습니다.
    전에 관리프로그램을 만들다가 님과 비슷한 경우가 있어서여
    아래 소스는 어케되는 건가믄 우선 에디트박스하나랑 스트링그리드가
    있습니다.(우리회사에서는 리얼그리드를 사용해가지고요)
    1. 프로그램 동작은 일딴 폼이 생성될때 그리드에 전체내용을 뿌려주구여
    2. 그런다음 에디터박스에서 검색하고 싶은 내용을 입력합니다.
    3. 그러면 에디터박스의 OnChange()에서
       select 어쩌구저쩌구 where ... like ...   like 검색을 이용해서
    4. 그리드에서 해당되는 내용에다가 색칠을 하게됩니다.

    님께서 아래 소스를 좀 이용하시면 좋은 프로그램을 만드실꺼 같은데여...
    즐프하세요....

    procedure TForm1.FormCreate(Sender: TObject);
    begin
         with Query1 do
         begin
              Close;
              SQL.Clear;
              SQL.Text := 'select * from dbo_sugam';
              Open;

              Caption := IntToStr(RecordCount);

              First;
              while Not Eof do
              begin
                   RealGrid1.AddRow;
                   RealGrid1.Cells[0,RealGrid1.RowCount-1].AsString := FieldByName('suCode').AsString;
                   RealGrid1.Cells[1,RealGrid1.RowCount-1].AsString := FieldByName('sukname').AsString;
                   Application.ProcessMessages;
                   Next;
              end;
         end;
    end;

    procedure TForm1.Edit1Change(Sender: TObject);
    var
         Location : integer;
    begin
         with RealGrid1 do
         begin
              Location := Find(1, Edit1.Text, [wfoPartialKey]);
              if (Location >= 0) then
                  begin
                       Row  := Location;
                       xRow := Location;
                  end;
         end;
    end;

    procedure TForm1.RealGrid1DrawCell(AColumn: TwColumn; ARow: Integer;
      var Text: String; var BCol, FCol: TColor; var FStyle: TFontStyles);
    begin
         if (ARow = xRow) then BCol := $00408000;
    end;
  • Profile
    박연준 2002.05.10 03:27
    답변 해주셔서 감사합니다.

    그런데 좀 적용하기에 안 맞는듯.. 제가 지식이 부족한 탓이겠지만요,

    먼저 find 문구를 쓰면 정의 되지 않았다고 에러가 나오네요

    그리고 님이 적어주신 코드는 db 그리드 에선 그다지 효율적이지 못한듯

    한데요..

    다른 방법은 없을까요..?

  • Profile
    박연준 2002.05.10 05:13
    MakeQuery.Locate('partno',Trim(PartBookNameSeek.Text),[loPartialKey]);

    이렇게 한줄 써주니까 되네요.

    통밥으로 배운 실력이라 왜 되는지 안되는지도 모르겠네여

    어쨌든 감사..