다음을 통해 공유


MsiViewModify 함수(msiquery.h)

MsiViewModify 함수는 페치된 레코드를 업데이트합니다.

구문

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

매개 변수

[in] hView

뷰에 대한 핸들입니다.

[in] eModifyMode

수정 모드를 지정합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
MSIMODIFY_SEEK
-1
결과 집합의 위치를 변경하지 않고 이후 페치 작업에 영향을 주지 않고 제공된 레코드의 정보를 새로 고칩니다. 그러면 후속 업데이트, 삭제 및 새로 고침에 레코드를 사용할 수 있게 됩니다. 테이블의 모든 기본 키 열은 쿼리에 있어야 하며 레코드에는 쿼리만큼 많은 필드가 있어야 합니다. 검색은 다중 테이블 쿼리와 함께 사용할 수 없습니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다. 설명도 참조하세요.
MSIMODIFY_REFRESH
0
해당 레코드에 포함된 정보를 새로 고칩니다. 먼저 동일한 레코드를 사용하여 MsiViewFetch 를 호출해야 합니다. 삭제된 행에서는 실패합니다. 읽기-쓰기 및 읽기 전용 레코드에서 작동합니다.
MSIMODIFY_INSERT
1
레코드를 삽입합니다. 기본 키가 동일한 행이 있으면 실패합니다. 읽기 전용 데이터베이스에서는 실패합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_UPDATE
2
기존 레코드를 업데이트합니다. 기본이 아닌 키만 해당합니다. 먼저 MsiViewFetch를 호출해야 합니다. 삭제된 레코드에서는 실패합니다. 읽기-쓰기 레코드에서만 작동합니다.
MSIMODIFY_ASSIGN
3
커서의 현재 데이터를 테이블 행에 씁니다. 기본 키가 기존 행과 일치하면 레코드를 업데이트하고 일치하지 않으면 삽입합니다. 읽기 전용 데이터베이스에서는 실패합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_REPLACE
4
레코드를 업데이트 또는 삭제하고 테이블에 삽입합니다. 먼저 동일한 레코드를 사용하여 MsiViewFetch 를 호출해야 합니다. 기본 키가 변경되지 않은 경우 레코드를 업데이트합니다. 기본 키가 변경된 경우 이전 행을 삭제하고 새 행을 삽입합니다. 읽기 전용 데이터베이스에서는 실패합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_MERGE
5
테이블에 레코드를 삽입하거나 유효성을 검사합니다. 기본 키가 다른 행과 일치하지 않는 경우 레코드를 삽입하고 일치하는 항목이 있는지 유효성을 검사합니다. 레코드가 테이블의 데이터와 일치하지 않으면 실패합니다. 중복 키가 있는 레코드가 동일하지 않은 경우 실패합니다. 읽기-쓰기 레코드에서만 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_DELETE
6
테이블에서 행을 제거합니다. 먼저 동일한 레코드를 사용하여 MsiViewFetch 함수를 호출해야 합니다. 행이 삭제된 경우 실패합니다. 읽기-쓰기 레코드에서만 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_INSERT_TEMPORARY
7
임시 레코드를 삽입합니다. 정보가 영구적이지 않습니다. 기본 키가 동일한 행이 있으면 실패합니다. 읽기-쓰기 레코드에서만 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_VALIDATE
8
레코드의 유효성을 검사합니다. 조인 간 유효성을 검사하지 않습니다. 먼저 동일한 레코드를 사용하여 MsiViewFetch 함수를 호출해야 합니다. MsiViewGetError를 사용하여 유효성 검사 오류를 가져옵니다. 읽기-쓰기 및 읽기 전용 레코드에서 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_VALIDATE_NEW
9
새 레코드의 유효성을 검사합니다. 조인 간 유효성을 검사하지 않습니다. 중복 키를 확인합니다. MsiViewGetError를 호출하여 유효성 검사 오류를 가져옵니다. 읽기-쓰기 및 읽기 전용 레코드에서 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_VALIDATE_FIELD
10
페치된 레코드 또는 새 레코드 필드의 유효성을 검사합니다. 불완전한 레코드의 하나 이상의 필드의 유효성을 검사할 수 있습니다. MsiViewGetError를 호출하여 유효성 검사 오류를 가져옵니다. 읽기-쓰기 및 읽기 전용 레코드에서 작동합니다. 조인이 포함된 보기에는 이 모드를 사용할 수 없습니다.
MSIMODIFY_VALIDATE_DELETE
11
나중에 삭제될 레코드의 유효성을 검사합니다. 먼저 MsiViewFetch를 호출해야 합니다. 다른 행이 이 행의 기본 키를 참조하는 경우 실패합니다. 유효성 검사는 속성 또는 문자열에 이 행의 기본 키가 있는지 확인하지 않습니다. 열이 여러 테이블의 외래 키(foreign key)인지는 확인하지 않습니다. MsiViewGetError를 호출하여 유효성 검사 오류를 가져옵니다. 읽기-쓰기 및 읽기 전용 레코드에서 작동합니다. 조인이 포함된 뷰에서는 이 모드를 사용할 수 없습니다.

