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
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 bereitgestellt.
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 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

Weitere Informationen

Spaltendefinitionsformat

Datenbankverwaltungsfunktionen