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 |
---|---|
|
Zeilenzusammenführungskonflikte wurden gemeldet. |
|
Ein ungültiges oder inaktives Handle wurde bereitgestellt. |
|
Eine ungültige Tabelle wurde angegeben. |
|
Die Funktion wurde erfolgreich ausgeführt. |
|
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für