Q&A

  • 함수사용하여 TStrings 만들기..
자주 쓰는 코드들을 프로그램이 실행될때.. String List로 만들어서

각각의 폼마다 불러쓰고싶어서 함수를 만들었습니다.(공통모듈에 만듬)

그런데 함수로 만들고 나서 변수값이 입력을 하는데 String List가 생성이

안되는 것 같아요. 엄밀히 말하면 함수안에서는 생성이되는데..

변수를 넣어서 함수에 들어가면 그 변수값으로 스트링리스트가 생성이 안되요.



일단 sky_name, sky_code:TStrings 라는 전역변수를 메인폼에 선언하고

폼생성시에..

sqls:='select sky_name, sky_code from sky';

prc_list(sqls, sky_name, sky_code);

이렇게 지정을 하고 불러오기로 했구요..

그함수는 아래와 같이 생겼습니다.



procedure prc_list(sqls:string; name,code:TStrings);

var

i : Integer;

begin

name := TstringList.Create;

code := TstringList.Create;

for i := 1 to row갯수 do

begin

name.add(첫번째칼럼값);

code.add(두번째칼럼값);

// showmessage(name[i-1]); <-- 실행결과 이부분은 작동합니다.

// showmessage([i-1]); <-- " "

end;

end;

end;



그리고 메인폼다음에 다른 폼을 생성하면서

콤보박스에 값을 넣어주려고..

combobox1.assign(sky_name);

combobox2.assign(sky_code);

이렇게 선언했는데요... nil 값을 넣을 수가 없다고 나오네요



함수는 잘돌아가는데.. 거기서 내가 지정한 변수대로

string list가 생성되지 않는 것같아요.



어디가 잘못되었는지 조언 부탁드립니다!!!! 급해요.. :(



1  COMMENTS
  • Profile
    배불뚝 2000.04.11 18:56
    김용구 wrote:

    > 자주 쓰는 코드들을 프로그램이 실행될때.. String List로 만들어서

    > 각각의 폼마다 불러쓰고싶어서 함수를 만들었습니다.(공통모듈에 만듬)

    > 그런데 함수로 만들고 나서 변수값이 입력을 하는데 String List가 생성이

    > 안되는 것 같아요. 엄밀히 말하면 함수안에서는 생성이되는데..

    > 변수를 넣어서 함수에 들어가면 그 변수값으로 스트링리스트가 생성이 안되요.

    >

    > 일단 sky_name, sky_code:TStrings 라는 전역변수를 메인폼에 선언하고

    > 폼생성시에..

    > sqls:='select sky_name, sky_code from sky';

    > prc_list(sqls, sky_name, sky_code);

    > 이렇게 지정을 하고 불러오기로 했구요..

    > 그함수는 아래와 같이 생겼습니다.

    >

    > procedure prc_list(sqls:string; name,code:TStrings);

    > var

    > i : Integer;

    > begin

    > name := TstringList.Create;

    > code := TstringList.Create;

    > for i := 1 to row갯수 do

    > begin

    > name.add(첫번째칼럼값);

    > code.add(두번째칼럼값);

    > // showmessage(name[i-1]); <-- 실행결과 이부분은 작동합니다.

    > // showmessage([i-1]); <-- " "

    > end;

    > end;

    > end;

    >

    > 그리고 메인폼다음에 다른 폼을 생성하면서

    > 콤보박스에 값을 넣어주려고..

    > combobox1.assign(sky_name);

    > combobox2.assign(sky_code);

    > 이렇게 선언했는데요... nil 값을 넣을 수가 없다고 나오네요

    >

    > 함수는 잘돌아가는데.. 거기서 내가 지정한 변수대로

    > string list가 생성되지 않는 것같아요.

    >

    > 어디가 잘못되었는지 조언 부탁드립니다!!!! 급해요.. :(

    >



    안녕하세요..

    제가 이해를 제대로 했으면요,

    전역변수를 선언하고 나서 정작 생성은 procedure안에서 했기 때문이 아닌가 싶습니다.

    그러니까 전역변수 sky_name, sky_code는 form create event내에서 prc_list를 호출하기 전에 생성해보세요. 그리고 콤보박스를 다른 폼에서 또 쓸 경우 메인에서 쿼리하여 만든 stringlist를 이용해서 item을 assign하는 것이 좋을 것 같아요..

    시간이 많은 관계로 제가 한번 짜봤습니다. 도움이 되시길..





    procedure TmainForm1.FormCreate(Sender: TObject);

    var

    i : integer;

    sqls : string;

    begin

    sky_name := Tstringlist.create;

    sqls := 'select sky_name, sky_code from sky';

    prc_list(sqls, sky_name, sky_code);

    combobox1.clear;

    combobox2.clear;

    for i := 0 to sky_name.count - 1 do

    begin

    combobox1.Items.add(sky_name.strings[i]);

    combobox2.Items.add(sky_code.strings[i]);

    end;

    end;



    procedure TmainForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    sky_name.Free;

    sky_code.Free;

    end;



    procedure TmainForm1.Button1Click(Sender: TObject);

    var

    i : integer;

    begin

    application.Createform(tform2,form2);//새로운 폼 생성

    form2.combobox1.clear;//sky_name을 이용하여 새로운 폼에 있는

    //combobox를 채운다.

    for i := 0 to rec-1 do

    form2.combobox1.Items.add(sky_name.strings[i]); end;

    end;



    procedure prc_list(sqls:string; name,code:TStringlist);

    begin

    //select....



    while not querytemp.eof do

    begin

    name.strings[i] := querytemp.fieldbyname('name');

    code.strings[i] := querytemp.fieldbyname('code');

    next;

    end;

    end;