레코드 집합: 레코드 추가, 업데이트 및 삭제(ODBC)

이 항목은 MFC ODBC 클래스에 적용됩니다.

참고 항목

이제 레코드를 대량으로 더 효율적으로 추가할 수 있습니다. 자세한 내용은 레코드 집합: 대량으로 레코드 추가(ODBC)를 참조하세요.

참고 항목

이 토픽은 대량 행 페치가 구현되지 않은 CRecordset에서 파생된 개체에 적용됩니다. 대량 행 가져오기를 사용하는 경우 레코드 집합: 대량으로 레코드 가져오기(ODBC)를 참조하세요.

업데이트 가능한 스냅샷 및 다이내셋을 사용하면 레코드를 추가, 편집(업데이트) 및 삭제할 수 있습니다. 이 항목에서는 다음 내용을 설명합니다.

업데이트를 수행하는 방법과 다른 사용자에게 업데이트가 표시되는 방법에 대한 자세한 내용은 Recordset: How Recordsets Update Records (ODBC)를 참조하세요. 일반적으로 레코드를 추가, 편집 또는 삭제하면 레코드 집합이 데이터 원본을 즉시 변경합니다. 대신 관련 업데이트 그룹을 트랜잭션으로 일괄 처리할 수 있습니다. 트랜잭션이 진행 중인 경우 트랜잭션을 커밋할 때까지 업데이트가 최종 업데이트되지 않습니다. 이렇게 하면 변경 내용을 되돌리거나 롤백할 수 있습니다. 트랜잭션에 대한 자세한 내용은 트랜잭션(ODBC)을 참조하세요.

다음 표에서는 다양한 업데이트 특성을 가진 레코드 집합에 사용할 수 있는 옵션을 요약합니다.

레코드 집합 읽기/업데이트 옵션

Type Read 레코드 편집 레코드 삭제 새로 추가(추가)
읽기 전용 Y N N N
추가 전용 Y N N Y
완전히 업다이블 Y Y Y Y

레코드 집합을 업데이트할 수 있는지 확인

데이터 원본을 업데이트할 수 있고 레코드 집합을 업데이트 가능으로 연 경우 레코드 집합 개체를 업데이트할 수 있습니다. 또한 이 업데이트 기능은 사용하는 SQL 문, ODBC 드라이버의 기능 및 ODBC 커서 라이브러리가 메모리에 있는지 여부에 따라 달라집니다. 읽기 전용 레코드 집합 또는 데이터 원본은 업데이트할 수 없습니다.

레코드 집합을 변경할 수 있는지 여부를 확인하려면

  1. 레코드 집합 개체의 CanUpdate 멤버 함수를 호출합니다.

    CanUpdate 는 레코드 집합을 업데이트할 수 있는 경우 0이 아닌 값을 반환합니다.

기본적으로 레코드 집합은 완전히 업데이트할 수 있습니다(수행 및 EditDelete 작업을 수행할 AddNew수 있음). 그러나 appendOnly 옵션을 사용하여 업데이트 가능한 레코드 집합을 열 수도 있습니다. 이 방식으로 열린 레코드 집합은 새 레코드를 추가 AddNew하기만 허용합니다. 기존 레코드는 편집하거나 삭제할 수 없습니다. CanAppend 멤버 함수를 호출하여 레코드 집합이 추가용으로만 열려 있는지 여부를 테스트할 수 있습니다. CanAppend 는 레코드 집합이 완전히 업데이트 가능하거나 추가용으로만 열려 있는 경우 0이 아닌 값을 반환합니다.

다음 코드는 다음과 같은 rsStudentSet레코드 집합 개체에 사용할 CanUpdate 수 있는 방법을 보여줍니다.

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}

주의

레코드 집합을 호출 Update하여 업데이트할 준비가 되면 레코드 집합에 테이블의 기본 키를 구성하는 모든 열(또는 테이블의 고유 인덱스 열 모두)이 포함됩니다. 경우에 따라 프레임워크는 레코드 집합에서 선택한 열만 사용하여 업데이트할 테이블의 레코드를 식별할 수 있습니다. 필요한 모든 열이 없으면 테이블에서 여러 레코드가 업데이트되어 테이블의 참조 무결성이 손상될 수 있습니다. 이 경우 호출할 때 Update프레임워크에서 예외를 throw합니다.

레코드 집합에 레코드 추가

CanAppend 멤버 함수가 0이 아닌 값을 반환하는 경우 레코드 집합에 새 레코드를 추가할 수 있습니다.