[in] hRecord

수정할 레코드에 대한 핸들입니다.

반환 값

MsiViewModify 함수는 다음 값을 반환합니다.

메모리가 부족한 경우 이 함수는 STATUS_NO_MEMORY 예외를 발생할 수 있습니다.

설명

MsiViewModify 함수의 MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD 및 MSIMODIFY_VALIDATE_DELETE 값은 실제 업데이트를 수행하지 않습니다. 레코드의 데이터가 유효한지 확인합니다. 이러한 유효성 검사 열거형을 사용하려면 데이터베이스에 _Validation 테이블이 포함되어야 합니다.

삽입되거나 검색된 레코드의 0번째 필드를 수정하지 않은 경우 MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY 또는 MSIMODIFY_SEEK 사용한 직후 레코드로 MSIMODIFY_UPDATE 또는 MSIMODIFY_DELETE 호출할 수 있습니다.

SQL 문을 실행하려면 뷰를 만들어야 합니다. 그러나 CREATE TABLE 또는 INSERT INTO와 같은 결과 집합을 만들지 않는 뷰는 MsiViewModify 와 함께 사용하여 뷰를 통해 테이블을 업데이트할 수 없습니다.

한 데이터베이스에서 이진 데이터가 포함된 레코드를 가져온 다음 해당 레코드를 사용하여 다른 데이터베이스에 데이터를 삽입할 수 없습니다. 이진 데이터를 한 데이터베이스에서 다른 데이터베이스로 이동하려면 데이터를 파일로 내보낸 다음 쿼리 및 MsiRecordSetStream을 사용하여 새 데이터베이스로 가져와야 합니다. 이렇게 하면 각 데이터베이스에 이진 데이터의 자체 복사본을 저장할 수 있습니다.

사용자 지정 작업은 데이터베이스에서 임시 행, 열 또는 테이블을 추가, 수정 또는 제거할 수 있습니다. 사용자 지정 작업은 디스크에 저장된 데이터베이스의 일부인 데이터와 같은 데이터베이스의 영구 데이터를 수정할 수 없습니다. 자세한 내용은 사용자 지정 작업 내에서 현재 설치 관리자 세션 액세스를 참조하세요.

함수가 실패하면 MsiGetLastErrorRecord를 사용하여 확장된 오류 정보를 얻을 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Server 2012, Windows 8, Windows Server 2008 R2 또는 Windows 7의 Windows Installer 5.0. Windows Server 2008 또는 Windows Vista의 Windows Installer 4.0 또는 Windows Installer 4.5. Windows Server 2003 또는 Windows XP의 Windows Installer
대상 플랫폼 Windows
헤더 msiquery.h
라이브러리 Msi.lib
DLL Msi.dll

추가 정보

일반 데이터베이스 액세스 함수