님이 말한대로 하니 건물명이 나오더군요...
설명이 모자란거 같아서 다시 설명해볼께요.. 귀찮아도 읽어주세요 (__)
일단... gun_me와 code1이라는BD화일이 각각 하나씩 있습니다..
헷갈릴까봐 약간 수정했구요.. ^^*
gun_me의 필드에는
s_no(번호),s_sp1(대분류),s_sp2(중분류),s_sp3(소분류), s_name(건물이름),
s_siid(시코드), s_guid(구코드), s_doid(동코드), s_bungi(번지), s_bungi1(번지1), s_phone(전화번호), s_x(위치x), s_y(위치y)
이렇게 있습니다.
code1의 필드에는
siid, guid, dogid, t_name
(시코드)(구코드)(동코드)(시,군,동명)
이렇게 있어요..
여기서 gun_me의(s_siid, s_guid, s_doid)와 code1(siid, guid, dogid)의 코드를 조인시켜 결과값을 따져서 code1의 시나 구,동의 이름(t_name)을 화면에 뿌리고 싶었거든요
그래서 쿼리(Qry_Coord)의 SQL란에는
Select B.t_name as si_name, A.s_siid,
C.t_name as gu_name, A.s_guid,
D.t_name as dong_name, A.s_doid
From gun_me A, code1 B, code1 C, code1 D
Where (A.s_siid = B.siid and B.guid = '00' and B.dogid = '00') and
(A.s_guid = C.guid and A.s_siid = C.siid and C.dogid = '00') and
(A.s_siid = D.siid and A.s_guid = D.guid and A.s_doid = D.dogid)
이렇게 조인문을 선언했어요
------------------------------------
siid guid dogid t_name
------------------------------------
13 00 00 대구광역시
13 11 00 남구
13 11 01 대명동
예를들어 gun_me의 s_siid, s_guid, s_doid가 각각 13, 11, 01이라면
조건식으로 따져서
시코드 13이고 구,동코드가 00이면 대구광역시..
시코드 13이고 구11이고 동이00이면 남구
시코드 13이고 구11이고 동이01이면 대명동
이렇게 뒤에 이름을 나타내고 싶어서 si_name, gu_name, dong_name로
나타냈습니다.
그래서 코딩한 내용이....
//========================================================
// 정보를 select한다
//========================================================
Procedure TCoordFrm.Selectinfo;
begin
with Qry_Coord do begin
Close;
SQL.Clear;
SQL.Add('Select s_no, s_sp1, s_sp2, s_sp3, s_name, s_siid,
SQL.Add(' s_guid, s_doid, s_bungi, ');
SQL.Add(' s_bungi1, s_phone,s_x, s_y ');
SQL.Add(' from gun_me ');
Open;
end; // with..
end;
*********> 위에서는 gun_me의 필드에서 값을 가져오게끔 했습니다.
//========================================================
// 바뀔때마다 데이터값을 화면에 보여준다...
//========================================================
procedure TCoordFrm.DataSource1DataChange(Sender: TObject; Field: TField);
begin
with Qry_Coord do begin
edt_me.text := FieldByName('s_no').AsString;
edt_name.text := FieldByName('s_name').AsString;
edt_gubncode1.text := FieldByName('s_sp1').AsString;
edt_gubncode2.text := FieldByName('s_sp2').AsString;
edt_gubncode3.text := FieldByName('s_sp3').AsString;
edt_sido.Text := FieldByName('si_name').AsString;
edt_gubn.Text := FieldByName('gu_name').AsString;
edt_dong.Text := FieldByName('dong_name').AsString;
edt_sidocode.text := FieldByName('s_siid').AsString;
edt_gubncode.text := FieldByName('s_guid').AsString;
edt_dongcode.text := FieldByName('s_doid').AsString;
edt_bungi1.text := FieldByName('s_bungi').AsString;
edt_bungi2.text := FieldByName('s_bungi1').AsString;
edt_phone.text := FieldByName('s_phone').AsString;
edt_coordX.text := InttoStr(FieldByName('s_x').AsInteger);
edt_coordY.text := InttoStr(FieldByName('s_y').AsInteger);
end;
end;
***********> 여기선 gun_me와 code1의 쿼리문(조인식)으로 인해
si_name, gu_name, dong_name이라고 적어줬습니다. edt_sidocode, gubncode, dongcode엔 원래의 코크값이 들어가게 했습니다.
님이 말한대로 s_name라고 적어서 실행시키니깐 edt_name의 란과 같은 값이 화면에 나타나네요.. edt_name란이 s_name라서 그런가 봐요...
어떻게 해야할지... 하루하루 막막하기만 하네요..
code1 테이블과 연결한 후
해당 시,구,동명을 얻고자 한다는것같군요
근데, Selectinfo에는 조인을 하지않고 gun_me만 읽고 있네요
님이 기술한 조인쿼리를 Qry_Coord에 기술하시고
Qry_Coord 컴포넌트를 더블클릭하면 필드를 추가하는 창이 나타납니다
필드를 모두 추가하세요
그럼 Qry_CoordT_Name, .. 이런식으로 필드가 생성될겁니다
참고로 쿼리콤포이름은 M_ 이런식으로 명명하면
M_TName ,, 이런 필드들이 되겠죠
그럼 DataSource1DataChange이벤트에서
edtDongName.Text := M_Dong_Name.Value;
등으로 코딩하시고...
규모가 크질수록 칼럼을 등록해서 작업하는게 여러모로 편리합니다.
허접초보 wrote:
> 님이 말한대로 하니 건물명이 나오더군요...
> 설명이 모자란거 같아서 다시 설명해볼께요.. 귀찮아도 읽어주세요 (__)
>
> 일단... gun_me와 code1이라는BD화일이 각각 하나씩 있습니다..
> 헷갈릴까봐 약간 수정했구요.. ^^*
>
> gun_me의 필드에는
> s_no(번호),s_sp1(대분류),s_sp2(중분류),s_sp3(소분류), s_name(건물이름),
> s_siid(시코드), s_guid(구코드), s_doid(동코드), s_bungi(번지), s_bungi1(번지1), s_phone(전화번호), s_x(위치x), s_y(위치y)
> 이렇게 있습니다.
>
> code1의 필드에는
> siid, guid, dogid, t_name
> (시코드)(구코드)(동코드)(시,군,동명)
> 이렇게 있어요..
>
> 여기서 gun_me의(s_siid, s_guid, s_doid)와 code1(siid, guid, dogid)의 코드를 조인시켜 결과값을 따져서 code1의 시나 구,동의 이름(t_name)을 화면에 뿌리고 싶었거든요
>
> 그래서 쿼리(Qry_Coord)의 SQL란에는
> Select B.t_name as si_name, A.s_siid,
> C.t_name as gu_name, A.s_guid,
> D.t_name as dong_name, A.s_doid
> From gun_me A, code1 B, code1 C, code1 D
> Where (A.s_siid = B.siid and B.guid = '00' and B.dogid = '00') and
> (A.s_guid = C.guid and A.s_siid = C.siid and C.dogid = '00') and
> (A.s_siid = D.siid and A.s_guid = D.guid and A.s_doid = D.dogid)
> 이렇게 조인문을 선언했어요
>
> ------------------------------------
> siid guid dogid t_name
> ------------------------------------
> 13 00 00 대구광역시
> 13 11 00 남구
> 13 11 01 대명동
>
> 예를들어 gun_me의 s_siid, s_guid, s_doid가 각각 13, 11, 01이라면
> 조건식으로 따져서
> 시코드 13이고 구,동코드가 00이면 대구광역시..
> 시코드 13이고 구11이고 동이00이면 남구
> 시코드 13이고 구11이고 동이01이면 대명동
>
> 이렇게 뒤에 이름을 나타내고 싶어서 si_name, gu_name, dong_name로
> 나타냈습니다.
>
> 그래서 코딩한 내용이....
> //========================================================
> // 정보를 select한다
> //========================================================
> Procedure TCoordFrm.Selectinfo;
> begin
>
> with Qry_Coord do begin
> Close;
> SQL.Clear;
>
> SQL.Add('Select s_no, s_sp1, s_sp2, s_sp3, s_name, s_siid,
> SQL.Add(' s_guid, s_doid, s_bungi, ');
> SQL.Add(' s_bungi1, s_phone,s_x, s_y ');
> SQL.Add(' from gun_me ');
>
> Open;
> end; // with..
> end;
>
> *********> 위에서는 gun_me의 필드에서 값을 가져오게끔 했습니다.
>
> //========================================================
> // 바뀔때마다 데이터값을 화면에 보여준다...
> //========================================================
> procedure TCoordFrm.DataSource1DataChange(Sender: TObject; Field: TField);
> begin
> with Qry_Coord do begin
> edt_me.text := FieldByName('s_no').AsString;
> edt_name.text := FieldByName('s_name').AsString;
> edt_gubncode1.text := FieldByName('s_sp1').AsString;
> edt_gubncode2.text := FieldByName('s_sp2').AsString;
> edt_gubncode3.text := FieldByName('s_sp3').AsString;
> edt_sido.Text := FieldByName('si_name').AsString;
> edt_gubn.Text := FieldByName('gu_name').AsString;
> edt_dong.Text := FieldByName('dong_name').AsString;
> edt_sidocode.text := FieldByName('s_siid').AsString;
> edt_gubncode.text := FieldByName('s_guid').AsString;
> edt_dongcode.text := FieldByName('s_doid').AsString;
> edt_bungi1.text := FieldByName('s_bungi').AsString;
> edt_bungi2.text := FieldByName('s_bungi1').AsString;
> edt_phone.text := FieldByName('s_phone').AsString;
> edt_coordX.text := InttoStr(FieldByName('s_x').AsInteger);
> edt_coordY.text := InttoStr(FieldByName('s_y').AsInteger);
> end;
> end;
>
> ***********> 여기선 gun_me와 code1의 쿼리문(조인식)으로 인해
> si_name, gu_name, dong_name이라고 적어줬습니다. edt_sidocode, gubncode, dongcode엔 원래의 코크값이 들어가게 했습니다.
>
> 님이 말한대로 s_name라고 적어서 실행시키니깐 edt_name의 란과 같은 값이 화면에 나타나네요.. edt_name란이 s_name라서 그런가 봐요...
>
> 어떻게 해야할지... 하루하루 막막하기만 하네요..
>