Compartilhar via


Função MsiDatabaseMergeA (msiquery.h)

A função MsiDatabaseMerge mescla dois bancos de dados, o que permite linhas duplicadas.

Sintaxe

UINT MsiDatabaseMergeA(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseMerge,
  [in] LPCSTR    szTableName
);

Parâmetros

[in] hDatabase

O identificador para o banco de dados obtido de MsiOpenDatabase.

[in] hDatabaseMerge

O identificador para o banco de dados obtido de MsiOpenDatabase para mesclar no banco de dados base.

[in] szTableName

O nome da tabela a receber conflito de mesclagem informações.

Retornar valor

A função MsiDatabaseMerge retorna um dos seguintes valores:

Código de retorno Descrição
ERROR_FUNCTION_FAILED
Conflitos de mesclagem de linhas foram relatados.
ERROR_INVALID_HANDLE
Um identificador inválido ou inativo foi fornecido.
ERROR_INVALID_TABLE
Uma tabela inválida foi fornecida.
ERROR_SUCCESS
A função foi bem-sucedida.
ERROR_DATATYPE_MISMATCH
Diferença de esquema entre os dois bancos de dados.

Comentários

A função MsiDatabaseMerge e o método Merge do objeto Database não podem ser usados para mesclar um módulo incluído no pacote de instalação. Eles não devem ser usados para mesclar Módulos de mesclagem em um pacote do Windows Installer. Para incluir um módulo de mesclagem em um pacote de instalação, os autores de pacotes de instalação devem seguir as diretrizes descritas no tópico Aplicar módulos de mesclagem.

MsiDatabaseMerge não copia arquivos de gabineteinseridos ou transformações inseridas do banco de dados de referência no banco de dados de destino. Fluxos de dados inseridos listados na Tabela Binary ou na Tabela Icon são copiados do banco de dados de referência para o banco de dados de destino. O armazenamento inserido no banco de dados de referência não é copiado para o banco de dados de destino.

A função MsiDatabaseMerge mescla os dados de dois bancos de dados. Esses bancos de dados devem ter a mesma página de código. MsiDatabaseMerge falhará se alguma tabela ou linha nos bancos de dados entrar em conflito. Existe um conflito se os dados em qualquer linha no primeiro banco de dados forem diferentes dos dados na linha correspondente do segundo banco de dados. As linhas correspondentes estão na mesma tabela de ambos os bancos de dados e têm a mesma chave primária em ambos os bancos de dados. As tabelas de bancos de dados não conflitantes devem ter o mesmo número de chaves primárias, o mesmo número de colunas, os mesmos tipos de coluna, os mesmos nomes de coluna e os mesmos dados em linhas com chaves primárias idênticas. No entanto, as colunas temporárias não importam na contagem de colunas e as tabelas correspondentes podem ter um número diferente de colunas temporárias sem criar conflitos, desde que as colunas persistentes correspondam.

Se o número, o tipo ou o nome das colunas nas tabelas correspondentes forem diferentes, o esquema dos dois bancos de dados será incompatível e o instalador interromperá o processamento de tabelas e a mesclagem falhará. O instalador verifica se os dois bancos de dados têm o mesmo esquema antes de verificar se há conflitos de mesclagem de linhas. Se ERROR_DATATYPE_MISMATCH for retornado, você terá a garantia de que os bancos de dados não foram alterados.

Se os dados em linhas específicas forem diferentes, essa será uma linha conflito de mesclagem, o instalador retornará ERROR_FUNCTION_FAILED e criará uma nova tabela chamada szTableName. A primeira coluna dessa tabela é o nome da tabela que tem o conflito. A segunda coluna fornece o número de linhas na tabela com o conflito. A tabela que relata conflitos aparece da seguinte maneira.

Coluna Tipo Chave Nullable
Tabela Texto S N
NumRowMergeConflicts Inteiro   N
 

Essa função não pode ser chamada de ações personalizadas. Uma chamada para essa função de uma ação personalizada faz com que a função falhe.

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

Observação

O cabeçalho msiquery.h define MsiDatabaseMerge como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

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

Formato de definição de coluna

Funções de gerenciamento de banco de dados