Funzione MsiDatabaseMergeA (msiquery.h)

La funzione MsiDatabaseMerge unisce due database, consentendo così righe duplicate.

Sintassi

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

Parametri

[in] hDatabase

Handle del database ottenuto da MsiOpenDatabase.

[in] hDatabaseMerge

Handle del database ottenuto da MsiOpenDatabase da unire nel database di base.

[in] szTableName

Nome della tabella in cui ricevere informazioni sui conflitti di merge.

Valore restituito

La funzione msiDatabaseMerge restituisce uno dei valori seguenti:

Codice restituito Descrizione
ERROR_FUNCTION_FAILED
Sono stati segnalati conflitti di unione di righe.
ERROR_INVALID_HANDLE
È stato fornito un handle non valido o inattivo.
ERROR_INVALID_TABLE
È stata specificata una tabella non valida.
ERROR_SUCCESS
La funzione ha avuto esito positivo.
ERROR_DATATYPE_MISMATCH
Differenza dello schema tra i due database.

Osservazioni

La funzione MsiDatabaseMerge e il metodo merge dell'oggetto database non possono essere utilizzati per unire un modulo incluso nel pacchetto di installazione. Non devono essere usati per unire moduli di merge in un pacchetto di Windows Installer. Per includere un modulo di unione in un pacchetto di installazione, gli autori dei pacchetti di installazione devono seguire le linee guida descritte nell'argomento 'applicazione di moduli di merge.

msiDatabaseMerge non esegue la copia su file CAB incorporati o trasformazioni incorporate dal database di riferimento al database di destinazione. I flussi di dati incorporati elencati nel tabella binaria o tabella icona vengono copiati dal database di riferimento al database di destinazione. L'archiviazione incorporata nel database di riferimento non viene copiata nel database di destinazione.

La funzione msiDatabaseMerge unisce i dati di due database. Questi database devono avere la stessa tabella codici. MsiDatabaseMerge ha esito negativo se sono presenti tabelle o righe nei database in conflitto. Esiste un conflitto se i dati in qualsiasi riga del primo database differiscono dai dati nella riga corrispondente del secondo database. Le righe corrispondenti si trovano nella stessa tabella di entrambi i database e hanno la stessa chiave primaria in entrambi i database. Le tabelle di database non in conflitto devono avere lo stesso numero di chiavi primarie, lo stesso numero di colonne, gli stessi tipi di colonna, gli stessi nomi di colonna e gli stessi dati in righe con chiavi primarie identiche. Le colonne temporanee, tuttavia, non sono importanti nel numero di colonne e le tabelle corrispondenti possono avere un numero diverso di colonne temporanee senza creare conflitti purché le colonne persistenti corrispondano.

Se il numero, il tipo o il nome delle colonne nelle tabelle corrispondenti sono diversi, lo schema dei due database non è compatibile e il programma di installazione arresta l'elaborazione delle tabelle e l'unione ha esito negativo. Il programma di installazione verifica che i due database abbiano lo stesso schema prima di verificare la presenza di conflitti di unione di righe. Se viene restituito ERROR_DATATYPE_MISMATCH, si garantisce che i database non siano stati modificati.

Se i dati in righe particolari differiscono, si tratta di un conflitto di unione di righe, il programma di installazione restituisce ERROR_FUNCTION_FAILED e crea una nuova tabella denominata szTableName. La prima colonna di questa tabella è il nome della tabella che presenta il conflitto. La seconda colonna indica il numero di righe nella tabella in cui si verifica il conflitto. La tabella che segnala i conflitti viene visualizzata nel modo seguente.

Colonna Digitare Chiave Nullable
Tavolo testo Y N
NumRowMergeConflicts Integer   N
 

Questa funzione non può essere chiamata da azioni personalizzate. Una chiamata a questa funzione da un'azione personalizzata causa l'esito negativo della funzione.

Se la funzione non riesce, è possibile ottenere informazioni estese sull'errore usando MsiGetLastErrorRecord.

Nota

L'intestazione msiquery.h definisce MsiDatabaseMerge come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows Installer 5.0 in Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 in Windows Server 2008 o Windows Vista. Windows Installer in Windows Server 2003 o Windows XP
piattaforma di destinazione Finestre
intestazione msiquery.h
libreria Msi.lib
dll Msi.dll

Vedere anche

formato definizione colonna

funzioni di gestione del database