Freigeben über


MsiDatabaseMergeW-Funktion (msiquery.h)

Die MsiDatabaseMerge Funktion führt zwei Datenbanken zusammen, wodurch doppelte Zeilen zulässig sind.

Syntax

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

Parameter

[in] hDatabase

Das Handle für die Datenbank, die von MsiOpenDatabaseabgerufen wurde.

[in] hDatabaseMerge

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

[in] szTableName

Der Name der Tabelle, die Konfliktinformationen zum Zusammenführen 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
Es wurde ein ungültiger oder inaktiver Handle bereitgestellt.
ERROR_INVALID_TABLE
Es wurde eine ungültige Tabelle bereitgestellt.
ERROR_SUCCESS
Die Funktion war erfolgreich.
ERROR_DATATYPE_MISMATCH
Schemaunterschiede zwischen den beiden Datenbanken.

Bemerkungen

Die MsiDatabaseMerge-Funktion und die Merge-Methode des Database-Objekts können nicht verwendet werden, um ein Modul zusammenzuführen, das im Installationspaket enthalten ist. Sie sollten nicht verwendet werden, um Zusammenführungsmodule in ein Windows Installer-Paket zusammenzuführen. Um ein Seriendruckmodul in ein Installationspaket einzuschließen, sollten Autoren von Installationspaketen die Richtlinien befolgen, die im Thema Anwenden von Zusammenführungsmodulen beschrieben werden.

MsiDatabaseMerge wird nicht über eingebettete Cabinet Files oder eingebettet en Transformationen aus der Referenzdatenbank in die Zieldatenbank kopiert. Eingebettete Datenströme, die in der Binärtabelle oder Icon Table aufgelistet 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 zweier Datenbanken zusammen. Diese Datenbanken müssen über dieselbe Codeseite verfügen. 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. Entsprechende Zeilen befinden sich in der gleichen Tabelle beider Datenbanken und weisen denselben Primärschlüssel in beiden Datenbanken 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 jedoch keine Rolle bei der Spaltenanzahl, und die entsprechenden Tabellen können eine andere Anzahl temporärer Spalten aufweisen, ohne dass Konflikte entstehen, solange die persistenten Spalten übereinstimmen.

Wenn die Anzahl, der Typ oder der Name von Spalten in den entsprechenden Tabellen unterschiedlich sind, ist das Schema der beiden Datenbanken inkompatibel, und das Installationsprogramm beendet die Verarbeitung von Tabellen, und der Seriendruck schlägt fehl. Das Installationsprogramm überprüft, ob die beiden Datenbanken dasselbe Schema aufweisen, bevor nach Zeilenzusammenführungskonflikten gesucht wird. Wenn ERROR_DATATYPE_MISMATCH zurückgegeben wird, stellen Sie sicher, 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 mit dem Konflikt an. Die Tabelle, in der Konflikte gemeldet werden, wird wie folgt angezeigt.

Spalte Art Schlüssel Nullable
Tisch Y N
NumRowMergeConflicts ganze Zahl   N
 

Diese Funktion kann nicht aus benutzerdefinierten 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 MsiGetLastErrorRecordabrufen.

Anmerkung

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
mindestens unterstützte 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- Fenster
Header- msiquery.h
Library Msi.lib
DLL- Msi.dll

Siehe auch

Spaltendefinitionsformat

Datenbankverwaltungsfunktionen