Q&A

  • DB에서 여러테이블에서 값을 읽어와서 보여줄때... 잘 안되네요.. 한번 봐 주세요..
안녕하세요...



3개의 테이블에서 각각의 필드값을 읽어와 stringgrid에 보여 줍니다.

근데, 각 필드 이름으로 값을 읽어오는 부분에서 에러가 납니다.

뭐가 잘못되었는지 한번 봐 주세요.....



------------------------------------------------------------------------



Query4.Close;

Query4.SQL.Add(' Select f_myid, f_friid, m_nickname, m_sex, j_connow from joins, friend, member where friend.f_myid = :pid');

Query4.sql.add(' and friend.f_friid = member.m_id and friend.f_friid = joins.j_id order by member.m_sex ');

Query4.ParamByName('pid').AsString := loginid;

Query4.Open;

Query4.First;

i := 1;

while not query4.eof do

begin

StringGrid5.Cells[0,i] := 'ON';



(*) StringGrid5.Cells[1,i] := query4.Fieldbyname('m_sex').AsString;

(*) Stringgrid5.cells[2,i] := query4.fieldbyname('f_friid').AsString;

(*) StringGrid5.Cells[3,i] := Query4.Fieldbyname('j_connow').AsString;



inc(StringGrid5.rowcount);

inc(i);

query4.next;

end;

Query4.Close;



------------------------------------------------------------



이상 소스 입니다...

(*) 표시 해 놓은 부분에서 에러가 납니다...!



1  COMMENTS
  • Profile
    지나가다가 2000.04.22 02:31
    이수정 wrote:

    > 안녕하세요...

    >

    > 3개의 테이블에서 각각의 필드값을 읽어와 stringgrid에 보여 줍니다.

    > 근데, 각 필드 이름으로 값을 읽어오는 부분에서 에러가 납니다.

    > 뭐가 잘못되었는지 한번 봐 주세요.....

    >

    > ------------------------------------------------------------------------

    >

    > Query4.Close;

    > Query4.SQL.Add(' Select f_myid, f_friid, m_nickname, m_sex, j_connow from joins, friend, member where friend.f_myid = :pid');

    > Query4.sql.add(' and friend.f_friid = member.m_id and friend.f_friid = joins.j_id order by member.m_sex ');

    > Query4.ParamByName('pid').AsString := loginid;

    > Query4.Open;

    > Query4.First;

    > i := 1;

    > while not query4.eof do

    > begin

    > StringGrid5.Cells[0,i] := 'ON';

    >

    > (*) StringGrid5.Cells[1,i] := query4.Fieldbyname('m_sex').AsString;

    > (*) Stringgrid5.cells[2,i] := query4.fieldbyname('f_friid').AsString;

    > (*) StringGrid5.Cells[3,i] := Query4.Fieldbyname('j_connow').AsString;

    >

    > inc(StringGrid5.rowcount);

    > inc(i);

    > query4.next;

    > end;

    > Query4.Close;

    >

    > ------------------------------------------------------------

    >

    > 이상 소스 입니다...

    > (*) 표시 해 놓은 부분에서 에러가 납니다...!

    >

    에러메세지를 정확히 보세요... 위의 내용으로는 어떤 에러인지 알수 없지만 이런 경우,

    에러의 경우는

    1. 데이터형이 맞지 않거나

    2. 위의 3 테이블의 열이 유일하지 않을때...(테이블 알리아스를 표시하지 않았으므로...)

    => m_sex 가 어느 테이블의 열인지, 그리고 3 테이블에서 유일한 필드인지...



    그리고 아래의 코딩이 보기 좋지 않을까요.

    with Query4 do

    begin

    close;

    sql.clear;

    sql.add('Select ');

    sql.add(' f_myid, f_friid, m_nickname, m_sex, j_connow ');

    sql.add('from ');

    sql.add(' joins a, -- 알리아스를 표시하시는 코딩습관이 좋습니다. ');

    sql.add(' friend b, ');

    sql.add(' member c ');

    sql.add('where ');

    sql.add(' friend.f_myid = :pid ');

    sql.add(' and friend.f_friid = member.m_id ');

    sql.add(' and friend.f_friid = joins.j_id ');

    sql.add('order by ');

    sql.add(' member.m_sex ');



    ParamByName('pid').AsString := loginid;



    First;



    i := 1;



    while not eof do

    begin

    StringGrid5.Cells[0,i] := 'ON';



    (*) StringGrid5.Cells[1,i] := Fieldbyname('m_sex').AsString;

    (*) Stringgrid5.cells[2,i] := fieldbyname('f_friid').AsString;

    (*) StringGrid5.Cells[3,i] := Fieldbyname('j_connow').AsString;



    inc(StringGrid5.rowcount);



    inc(i);

    next;

    end;



    Close;

    end;