MsiDatabaseMergeA-Funktion (msiquery.h)
Die MsiDatabaseMerge-Funktion führt zwei Datenbanken zusammen, wodurch doppelte Zeilen zulässig sind.
Syntax
UINT MsiDatabaseMergeA(
[in] MSIHANDLE hDatabase,
[in] MSIHANDLE hDatabaseMerge,
[in] LPCSTR szTableName
);
Parameter
[in] hDatabase
Das Handle für die Datenbank, die von 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 Konfliktinformationen für die Zusammenführung 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 bereitgestellt. |
|
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 Cabinet-Dateien oder eingebettete Transformationen nicht aus der Referenzdatenbank 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. In die Referenzdatenbank eingebetteter 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 von Datenbanken, die nicht in Konflikt stehen, 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 bei der Spaltenanzahl jedoch keine Rolle, und entsprechende Tabellen können eine unterschiedliche Anzahl temporärer Spalten enthalten, ohne konflikte zu verursachen, solange die persistenten Spalten übereinstimmen.
Wenn die Anzahl, der Typ oder der Name der Spalten in den entsprechenden Tabellen unterschiedlich sind, ist das Schema der beiden Datenbanken nicht kompatibel, und das Installationsprogramm beendet die Verarbeitung von Tabellen, und die Zusammenführung schlägt fehl. Das Installationsprogramm überprüft, ob die beiden Datenbanken dasselbe Schema haben, bevor es nach Zeilenzusammenführungskonflikten sucht. Wenn ERROR_DATATYPE_MISMATCH zurückgegeben wird, werden Sie 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 aufweisen. 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 die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, 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 |