Q&A

  • RecordCount의 값을 가져오지 못합니다.
//다음과 값이 쿼리문을 날린 다음 디렉토리 전체의 내용을 그리드에
//보여주고자 합니다.
//계속 recordcount의 값이 -1로 나옵니다.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids_ts, TSGrid, DB, DBTables;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Database1: TDatabase;
    Query1: TQuery;
    grd: TtsGrid;
    Button1: TButton;
    Edit1: TEdit;
    Table1: TTable;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i :integer;
begin

  with Query1 do
    begin
    close;
    sql.Clear;
    sql.Add(' select * from ');
    sql.Add(' DIRECTORY');
    open;
    first;

    edit1.Text := intTostr(recordCount);//recordcount값을 표시하기 위해

    if not eof then
      begin
        for i :=1 to recordcount do
            begin//그리드에 결과 보여주기
            grd.Cell[1,i] := FieldByName('BOOK_NUM').AsInteger;
            grd.Cell[2,i] := FieldByName('TAG_CODE').AsString;
            grd.Cell[3,i] := FieldByName('START_POS').AsString;
            grd.Cell[4,i] := FieldByName('END_POS').AsString;
            grd.Cell[5,i] := FieldByName('DIRE_NOTE').AsString;
            end;
      end; //if not eof then
    end; //with Query1 do


end;

end.
3  COMMENTS
  • Profile
    전태술 2003.04.11 23:38
    제가 오라클DB로 할때 이런일이 있었는데요 보니까 필드의 크기가 128바이트이상인 필드를 SELECT할때는 RecordCount를 가져오지 못하더라고요
    방법은 SELECT한다음 last한다음에 first를 하면 RecordCount에 값이 제대로 들어가는걸로 기억합니다.

  • Profile
    김상완 2003.04.12 00:12
    감사합니다..어제부터 계속 문제였는데 ^^;

    근데 왜 필드가 128을 넘을 때 값이 잘못 들어가는지 아시나요?

    넘 궁금해서요~

    그리고 좀 건수가 많으면 'Invalid BLOB handle in record buffer'

    라는 에러메세지가 나옵니다.

    이럴 경우엔 어떻게 해결하는 것이 좋은지?

  • Profile
    초보지만 델사랑 2003.04.12 00:45
    저두 확실히는 잘 모르겠지만...
    BDE(?)에 한 번에 가져올수 있는 데이타량을 정해 주는 곳이 있거든요
    아마두 BLOB S TO CACHE가 아니면 BLOB SIZE에서 셋팅을 해주시면 되는 걸루 아는데 오래 전에 한것이라서..^^;