Share via


MsiDatabaseMergeW-Funktion (msiquery.h)

Die MsiDatabaseMerge-Funktion führt zwei Datenbanken zusammen, sodass doppelte Zeilen zulässt.

Syntax

UINT MsiDatabaseMergeW(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseMerge,
  [in] LPCWSTR   szTableName
);

Parameter

[in] hDatabase

Das Handle für die Datenbank, die aus MsiOpenDatabase abgerufen wurde.

[in] hDatabaseMerge

Das Handle für die Datenbank, die von MsiOpenDatabase abgerufen wurde, um in die Basisdatenbank zusammenzuführen.

[in] szTableName

Der Name der Tabelle, die Mergekonfliktinformationen empfangen soll.

Rückgabewert

Die MsiDatabaseMerge-Funktion gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
ERROR_FUNCTION_FAILED
Zeilenzusammenführungskonflikte wurden gemeldet.
ERROR_INVALID_HANDLE
Ein ungültiges oder inaktives Handle wurde bereitgestellt.
ERROR_INVALID_TABLE
Eine ungültige Tabelle wurde angegeben.
ERROR_SUCCESS
Die Funktion wurde erfolgreich ausgeführt.
ERROR_DATATYPE_MISMATCH
Schemaunterschied zwischen den beiden Datenbanken.

Hinweise

Die MsiDatabaseMerge-Funktion und die Merge-Methode des Database-Objekts können nicht zum Zusammenführen eines Moduls verwendet werden, das im Installationspaket enthalten ist. Sie dürfen nicht zum Zusammenführen von Mergemodulen in einem Windows Installer-Paket verwendet werden. Um ein Mergemodul in ein Installationspaket einzuschließen, müssen Ersteller von Installationspaketen die Richtlinien im Thema Anwenden von Mergemodulen befolgen.

MsiDatabaseMerge kopiert eingebettete Ablagedateien oder eingebettete Transformationen aus der Referenzdatenbank nicht in die Zieldatenbank. Eingebettete Datenströme, die in der Binary-Tabelle oder Icon-Tabelle aufgeführt sind, werden aus der Referenzdatenbank in die Zieldatenbank kopiert. Der in die Referenzdatenbank eingebettete Speicher wird nicht in die Zieldatenbank kopiert.

Die MsiDatabaseMerge-Funktion führt die Daten von zwei Datenbanken zusammen. Diese Datenbanken müssen dieselbe Codepage aufweisen. MsiDatabaseMerge schlägt fehl, wenn Tabellen oder Zeilen in den Datenbanken in Konflikt geraten. Ein Konflikt besteht, wenn sich die Daten in einer Zeile in der ersten Datenbank von den Daten in der entsprechenden Zeile der zweiten Datenbank unterscheiden. Die entsprechenden Zeilen befinden sich in der gleichen Tabelle beider Datenbanken und weisen in beiden Datenbanken denselben Primärschlüssel auf. Die Tabellen nicht in Konflikt stehender Datenbanken müssen dieselbe Anzahl von Primärschlüsseln, dieselbe Anzahl von Spalten, dieselben Spaltentypen, dieselben Spaltennamen und dieselben Daten in Zeilen mit identischen Primärschlüsseln aufweisen. Temporäre Spalten spielen jedoch keine Rolle bei der Spaltenanzahl, und entsprechende Tabellen können eine andere Anzahl temporärer Spalten aufweisen, ohne einen Konflikt zu verursachen, solange die persistenten Spalten übereinstimmen.

Wenn die Anzahl, der Typ oder der Name der Spalten in entsprechenden Tabellen unterschiedlich ist, ist das Schema der beiden Datenbanken inkompatibel, und das Installationsprogramm beendet die Verarbeitung von Tabellen, und die Zusammenführung schlägt fehl. Das Installationsprogramm überprüft, ob die beiden Datenbanken das gleiche Schema aufweisen, bevor es nach Zeilenzusammenführungskonflikten sucht. Wenn ERROR_DATATYPE_MISMATCH zurückgegeben wird, wird garantiert, dass die Datenbanken nicht geändert wurden.

Wenn sich die Daten in bestimmten Zeilen unterscheiden, handelt es sich um einen Zeilenzusammenführungskonflikt, gibt das Installationsprogramm ERROR_FUNCTION_FAILED zurück und erstellt eine neue Tabelle mit dem Namen szTableName. Die erste Spalte dieser Tabelle ist der Name der Tabelle mit dem Konflikt. Die zweite Spalte gibt die Anzahl der Zeilen in der Tabelle an, die den Konflikt enthalten. Die Tabelle, in der Konflikte gemeldet werden, wird wie folgt angezeigt.

Spalte Typ Schlüssel Nullwerte zulässig
Tabelle Text J N
NumRowMergeConflicts Integer   N
 

Diese Funktion kann nicht über benutzerdefinierte Aktionen aufgerufen werden. Ein Aufruf dieser Funktion aus einer benutzerdefinierten Aktion führt dazu, dass die Funktion fehlschlägt.

Wenn die Funktion fehlschlägt, können Sie erweiterte Fehlerinformationen mithilfe von MsiGetLastErrorRecord abrufen.

Hinweis

Der msiquery.h-Header definiert MsiDatabaseMerge als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Installer 5.0 unter Windows Server 2012, Windows 8, Windows Server 2008 R2 oder Windows 7. Windows Installer 4.0 oder Windows Installer 4.5 unter Windows Server 2008 oder Windows Vista. Windows Installer unter Windows Server 2003 oder Windows XP
Zielplattform Windows
Kopfzeile msiquery.h
Bibliothek Msi.lib
DLL Msi.dll

Weitere Informationen

Spaltendefinitionsformat

Datenbankverwaltungsfunktionen