Q&A

  • 레코드형 변수에서 값 가져오기.. 초보 질문
먼저 소스를 올리겠습니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  type                       --> 레코드형 선언
    AgentInfo = record
    AgentName : Array of String;
    AgentID   : Array of Integer;
    temp      : Integer;
  end;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
  var
  AgentData : AgentInfo;
  i         : Integer;
begin
  ADOConnection1.Connected := False;
  ADOConnection1.Connected := True;
  ADOQuery1.Active := False;
  ADOQuery1.Active := True;

ShowMessage(IntToStr(ADOQuery1.RecordCount));    --> 폼생성시 값을 보고... 제대로 나오는 값

  with AgentData do
  begin
    SetLength(AgentName,ADOQuery1.RecordCount);
    SetLength(AgentID,  ADOQuery1.RecordCount);
    temp := ADOQuery1.RecordCount;
    for i := 0 to ADOQuery1.RecordCount - 1 do
    begin
      AgentName[i] := ADOQuery1.FieldByName('AgentName').AsString;
      AgentID[i]   := ADOQuery1.FieldByName('AgentID').AsInteger;
    end;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
  var
  AgentData : AgentInfo;
  p : ^Integer;
begin
  p := @AgentData.temp;
ShowMessage(IntToStr(p^));

  With AgentData do
  begin
    ShowMessage(IntToStr(temp));      --> 버튼을 클릭했을경우에 값을 보고.... 요상 야릇한 값이 출력
  end;
end;

end.



폼을 생성했을때하고 버튼을 클릭했을때의 값이 서로 다릅니다.
이런식으로는 구현이 안되는 지요?
된다면 어떤 식으로 접근을 하는 알고 십습니다.

어떠한 조언도 감사합니다.
그럼 감사합니다. 꾸벅~~ (--)(__)
2  COMMENTS
  • Profile
    하병준 2003.07.29 21:34
    되도록이면

    type                       --> 레코드형 선언
        AgentInfo = record
        AgentName : Array of String;
        AgentID   : Array of Integer;
        temp      : Integer;
      end;

       TForm1 = class(TForm)
       Button1: TButton;

       private
      
       public
          test : AgentInfo;   <----- 여기다 어디에서 읽을수 있게 선언하세요.
       end;
      

    이렇게 선언하고



    값을 읽을때는

    showMessage(IntToStr(test.temp)); 하면 됩니다

    값을 입력할때는

      test.temp := 3; 이런식으로요....



  • Profile
    정광필 2003.07.29 22:03
    감사합니다.. ^0^
    해결했습니다.
    님을 델파이의 고수로 임명합니다~~~