Função MsiViewModify (msiquery.h)

A função MsiViewModify atualiza um registro buscado.

Sintaxe

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

Parâmetros

[in] hView

Manipule para um modo de exibição.

[in] eModifyMode

Especifica o modo de modificação. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
MSIMODIFY_SEEK
-1
Atualiza as informações no registro fornecido sem alterar a posição no conjunto de resultados nem afetar as operações de busca seguintes. Em seguida, o registro pode ser usado para atualização, exclusão e atualização posteriores. Todas as colunas de chave primária da tabela devem estar na consulta e o registro deve ter pelo menos tantos campos quanto a consulta. O Seek não pode ser usado com consultas de várias tabelas. Esse modo não pode ser usado com uma exibição que contém junções. Veja também os comentários.
MSIMODIFY_REFRESH
0
Atualiza as informações do registro. Deve primeiro chamar MsiViewFetch com o mesmo registro. Gera uma falha em caso de linha excluída. Funciona com registros somente leitura/gravação e somente leitura.
MSIMODIFY_INSERT
1
Insere um registro. Gera uma falha caso haja uma linha com as mesmas chaves primárias. Gera uma falha em caso de banco de dados somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_UPDATE
2
Atualiza um registro existente. Somente chaves nãoprimárias. Deve primeiro chamar MsiViewFetch. Gera uma falha em caso de registro excluído. Funciona somente com registros de leitura/gravação.
MSIMODIFY_ASSIGN
3
Grava os dados atuais no cursor em uma linha da tabela. Atualiza o registro caso as chaves primárias correspondam a uma linha existente e insere uma, caso elas não sejam correspondentes. Gera uma falha em caso de banco de dados somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_REPLACE
4
Atualiza ou exclui e insere um registro em uma tabela. Deve primeiro chamar MsiViewFetch com o mesmo registro. Atualiza o registro caso as chaves primárias estejam inalteradas. Exclui a linha antiga e insere uma nova caso as chaves primárias tenham sido alteradas. Gera uma falha em caso de banco de dados somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_MERGE
5
Insere ou valida um registro em uma tabela. Insere-o se as chaves primárias não correspondem a nenhuma linha e valida-o se há uma correspondência. Gera uma falha se o registro não corresponde aos dados na tabela. Gera uma falha caso haja um registro com uma chave duplicada que não seja idêntica. Funciona somente com registros de leitura/gravação. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_DELETE
6
Remova uma linha da tabela. Primeiro, você deve chamar a função MsiViewFetch com o mesmo registro. Gera uma falha caso a linha tenha sido excluída. Funciona somente com registros de leitura/gravação. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_INSERT_TEMPORARY
7
Insere um registro temporário. As informações não são persistentes. Gera uma falha caso haja uma linha com a mesma chave primária. Funciona somente com registros de leitura/gravação. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_VALIDATE
8
Valida um registro. Não faz a validação entre junções. Primeiro, você deve chamar a função MsiViewFetch com o mesmo registro. Obtenha erros de validação com MsiViewGetError. Funciona com registros somente leitura/gravação e somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_VALIDATE_NEW
9
Validar um novo registro. Não faz a validação entre junções. Verifica se há chaves duplicadas. Obtenha erros de validação chamando MsiViewGetError. Funciona com registros somente leitura/gravação e somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_VALIDATE_FIELD
10
Valida os campos de um registro buscado ou novo. Pode validar um ou mais campos de um registro incompleto. Obtenha erros de validação chamando MsiViewGetError. Funciona com registros somente leitura/gravação e somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.
MSIMODIFY_VALIDATE_DELETE
11
Valida um registro que será excluído posteriormente. Primeiro, você deve chamar MsiViewFetch. Gera uma falha caso outra linha se refira às chaves primárias dessa linha. A validação não verifica a existência das chaves primárias dessa linha nas propriedades ou nas cadeias de caracteres. Não verifica se uma coluna é uma chave estrangeira em várias tabelas. Obtenha erros de validação chamando MsiViewGetError. Funciona com registros somente leitura/gravação e somente leitura. Esse modo não pode ser usado com uma exibição que contém junções.

[in] hRecord

Manipule para o registro a ser modificado.

Retornar valor

A função MsiViewModify retorna os seguintes valores:

Observe que, em situações de memória baixa, essa função pode gerar uma exceção STATUS_NO_MEMORY.

Comentários

Os valores MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD e MSIMODIFY_VALIDATE_DELETE da função MsiViewModify não executam atualizações reais; eles garantem que os dados no registro sejam válidos. O uso dessas enumerações de validação requer que o banco de dados contenha a tabela _Validation.

Você pode chamar MSIMODIFY_UPDATE ou MSIMODIFY_DELETE com um registro imediatamente após usar MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY ou MSIMODIFY_SEEK desde que não tenha modificado o 0º campo do registro inserido ou procurado.

Para executar qualquer instrução SQL, uma exibição precisa ser criada. No entanto, uma exibição que não cria um conjunto de resultados, como CREATE TABLE ou INSERT INTO, não pode ser usada com MsiViewModify para atualizar tabelas no modo de exibição.

Não é possível buscar um registro que contenha dados binários de um banco de dados e, em seguida, use esse registro para inserir os dados em outro banco de dados. Para mover dados binários de um banco de dados para outro, você deve exportar os dados para um arquivo e importá-los para o novo banco de dados usando uma consulta e o MsiRecordSetStream. Isso garante que cada banco de dados tenha uma cópia própria dos dados binários.

Observe que as ações personalizadas só podem adicionar, modificar ou remover linhas, colunas ou tabelas temporárias de um banco de dados. As ações personalizadas não podem modificar dados persistentes em um banco de dados, como dados que fazem parte do banco de dados armazenado em disco. Para obter mais informações, confira Como acessar a sessão do instalador atual em uma ação personalizada.

Se a função falhar, você poderá obter informações de erro estendidas usando MsiGetLastErrorRecord.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Installer 5.0 no Windows Server 2012, no Windows 8, no Windows Server 2008 R2 ou no Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 no Windows Server 2008 ou no Windows Vista. Windows Installer no Windows Server 2003 ou no Windows XP
Plataforma de Destino Windows
Cabeçalho msiquery.h
Biblioteca Msi.lib
DLL Msi.dll

Confira também

Funções gerais de acesso ao banco de dados