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 Modificare il metodo. 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 in particolare archivia un nome 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 usata per convalidare 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, usare l'enumerazione MSIMODIFY_VALIDATE_NEW per verificare di aggiungere dati validi e 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 diagnosticare il problema. MsiViewGetError indica la colonna in cui si è verificato l'errore e il valore enumerazione per risolvere il problema. Per altre informazioni, vedere Metodo GetError.
È anche possibile usare la convalida interna per assicurarsi che altri autori immettano i dati correttamente nella tabella personalizzata. Aggiungere ognuna delle colonne della tabella personalizzata alla tabella _Validation usando il nome della tabella e il nome della colonna personalizzati come chiave primaria. Specificare una descrizione o uno scopo di ogni colonna nella colonna Description 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 'Y'. In caso contrario, immettere un 'N'.
- Se la colonna è una colonna integer e può contenere un intervallo di 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 di colonna.
- Se i dati possono riguardare solo un numero specifico di valori (stringa o intero), usare la colonna Set per elencare i valori accettabili.
Di seguito è riportato un elenco delle colonne (oltre a Table, Column e Description) nella tabella _Validation che può essere compilata se la colonna è del tipo specificato. Si noti che non è necessario compilare tutte le colonne.
Tipo | Colonne |
---|---|
Integer | Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set |
string | Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue |
Binary | 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 della chiave esterna o del campo. 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 chiave esterna potenziale, viene eseguito il ciclo attraverso tale colonna per verificare se uno dei valori di riferimento nella riga "eliminata". Un errore restituisce un errore indica che si interrompe l'integrità relazionale del database eliminando la riga.