자주 쓰는 코드들을 프로그램이 실행될때.. 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가 생성되지 않는 것같아요.
어디가 잘못되었는지 조언 부탁드립니다!!!! 급해요.. :(
> 자주 쓰는 코드들을 프로그램이 실행될때.. 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;