Q&A

  • [Q]쿼리 결과를 가지고 다시 쿼리할 경우....
쿼리한 결과 값(fieldbyname('a_1'))을 가지고

다른 쿼리문(where a_1 = "'+fieldbyname('a_1')+'")을 작성하려고 하니까



문제가 있는 것 같아 결과값을 저장할 변수를 선언한후

변수를 이용하여 다른 쿼리를 작성 하였는데...

잘 안되더라구요



with dm.qry1,dm.qry2 do begin

close;

sql.clear;

mysql := 'select * from a order by a_1'

sql.add(mysql);

open;

while not eof do

begin

node1 := tree1.items.add(nil,fieldbyname('a_2').asstring);

//sTmp: 결과값을 임시 저장 변수

sTmp := fieldbyname('a_1').asstring;

// 다른 쿼리 작성

close;

sql.clear;

mysql := 'select * from b where a_1 = "'+sTmp+'" order by b_1'

sql.add(mysql);

open;

while not eof do

begin

node2 := tree1.items.add(node1,fieldbyname('a_2').asstring);

next;

end;

//

next;

end;

end;



어떻게 해야 하나요.........



2  COMMENTS
  • Profile
    1999.09.30 20:25
    질문이 좀 불분명한것 같아서 확실히 대답하기 힘들군요.



    저 역시 with문 사용에 문제가 있을 것이라고 생각합니다.



    이 소스로 한번 실험해 보세요.



    var

    mysql : string;

    sTmp : string;

    node1, node2 : ttreenode;

    begin

    query1.SQL.Clear;

    mysql := 'select * from a order by a_1';

    query1.sql.Add(mysql);



    query1.open;



    while not query1.EOF do

    begin

    node1 := treeview1.Items.Add(nil, query1.fieldbyname('a_2').asstring);

    sTmp := query1.fieldbyname('a_1').asstring;



    mysql := 'select * from b where b.a_1 = '''+sTmp+''' order by b_1';



    query2.sql.clear;

    query2.sql.Add(mysql);

    query2.open;



    while not query2.eof do

    begin

    node2 := treeview1.items.addchild(node1, query2.fieldbyname('b_1').asstring);

    query2.next;

    end;

    query2.close;



    query1.next;

    end;

    end;



    원하시던 답변인지 모르겠군요.

    그럼 열심히 하세요...

  • Profile
    이재식 1999.09.30 19:05
    아마 에러는 없지만,

    원하는 결과값이 나올질 않지 않습니까?

    쿼리에도 그렇고 syntax에도 문제가 없습니다만,

    with구문에서 문제가 있는 것 같아요.



    (1) with obj1, obj2, ..., objn do statement

    위의 구문은 아래와 같은 구문으로 같습니다.

    (2) with obj1 do

    with obj2 do

    ...

    with objn do

    statement



    여기서 중요한것은 statement가 제일먼저 참조하는것이

    obj1이 아니라 objn, 즉 with맨끝에 있는 객체죠.



    귀하의 코딩을 보니까, 의도는 알겠는데요,

    with문에서 쿼리 컴포넌트를 일련식으로 쓰지 마시고,

    정확히 해당 컴포넌트의 쿼리 및 그 결과값을 참조할 수 있도록

    위의 (2)처럼 쓰시면 잘 되지 않을까 생각이 되네요.

    그럼, 도움이 되셨기를 바라면서...