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 para receber informações de conflito de mesclagem.

Valor de retorno

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.

Observações

A função MsiDatabaseMerge e o método Merge do objeto do Banco de Dados 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 de Arquivos de Gabinete incorporados ou transforma do banco de dados de referência no banco de dados de destino. Fluxos de dados inseridos listados no de Tabela Binária ou de Tabela de Ícones 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. Um conflito existirá 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, esse será um conflito de mesclagem de linhas, o instalador retornará ERROR_FUNCTION_FAILED e criará uma nova tabela chamada szTableName. A primeira coluna desta tabela é o nome da tabela que está tendo o conflito. A segunda coluna fornece o número de linhas na tabela que têm o conflito. A tabela que relata conflitos aparece da seguinte maneira.

Coluna Tipo Chave Nullable
Mesa de Texto Y 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.

Nota

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 do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

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

Consulte também

de formato de definição de coluna

Funções de gerenciamento de banco de dados