Q&A

  • ADO 연결시 에러문제입니다
다음의 프로시저가 수행되어 질의를 수행하고

procedure TForm1.btnSearchPackageClick(Sender: TObject);
var i, j : Integer;
begin
    with ADOQuery1 do
    begin
        if Active then Active := false;
        SQL.Clear;
        SQL.Add('select mdno, mdfileid, mdlang, mdchrcode, hrlevcode, hrlevname, mddate, mdname, mdver from mdtbl');
        SQL.Add(' where mdno in (select mdno from dstbl where dsno in(select dsno from cttbl where title like ''%'+ eTitle.Text + '%''))');
        SQL.Add(' order by mdno');

        Active := true;

        first;
        if Recordcount = 0 then
        begin
            MessageDlg('조회결과가 없습니다', mtConfirmation, mbOKCancel, 0);
            exit;
        end;
        sgMetaList.RowCount := RecordCount + 1;

        i := 0;
        while Eof = false do
        begin
            for j := 0 to 8 do
            begin
                    sgMetaList.Cells[j, i + 1] := Fields[j].AsString;
            end;
            Next;
            i := i+1;
        end;

     end;
  end;


다음 프로시저를 수행할때  Active := false부분에서 exception이 발생합니다
exception의 내용은
Either BOF or EOF is True, or the current record has been deleted. Requested operaion requires a current record
입니다
왜 이런 일이 발생하는지 모르겠습니다
고수님들의 조언 바랍니다
procedure TForm1.sgMetaListDblClick(Sender: TObject);
var i : Integer;
begin
    with ADOQuery1 do
    begin
          if Active then
        begin;
              Active := false;
          end;
        SQL.Clear;
        SQL.Add('select mdno, mdfileid, mdlang, mdchrcode, hrlevcode, hrlevname, mddate, mdname, mdver from mdtbl');
        SQL.Add(' where mdno=' + sgMetaList.Cells[0, sgMetaList.Row]);
        Active := true;
        first;
        if Recordcount = 0 then
        begin
            MessageDlg('조회결과가 없습니다', mtConfirmation, mbOKCancel, 0);
            exit;
        end;

...
    end;

end;
3  COMMENTS
  • Profile
    Runo 2002.03.22 19:43
    만약 ADOQuery1 이 조회전용이라면
    "LockType" 프로퍼티를 "ltReadOnly"로 하고 실행해보세여.

  • Profile
    최상길 2002.03.22 23:52
    말씀하신대로 하니 잘되네요
    근데 왜 이런 문제가 생기나요?
    그리고 Read/Write 가능하게 하려면 어떻게 해야 하는지 궁금합니다.


  • Profile
    Runo 2002.03.23 06:06
    저도 정확히는 모릅니다.
    그냥 델파이 ADO 콤포넌트 버그라는것만 알고 있습니다.
    Read전용으로 사용할땐 ltReadOnly로 하시고
    Write전용으로 사용할땐 ltOptimistic로 사용하시면 됩니다.
    도움이 되시길...