Convalida interna
Quando si crea un pacchetto di installazione, è possibile usare la funzione MsiViewModify o il metodo View.Modify per assicurarsi che i dati immessi siano sintatticamente corretti. Per altre informazioni, vedere Metodo Modify. Al livello più basso, la colonna di una tabella di database può archiviare numeri interi (brevi o lunghi), stringhe o dati binari. Tuttavia, un pacchetto di installazione richiede numeri interi o stringhe specifici in determinate tabelle. Queste specifiche vengono mantenute nella tabella _Validation. Ad esempio, la colonna FileName della tabella file è una colonna stringa, ma archivia in modo specifico un nome di file. Pertanto, non solo la voce deve essere una stringa, ma deve anche seguire i requisiti per la denominazione dei file.
I vari valori di enumerazione di convalida usati con la funzione MsiViewModify consentono la convalida immediata a livelli diversi. L'enumerazione MSIMODIFY_VALIDATE_FIELD può essere utilizzata per convalidare i singoli campi di un record. Non convalida le chiavi esterne. L'enumerazione MSIMODIFY_VALIDATE convalida un'intera riga e include la convalida della chiave esterna. Se si inserisce una nuova riga in una tabella, utilizzare l'enumerazione MSIMODIFY_VALIDATE_NEW per verificare di aggiungere dati validi e di usare chiavi primarie univoche. Un inserimento ha esito negativo se le chiavi primarie non sono univoche. Se una chiamata a MsiViewModify con una delle enumerazioni di convalida restituisce un errore, è possibile effettuare chiamate ripetute a MsiViewGetError per la diagnosi del problema. MsiViewGetError indica la colonna in cui si è verificato l'errore e il valore di enumerazione per risolvere il problema. Per altre informazioni, vedere metodo GetError.
È anche possibile usare la convalida interna per assicurarsi che altri autori immettano correttamente i dati nella tabella personalizzata. Aggiungere ogni colonna della tabella personalizzata alla tabella _Validation usando il nome della tabella e la colonna personalizzati come chiave primaria. Specificare una descrizione o uno scopo di ogni colonna nella colonna Descrizione della tabella _Validation. Immettere i requisiti applicabili per ogni colonna usando le colonne Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Category e Set:
- Se la colonna è Nullable, immettere un valore "Y". In caso contrario, immettere "N".
- Se la colonna è una colonna integer e può contenere un intervallo di numeri interi, immettere tale intervallo usando le colonne MinValue e MaxValue.
- Le colonne chiave esterna vengono identificate usando le colonne KeyTable e KeyColumn.
- Per le colonne stringa, specificare una categoria, ad esempio Nome file, GUID o Identificatore. Per altre informazioni, vedere tipi di dati delle colonne.
- Se i dati possono riguardare solo un numero specifico di valori (stringa o integer), utilizzare la colonna Imposta per elencare i valori accettabili.
Di seguito è riportato un elenco delle colonne (oltre a Tabella, Colonna e Descrizione) nella tabella _Validation che può essere compilata se la colonna è del tipo specificato. Si noti che non è necessario compilare tutte le colonne.
Digitare | Colonne |
---|---|
Numero intero | Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set |
Corda | Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue |
Binario | Nullable, Category (Category deve essere "Binary") |
Gli ambienti di creazione possono usare MSIMODIFY_VALIDATE_DELETE. Questa enumerazione presuppone che si voglia eliminare la riga. Non viene eseguita alcuna convalida del campo o della chiave esterna. Questa enumerazione esegue effettivamente una convalida della chiave esterna inversa. Controlla la tabella _Validation per i riferimenti nelle colonne KeyTable e KeyColumn per la tabella a cui appartiene la riga "eliminata". Se sono presenti colonne che elencano la tabella contenente la riga "eliminata" come potenziale chiave esterna, scorre la colonna per verificare se uno dei valori di riferimento nella riga "eliminata". Se viene restituito un errore, si interrompe l'integrità relazionale del database eliminando la riga.