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
Código de retorno | Descrição |
---|---|
|
Conflitos de mesclagem de linhas foram relatados. |
|
Um identificador inválido ou inativo foi fornecido. |
|
Uma tabela inválida foi fornecida. |
|
A função foi bem-sucedida. |
|
Diferença de esquema entre os dois bancos de dados. |
Observações
A função
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 |