Q&A

  • 디비그리드에서...
제가 델파이 초짜라 이렇게 글을 올립니다.

디비그리드가 2개 있습니다.

첫번째 그리드는 필드가 2개뿐이고 상세내역이라는 버튼을 누르면 같은 내용이긴하지만 필드가 8개인 화면이 생성됩니다.

즉 첫번째꺼는 간단한 내용을 보는 화면이고 두번째꺼는 상세 내역을 보는 화면입니다.

여기서 첫번째그리드에서 2번째 데이타를 선택하고 상세내역버튼을 누르면 두번째 그리드화면에서 마우스가 첫번째와 똑같이 두번째를 가르치고 있어야합니다.

이거 어떻게 해야하나요?


3  COMMENTS
  • Profile
    KDDG_09 2003.05.09 13:28
    똑같은 데이터를 보여주는 필드갯수만 다르다고 하면
    그냥 2개의 DBGrid에 한개의 데이타 소스만 연결 시키면
    되겠네요

    Data Control (DBGrid, DBEdit, DBMemo....)은 단지 보여주
    는 역할만 할 뿐 실제적인 데이터의 내용및 현위치 등등의
    정보는 DataSet에서 관장하죠
    Data Control 과 DataSet 을 연결시켜주는 놈이
    DataSource 이구요

    그러니 1개의 DataSet (쿼리, 또는 테이블 또는 스토어드프로시져)
    1개의 데이터소스로 하시고

    나머지 디비그리드는 2개가 되었든 100개가 되었든
    똑같은 데이타소스로 연결하시면
    항상 같은 포지션을 유지합니다.
    즉 100개중 1개의 디비그리드의 선택된 데이터를 변경해도
    나머지 99개의 디비그리드도 같은 데이터(레코드)로 이동됩니다.

    단 디비그리드에서 보여줄 컬럼만 조절하면 되겠네요

    그럼 즐코하세요...





  • Profile
    최창식 2003.05.08 02:47
    1. 테이블이 같은 경우
          -. 먼저 Data Module에 Table(Query도 상관없음)을 두개 생성
       -. Data Source도 두개 생성
       -. 각각의 TTable Component이름을 tblMater, tblDetail
          TDataSource Component이름을 srcMaster, srcDetail
       -. TTable Component의 TableName의 속성에 테이블명(여기서는
           MY_DATA라고 하져.) 지정
       -. 당연이 srcMater의 DataSet 속성을 tblMaster
                    srcDetail의 DataSet 속성을 tblDetail로 지정..

       -. 여기서 가장 중요한 부분!!!
          tblDetail의 TTable Component 속성중에 MasterSource를 srcMaster로
          지정하세여.. 그리고 MasterFields속성을 ... 버턴을 누르면 Detail Fields,
          Master Fields 두개의 리스트 중 Primary Key를 서로 선택한다음 Add를
          누릅니다. 그럼 아래의 Joined Fields에 해당 내용이 나타나죠.. 그리고
          OK.. 여기까지 기본적인 Data Access 컴포넌트 설정이 끝납니다..

       -. 원하는 폼에 DB Grid를 두개를 생성합니다.
       -. 첫번째 DB Grid의 DataSource속성을 srcMaster로 지정합니다.
       -. 두번째 DB Grid의 DataSource속성을 srcDetail로 지정합니다.

       -. 참고로 데이타 소스에서 원하는 필드만 표시하는 방법은 아시죠?
          Master에는 기본정보만 표시되게 하고.. Detail에는 상세정보 필드만
          표시되게하면 모든 작업이 끝!!

    참고로 서로 다른 테이블인 경우(Master <-> Detail)에는 위에서 TTable 의 TableName 만 서로 다르게 지정하면 되겠죠!!
    그럼 즐코~
  • Profile
    김경록 2003.05.07 22:06
    DBGrid에 Query를 사용해서 연결하셨나여?
    아님.. Table?
    그것도 아니면...
    ADOQuery, ADODataSet???

    뭐로 DataGrid에 연결했는지 말씀하셨으면...

    우쨌든..

    DataGrid1을 첫번째 화면의 Grid로
    DataGrid2를 두번째 화면의 Grid로 가정하고 말씀드리져..
    또한, TQuery를 사용했다고 가정하고
    Query1은 DataGrid1에 연결..
    Query2는 DataGrid2에 연결 됐다고 가정하겠습니다.


    DataGrid1이 가르키고 있는 TQuery의 현재 Row에서
    각 Row와 구별할 수 있는 key 부분을 특정변수에 담아 놓습니다..
    (뭐 담아 놓지 않아도 되지만..)

    그런다음..

    두번째 Form Create 이벤트에

    Var
        ls_Key1, ls_Key2: String;
    Begein
         ls_Key1 := Query1.FieldByName('필드1').AsString;
         ls_Key2 := Query1.FieldByName('필드2').AsString;

         Query2.Open; //질의 내용은 이미 작성되어져 있다고 가정하져..
    //     Query2.Locate("필드1;필드2", VarArrayOf([ls_Key1, ls_Key2]) , [loPartialKey]); //요것은 똑같은 Row를 찾을때 해당 구분필드가 2개일때
    //     Query2.Locate('필드1", ls_Key1, [loPartialKey]); 요건 1개일때
    End;


    요렇게 하면.. 똑같은 위치에 가지여..
    아니면..
    질의(Query)내용을 첫번째 폼의 key로 찾아서 1개만 보여주는게 어때여?
    음.. 뭐 이렇게 하는게 안된다면.. 뭐 안되는거구..
    하여간 위처럼 하면 될꺼에염..
    테스트는 안해봤지만..
    의미는 아시겠쪄?
    Locate를 사용하라는 이야기입니다..
    제가 많이 써본 것이라서.. 아마 맞을 것입니다..
    Table, Query 모두 되는거니까여..
    Locate라는 함수는 한번 눈여겨 보시길..