Funzione MsiDatabaseMergeA (msiquery.h)

La funzione MsiDatabaseMerge unisce due database insieme, che consente righe duplicate.

Sintassi

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

Parametri

[in] hDatabase

Handle al database ottenuto da MsiOpenDatabase.

[in] hDatabaseMerge

Handle al database ottenuto da MsiOpenDatabase per unire nel database di base.

[in] szTableName

Nome della tabella per ricevere informazioni di conflitto di tipo merge.

Valore restituito

La funzione MsiDatabaseMerge restituisce uno dei valori seguenti:

Codice restituito Descrizione
ERROR_FUNCTION_FAILED
Sono stati segnalati conflitti di unione delle righe.
ERROR_INVALID_HANDLE
È stato fornito un handle non valido o inattivo.
ERROR_INVALID_TABLE
È stata fornita una tabella non valida.
ERROR_SUCCESS
Funzione completata.
ERROR_DATATYPE_MISMATCH
Differenza dello schema tra i due database.

Commenti

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

MsiDatabaseMerge non copia i file di archivio incorporati o le trasformazioni incorporate dal database di riferimento nel database di destinazione. I flussi di dati incorporati elencati nella tabella binaria o nella 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 importano nel conteggio delle colonne e le tabelle corrispondenti possono avere un numero diverso di colonne temporanee senza creare conflitti finché le colonne persistenti corrispondono.

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 controllare i conflitti di unione delle righe. Se ERROR_DATATYPE_MISMATCH viene restituito, è garantito che i database non siano stati modificati.

Se i dati in particolare righe 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 con il conflitto. La seconda colonna fornisce il numero di righe nella tabella con il conflitto. La tabella che segnala conflitti viene visualizzata come indicato di seguito.

Colonna Tipo Chiave Nullable
Tabella Text S 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 ha esito negativo, è possibile ottenere informazioni di errore estese 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 preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

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 Windows
Intestazione msiquery.h
Libreria Msi.lib
DLL Msi.dll

Vedi anche

Formato definizione colonna

Funzioni di gestione del database