Q&A

  • DBGrid 에서 Focus 알아내기.. 도와주세요
수거 많으십니다.



제가 지금 하고 있는것은 두개의 DBGrid를 가지고 두개의 table를 한 화면에서 사용하고 있습니다..



그런데 삭제를 하고 싶은데...



두개의 DBGrid 중에서 어느것을 삭제 하는지 어떻게 알아내는야 하는 겁니다..



예를 들자면..

A 라는 DBGrid 와 B 라는 DBGrid 가 있는데....

삭제 버튼을 눌렀을때....



DBGrid.삭제... 이런식으로 해주어야 하는데...





이놈이 A 인지 B 인지 어떻게 알아내줘...

제발 부탁합니다...

지금 거의 미쳐갑니다.



4  COMMENTS
  • Profile
    장지용 2001.12.12 02:55


    원하시는 답변인지 모르겠습니다.



    if ActiveControl = DBGrid1 then

    DBGrid1 데이터 삭제루틴

    else if ActiveControl = DBGrid2 then

    DBGrid2 데이터 삭제루틴;





    돌쇠 wrote:

    > 수거 많으십니다.

    >

    > 제가 지금 하고 있는것은 두개의 DBGrid를 가지고 두개의 table를 한 화면에서 사용하고 있습니다..

    >

    > 그런데 삭제를 하고 싶은데...

    >

    > 두개의 DBGrid 중에서 어느것을 삭제 하는지 어떻게 알아내는야 하는 겁니다..

    >

    > 예를 들자면..

    > A 라는 DBGrid 와 B 라는 DBGrid 가 있는데....

    > 삭제 버튼을 눌렀을때....

    >

    > DBGrid.삭제... 이런식으로 해주어야 하는데...

    >

    >

    > 이놈이 A 인지 B 인지 어떻게 알아내줘...

    > 제발 부탁합니다...

    > 지금 거의 미쳐갑니다.

    >

  • Profile
    돌쇠 2001.12.12 04:03
    먼저 감사드리구요...

    잘 되네요...

    근데 또 문제가 생겼네요...

    다름이 아니오라....



    제가 UpdateSQL1,UpdateSQL2 Query1, Query2 DataSouce1,DataSouce2 를 사용하구요

    모든 설정은 같고 Query2에서 Query1로 를 조인해서 사용합니다.

    ( Query2 의 DataSouce를 DataSouce1로 잡았습니다.)



    Delete 할때 Query1.Delete

    Query1.ApplyUpdates

    를 사용하면 잘됩니다.



    그런데

    Delete 할때 Query2.Delete

    Query2.ApplyUpdates

    를 할때는 Query2.ApplyUpdates <=== 요 문장에서 에러가 발생합니다.

    에러는 'Update Failde' 라고 나고요...



    전 DB를 이용해서 첨 사용하구 잘 몰라요..

    지금 위에 방법도 간신히 한것이구요..(참고로.. DBGrid에서 작업을 해야합니다 항상)



    왜 같은 문장인데 에러가 나는지.. 그리고 방법이 있다면 좀 부탁드립니다.

    오늘도 즐코하세요...







    장지용 wrote:

    >

    > 원하시는 답변인지 모르겠습니다.

    >

    > if ActiveControl = DBGrid1 then

    > DBGrid1 데이터 삭제루틴

    > else if ActiveControl = DBGrid2 then

    > DBGrid2 데이터 삭제루틴;

    >

    >

    > 돌쇠 wrote:

    > > 수거 많으십니다.

    > >

    > > 제가 지금 하고 있는것은 두개의 DBGrid를 가지고 두개의 table를 한 화면에서 사용하고 있습니다..

    > >

    > > 그런데 삭제를 하고 싶은데...

    > >

    > > 두개의 DBGrid 중에서 어느것을 삭제 하는지 어떻게 알아내는야 하는 겁니다..

    > >

    > > 예를 들자면..

    > > A 라는 DBGrid 와 B 라는 DBGrid 가 있는데....

    > > 삭제 버튼을 눌렀을때....

    > >

    > > DBGrid.삭제... 이런식으로 해주어야 하는데...

    > >

    > >

    > > 이놈이 A 인지 B 인지 어떻게 알아내줘...

    > > 제발 부탁합니다...

    > > 지금 거의 미쳐갑니다.

    > >

  • Profile
    장지용 2001.12.12 05:23


    "Query.DataSource" 보단 "Query.DatabaseName" 을 셋팅하면 어떨까 싶습니다.

    일단 제가 하는 방식을 적어봤습니다.

    참고가 되었으면 좋겠네요.

    수고하세요.



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

    [Database Component] 설정

    1. "Database" Component [DataAccess Tab] 를 추가한다.

    2. "Database" Component 를 더블클릭한다.

    3. "Driver name" 을 선택한다.

    4. "Name" 에 임의의 이름을 입력한다.

    5. "Defaults" Button 을 클릭한다.

    6. "Parameter overrides" 에 필요한 정보만 입력한다.

    7. "Login prompt" 체크를 해제한다.

    8. "Ok" 버튼을 클릭한다.

    9. "Connected" 를 "True" 로 바꾸어 설정이 제대로 되었는지 체크한다.

    10. "Connected" 를 다시 "False" 로 바꾼다.

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

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

    [Query Component] 설정

    1. "Query.DatabaseName" 에서 위에서 입력한 "Database name" (Database.DatabaseName)를 선택한다. ("Query.DataSource" 는 셋팅할 필요가 없다.)

    2. "Query.CashedUpdates" 를 "True" 로 셋팅한다.

    3. "Query.SQL" 에 질의문을 입력한다.

    4. "Query.UpdateObject" 에 원하는 "UpdateSQL" 연결한다.

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

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

    [UpdateSQL Component] 설정

    1. "UpdateSQL" Component 를 더블클릭한다.

    2. "Key Fields" 를 선택한다.

    3. "Generate SQL" 버튼을 클릭한다.

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

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

    [DataSource Component] 설정

    1. "DataSource.DataSet" 에 원하는 "Query" 셋팅한다.

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

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

    [DBGrid Component] 설정

    1. "DBGrid.DataSource" 에 원하는 "DataSource" 를 셋팅한다.

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



    [DBGrid] <---> [DataSource] <---> [Query] <---> [UpdateSQL]







    function TfrmModule.CommitRecord(qrName: TQuery): Boolean;

    begin

    with qrName do begin

    Database.StartTransaction;



    try

    ApplyUpdates;

    Database.Commit;

    Result := True;



    except

    Database.Rollback;

    Result := False;

    Exit;

    end;



    CommitUpdates;

    end;

    end;



    procedure TfrmTest.btDelClick(Sender: TObject);

    begin

    if MessageDlg('선택한 레코드를 삭제합니다.', mtWarning, mbOkCancel, 0) = mrCancel then

    Exit;



    ////////////////////////////////////

    if ActiveControl = DBGrid then begin

    with Query do begin

    Delete;

    if frmModule.CommitRecord(Query) then

    ShowMessage('삭제 성공')

    else

    ShowMessage('삭제 실패');

    end;



    ////////////////////////////////////

    end else if ActiveControl = ...



    end;









    돌쇠 wrote:

    > 먼저 감사드리구요...

    > 잘 되네요...

    > 근데 또 문제가 생겼네요...

    > 다름이 아니오라....

    >

    > 제가 UpdateSQL1,UpdateSQL2 Query1, Query2 DataSouce1,DataSouce2 를 사용하구요

    > 모든 설정은 같고 Query2에서 Query1로 를 조인해서 사용합니다.

    > ( Query2 의 DataSouce를 DataSouce1로 잡았습니다.)

    >

    > Delete 할때 Query1.Delete

    > Query1.ApplyUpdates

    > 를 사용하면 잘됩니다.

    >

    > 그런데

    > Delete 할때 Query2.Delete

    > Query2.ApplyUpdates

    > 를 할때는 Query2.ApplyUpdates <=== 요 문장에서 에러가 발생합니다.

    > 에러는 'Update Failde' 라고 나고요...

    >

    > 전 DB를 이용해서 첨 사용하구 잘 몰라요..

    > 지금 위에 방법도 간신히 한것이구요..(참고로.. DBGrid에서 작업을 해야합니다 항상)

    >

    > 왜 같은 문장인데 에러가 나는지.. 그리고 방법이 있다면 좀 부탁드립니다.

    > 오늘도 즐코하세요...

    >

    >

    >

    > 장지용 wrote:

    > >

    > > 원하시는 답변인지 모르겠습니다.

    > >

    > > if ActiveControl = DBGrid1 then

    > > DBGrid1 데이터 삭제루틴

    > > else if ActiveControl = DBGrid2 then

    > > DBGrid2 데이터 삭제루틴;

    > >

    > >

    > > 돌쇠 wrote:

    > > > 수거 많으십니다.

    > > >

    > > > 제가 지금 하고 있는것은 두개의 DBGrid를 가지고 두개의 table를 한 화면에서 사용하고 있습니다..

    > > >

    > > > 그런데 삭제를 하고 싶은데...

    > > >

    > > > 두개의 DBGrid 중에서 어느것을 삭제 하는지 어떻게 알아내는야 하는 겁니다..

    > > >

    > > > 예를 들자면..

    > > > A 라는 DBGrid 와 B 라는 DBGrid 가 있는데....

    > > > 삭제 버튼을 눌렀을때....

    > > >

    > > > DBGrid.삭제... 이런식으로 해주어야 하는데...

    > > >

    > > >

    > > > 이놈이 A 인지 B 인지 어떻게 알아내줘...

    > > > 제발 부탁합니다...

    > > > 지금 거의 미쳐갑니다.

    > > >

  • Profile
    돌쇠 2001.12.12 05:49
    장지용 wrote:

    >

    > "Query.DataSource" 보단 "Query.DatabaseName" 을 셋팅하면 어떨까 싶습니다.

    > 일단 제가 하는 방식을 적어봤습니다.

    > 참고가 되었으면 좋겠네요.

    > 수고하세요.

    >

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

    > [Database Component] 설정

    > 1. "Database" Component [DataAccess Tab] 를 추가한다.

    > 2. "Database" Component 를 더블클릭한다.

    > 3. "Driver name" 을 선택한다.

    > 4. "Name" 에 임의의 이름을 입력한다.

    > 5. "Defaults" Button 을 클릭한다.

    > 6. "Parameter overrides" 에 필요한 정보만 입력한다.

    > 7. "Login prompt" 체크를 해제한다.

    > 8. "Ok" 버튼을 클릭한다.

    > 9. "Connected" 를 "True" 로 바꾸어 설정이 제대로 되었는지 체크한다.

    > 10. "Connected" 를 다시 "False" 로 바꾼다.

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

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

    > [Query Component] 설정

    > 1. "Query.DatabaseName" 에서 위에서 입력한 "Database name" (Database.DatabaseName)를 선택한다. ("Query.DataSource" 는 셋팅할 필요가 없다.)

    > 2. "Query.CashedUpdates" 를 "True" 로 셋팅한다.

    > 3. "Query.SQL" 에 질의문을 입력한다.

    > 4. "Query.UpdateObject" 에 원하는 "UpdateSQL" 연결한다.

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

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

    > [UpdateSQL Component] 설정

    > 1. "UpdateSQL" Component 를 더블클릭한다.

    > 2. "Key Fields" 를 선택한다.

    > 3. "Generate SQL" 버튼을 클릭한다.

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

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

    > [DataSource Component] 설정

    > 1. "DataSource.DataSet" 에 원하는 "Query" 셋팅한다.

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

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

    > [DBGrid Component] 설정

    > 1. "DBGrid.DataSource" 에 원하는 "DataSource" 를 셋팅한다.

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

    >

    > [DBGrid] <---> [DataSource] <---> [Query] <---> [UpdateSQL]

    >

    >

    >

    > function TfrmModule.CommitRecord(qrName: TQuery): Boolean;

    > begin

    > with qrName do begin

    > Database.StartTransaction;

    >

    > try

    > ApplyUpdates;

    > Database.Commit;

    > Result := True;

    >

    > except

    > Database.Rollback;

    > Result := False;

    > Exit;

    > end;

    >

    > CommitUpdates;

    > end;

    > end;

    >

    > procedure TfrmTest.btDelClick(Sender: TObject);

    > begin

    > if MessageDlg('선택한 레코드를 삭제합니다.', mtWarning, mbOkCancel, 0) = mrCancel then

    > Exit;

    >

    > ////////////////////////////////////

    > if ActiveControl = DBGrid then begin

    > with Query do begin

    > Delete;

    > if frmModule.CommitRecord(Query) then

    > ShowMessage('삭제 성공')

    > else

    > ShowMessage('삭제 실패');

    > end;

    >

    > ////////////////////////////////////

    > end else if ActiveControl = ...

    >

    > end;

    >

    >

    >

    >

    > 돌쇠 wrote:

    > > 먼저 감사드리구요...

    > > 잘 되네요...

    > > 근데 또 문제가 생겼네요...

    > > 다름이 아니오라....

    > >

    > > 제가 UpdateSQL1,UpdateSQL2 Query1, Query2 DataSouce1,DataSouce2 를 사용하구요

    > > 모든 설정은 같고 Query2에서 Query1로 를 조인해서 사용합니다.

    > > ( Query2 의 DataSouce를 DataSouce1로 잡았습니다.)

    > >

    > > Delete 할때 Query1.Delete

    > > Query1.ApplyUpdates

    > > 를 사용하면 잘됩니다.

    > >

    > > 그런데

    > > Delete 할때 Query2.Delete

    > > Query2.ApplyUpdates

    > > 를 할때는 Query2.ApplyUpdates <=== 요 문장에서 에러가 발생합니다.

    > > 에러는 'Update Failde' 라고 나고요...

    > >

    > > 전 DB를 이용해서 첨 사용하구 잘 몰라요..

    > > 지금 위에 방법도 간신히 한것이구요..(참고로.. DBGrid에서 작업을 해야합니다 항상)

    > >

    > > 왜 같은 문장인데 에러가 나는지.. 그리고 방법이 있다면 좀 부탁드립니다.

    > > 오늘도 즐코하세요...

    > >

    > >

    > >

    > > 장지용 wrote:

    > > >

    > > > 원하시는 답변인지 모르겠습니다.

    > > >

    > > > if ActiveControl = DBGrid1 then

    > > > DBGrid1 데이터 삭제루틴

    > > > else if ActiveControl = DBGrid2 then

    > > > DBGrid2 데이터 삭제루틴;

    > > >

    > > >

    > > > 돌쇠 wrote:

    > > > > 수거 많으십니다.

    > > > >

    > > > > 제가 지금 하고 있는것은 두개의 DBGrid를 가지고 두개의 table를 한 화면에서 사용하고 있습니다..

    > > > >

    > > > > 그런데 삭제를 하고 싶은데...

    > > > >

    > > > > 두개의 DBGrid 중에서 어느것을 삭제 하는지 어떻게 알아내는야 하는 겁니다..

    > > > >

    > > > > 예를 들자면..

    > > > > A 라는 DBGrid 와 B 라는 DBGrid 가 있는데....

    > > > > 삭제 버튼을 눌렀을때....

    > > > >

    > > > > DBGrid.삭제... 이런식으로 해주어야 하는데...

    > > > >

    > > > >

    > > > > 이놈이 A 인지 B 인지 어떻게 알아내줘...

    > > > > 제발 부탁합니다...

    > > > > 지금 거의 미쳐갑니다.

    > > > >