Condividi tramite


Funzione MsiViewModify (msiquery.h)

La funzione MsiViewModify aggiorna un record recuperato.

Sintassi

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

Parametri

[in] hView

Gestire in una visualizzazione.

[in] eModifyMode

Specifica la modalità di modifica. Questo parametro può avere uno dei valori seguenti.

Valore Significato
MSIMODIFY_SEEK
-1
Aggiorna le informazioni nel record fornito senza modificare la posizione nel set di risultati e senza influire sulle operazioni di recupero successive. Il record può quindi essere usato per aggiornamento, eliminazione e aggiornamento successivi. Tutte le colonne chiave primaria della tabella devono trovarsi nella query e il record deve avere almeno il numero di campi della query. La ricerca non può essere usata con query a più tabelle. Questa modalità non può essere usata con una visualizzazione contenente join. Vedere anche le osservazioni.
MSIMODIFY_REFRESH
0
Aggiorna le informazioni nel record. Deve prima chiamare MsiViewFetch con lo stesso record. Errore per una riga eliminata. Funziona con record di sola lettura e lettura.
MSIMODIFY_INSERT
1
Inserisce un record. Ha esito negativo se esiste una riga con le stesse chiavi primarie. Ha esito negativo con un database di sola lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_UPDATE
2
Aggiornamenti un record esistente. Solo chiavi nonprimarie. Deve prima chiamare MsiViewFetch. Ha esito negativo con un record eliminato. Funziona solo con record di lettura-scrittura.
MSIMODIFY_ASSIGN
3
Scrive i dati correnti nel cursore in una riga di tabella. Aggiornamenti registrare se le chiavi primarie corrispondono a una riga esistente e inserisce se non corrispondono. Ha esito negativo con un database di sola lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_REPLACE
4
Aggiornamenti o elimina e inserisce un record in una tabella. Deve prima chiamare MsiViewFetch con lo stesso record. Aggiornamenti record se le chiavi primarie sono invariate. Elimina la riga precedente e inserisce nuove se le chiavi primarie sono state modificate. Ha esito negativo con un database di sola lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_MERGE
5
Inserisce o convalida un record in una tabella. Inserisce se le chiavi primarie non corrispondono a alcuna riga e convalidano se è presente una corrispondenza. Ha esito negativo se il record non corrisponde ai dati nella tabella. Ha esito negativo se è presente un record con una chiave duplicata che non è identica. Funziona solo con record di lettura-scrittura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_DELETE
6
Rimuovere una riga dalla tabella. È prima necessario chiamare la funzione MsiViewFetch con lo stesso record. Ha esito negativo se la riga è stata eliminata. Funziona solo con record di lettura-scrittura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_INSERT_TEMPORARY
7
Inserisce un record temporaneo. Le informazioni non sono persistenti. Ha esito negativo se esiste una riga con la stessa chiave primaria. Funziona solo con record di lettura-scrittura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_VALIDATE
8
Convalida un record. Non convalida tra join. È prima necessario chiamare la funzione MsiViewFetch con lo stesso record. Ottenere errori di convalida con MsiViewGetError. Funziona con record di sola lettura e lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_VALIDATE_NEW
9
Convalidare un nuovo record. Non convalida tra join. Verifica la presenza di chiavi duplicate. Ottenere errori di convalida chiamando MsiViewGetError. Funziona con record di sola lettura e lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_VALIDATE_FIELD
10
Convalida i campi di un record recuperato o nuovo. Può convalidare uno o più campi di un record incompleto. Ottenere errori di convalida chiamando MsiViewGetError. Funziona con record di sola lettura e lettura. Questa modalità non può essere usata con una visualizzazione contenente join.
MSIMODIFY_VALIDATE_DELETE
11
Convalida un record che verrà eliminato in un secondo momento. Devi prima chiamare MsiViewFetch. Ha esito negativo se un'altra riga fa riferimento alle chiavi primarie di questa riga. La convalida non verifica l'esistenza delle chiavi primarie di questa riga nelle proprietà o nelle stringhe. Non controlla se una colonna è una chiave esterna in più tabelle. Ottenere gli errori di convalida chiamando MsiViewGetError. Funziona con i record di sola lettura e di sola lettura. Questa modalità non può essere utilizzata con una visualizzazione che contiene join.

[in] hRecord

Handle per il record da modificare.

Valore restituito

La funzione MsiViewModify restituisce i valori seguenti:

Si noti che in situazioni di memoria insufficiente questa funzione può generare un'eccezione STATUS_NO_MEMORY.

Commenti

I valori MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD e MSIMODIFY_VALIDATE_DELETE della funzione MsiViewModify non eseguono aggiornamenti effettivi; assicurano che i dati nel record siano validi. L'uso di queste enumerazioni di convalida richiede che il database contenga la tabella _Validation.

È possibile chiamare MSIMODIFY_UPDATE o MSIMODIFY_DELETE con un record immediatamente dopo l'utilizzo di MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY o MSIMODIFY_SEEK purché non sia stato modificato il 0° campo del record inserito o cercato.

Per eseguire qualsiasi istruzione SQL, è necessario creare una vista. Tuttavia, una vista che non crea un set di risultati, ad esempio CREATE TABLE o INSERT INTO, non può essere usata con MsiViewModify per aggiornare le tabelle tramite la vista.

Non è possibile recuperare un record contenente dati binari da un database e quindi usarlo per inserire i dati in un altro database. Per spostare i dati binari da un database a un altro, è necessario esportare i dati in un file e quindi importarli nel nuovo database usando una query e MsiRecordSetStream. Ciò garantisce che ogni database disponga di una propria copia dei dati binari.

Si noti che le azioni personalizzate possono solo aggiungere, modificare o rimuovere righe, colonne o tabelle temporanee da un database. Le azioni personalizzate non possono modificare i dati persistenti in un database, ad esempio i dati che fanno parte del database archiviato su disco. Per altre informazioni, vedere Accesso alla sessione del programma di installazione corrente dall'interno di un'azione personalizzata.

Se la funzione ha esito negativo, è possibile ottenere informazioni estese sull'errore usando MsiGetLastErrorRecord.

Requisiti

Requisito Valore
Client minimo supportato Windows Installer 5.0 in Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 in Windows Server 2008 o Windows Vista. Windows Installer in Windows Server 2003 o Windows XP
Piattaforma di destinazione Windows
Intestazione msiquery.h
Libreria Msi.lib
DLL Msi.dll

Vedi anche

Funzioni generali di accesso al database