레코드 집합에 새 레코드를 추가하려면

  1. 레코드 집합을 추가할 수 있는지 확인합니다.

  2. 레코드 집합 개체의 AddNew 멤버 함수를 호출합니다.

    AddNew 는 편집 버퍼 역할을 하도록 레코드 집합을 준비합니다. 모든 필드 데이터 멤버는 특수 값 Null로 설정되고 변경되지 않은 것으로 표시되므로 Update를 호출할 때 변경된(더티) 값만 데이터 원본에 기록됩니다.

  3. 새 레코드의 필드 데이터 멤버 값을 설정합니다.

    필드 데이터 멤버에 값을 할당합니다. 할당하지 않은 항목은 데이터 원본에 기록되지 않습니다.

  4. 레코드 집합 개체의 멤버 함수를 Update 호출합니다.

    Update 는 데이터 원본에 새 레코드를 작성하여 추가를 완료합니다. 호출Update에 실패하는 경우 발생하는 방법에 대한 자세한 내용은 Recordset: How Recordsets Update Records(ODBC)를 참조하세요.

레코드 추가의 작동 방식과 레코드 집합에 추가된 레코드가 표시되는 시기에 대한 자세한 내용은 레코드 집합 : AddNew, Edit 및 Delete Work(ODBC)를 참조하세요.

다음 예제에서는 새 레코드를 추가하는 방법을 보여줍니다.

if( !rsStudent.Open( ) )
    return FALSE;
if( !rsStudent.CanAppend( ) )
    return FALSE;                      // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not added; no field values were set." );
    return FALSE;
}

또는 호출을 AddNewEdit 취소하려면 AFX_MOVE_REFRESH 매개 변수를 AddNew 사용하여 다른 호출을 하거나 Edit 호출 Move하기만 하면됩니다. 데이터 멤버는 이전 값으로 다시 설정되며 사용자는 여전히 또는 Add 모드에 Edit 있습니다.

레코드 집합에서 레코드 편집

레코드 집합의 CanUpdate 멤버 함수가 0이 아닌 값을 반환하는 경우 기존 레코드를 편집할 수 있습니다.

레코드 집합에서 기존 레코드를 편집하려면

  1. 레코드 집합을 업데이트할 수 있는지 확인합니다.

  2. 업데이트할 레코드로 스크롤합니다.

  3. 레코드 집합 개체의 멤버 편집 함수를 호출합니다.

    Edit 는 편집 버퍼 역할을 하도록 레코드 집합을 준비합니다. 레코드 집합이 변경되었는지 여부를 나중에 알 수 있도록 모든 필드 데이터 멤버가 표시됩니다. 변경된 필드 데이터 멤버의 새 값은 Update를 호출할 때 데이터 원본에 기록됩니다.

  4. 새 레코드의 필드 데이터 멤버 값을 설정합니다.

    필드 데이터 멤버에 값을 할당합니다. 값을 다시 할당하지 않은 값은 변경되지 기본.

  5. 레코드 집합 개체의 멤버 함수를 Update 호출합니다.

    Update 는 변경된 레코드를 데이터 원본에 기록하여 편집을 완료합니다. 호출Update에 실패하는 경우 발생하는 방법에 대한 자세한 내용은 Recordset: How Recordsets Update Records(ODBC)를 참조하세요.

레코드를 편집한 후 편집된 레코드는 현재 레코드를 다시 기본.

다음 예제에서는 작업을 보여줍니다 Edit . 사용자가 편집하려는 레코드로 이동했다고 가정합니다.

rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not updated; no field values were set." );
    return FALSE;
}

또는 호출을 AddNewEdit 취소하려면 AFX_MOVE_REFRESH 매개 변수를 AddNew 사용하여 다른 호출을 하거나 Edit 호출 Move하기만 하면됩니다. 데이터 멤버는 이전 값으로 다시 설정되며 사용자는 여전히 또는 Add 모드에 Edit 있습니다.

레코드 집합에서 레코드 삭제

레코드 집합의 CanUpdate 멤버 함수가 0이 아닌 값을 반환하는 경우 레코드를 삭제할 수 있습니다.

레코드를 삭제하려면

  1. 레코드 집합을 업데이트할 수 있는지 확인합니다.

  2. 업데이트할 레코드로 스크롤합니다.

  3. 레코드 집합 개체의 Delete 멤버 함수를 호출합니다.

    Delete 는 레코드 집합과 데이터 원본 모두에서 레코드를 삭제된 것으로 즉시 표시합니다.

    달리 AddNew , Edit해당 DeleteUpdate 호출이 없습니다.

  4. 다른 레코드로 스크롤합니다.

    참고 항목

    레코드 집합을 이동할 때 삭제된 레코드를 건너뛰지 않을 수 있습니다. 자세한 내용은 IsDeleted 멤버 함수를 참조하세요.

다음 예제에서는 작업을 보여줍니다 Delete . 사용자가 삭제하려는 레코드로 이동한 것으로 가정합니다. 호출된 후에 Delete 는 새 레코드로 이동하는 것이 중요합니다.

rsStudent.Delete( );
rsStudent.MoveNext( );

, Edit및 멤버 함수의 AddNew효과에 대한 자세한 내용은 Recordset: How Recordsets Update Records(ODBC)를 참조 Delete 하세요.

참고 항목

레코드 집합(ODBC)
레코드 집합: 레코드 잠금(ODBC)