Sommario
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Convenzioni e caratteristiche utilizzate nel libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxv
File di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvi
Ringraziamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Parte 1: Ambiente e linguaggio VBA
Capitolo 1:
Utilizzo dell'editor VBA e debug del codice . . . . . . . . . . . . . . . . . . . . . . . . 3
Debug di codice in una maschera. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
Accesso all'editor VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
Finestra dell'applicazione e del codice VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
Creazione di moduli e routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Creazione di un modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Creazione di una routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Esecuzione di una subroutine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Esecuzione di una funzione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Visualizzazione e ricerca di codice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Finestra Dividi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Ricerca nel codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Debug di codice in un modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Comandi di debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Inserimento di punti di interruzione nel codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Comando Set Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Comandi di esecuzione dopo i punti di interruzione . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Visualizzazione di variabili nella finestra Variabili locali. . . . . . . . . . . . . . . . . . . . . . . . . 30
Traccia delle routine con Stack di chiamate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Controllo di variabili ed espressioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Aggiunta di espressioni di controllo condizionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Utilizzo della finestra Immediata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Modifica immediata del codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Utilizzo di Visualizzatore oggetti e della Guida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Configurazione della Guida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Utilizzo di Visualizzatore oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
ix
Book 1.indb ix
09/02/2012 11:26:25
x
Sommario
Capitolo 2:
Struttura del linguaggio VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Impostazioni di VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Commenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Impostazione di Option Explicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Selezione di Option Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Compilazione del codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Compilazione condizionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Utilizzo di costanti e variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Miglioramento della qualità del codice con le costanti . . . . . . . . . . . . . . . . . . . . . . . . . 49
Parola chiave Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Variabili e tipi di campi database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Gestione di valori NULL, IsNull e Nz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Utilizzo di variabili statiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Utilizzo di variabili globali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Ambito e durata delle variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Utilizzo di array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Strutture dei tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Funzioni e routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Gestione del codice di subroutine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Definizione dei parametri ByRef e ByValue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Routine private e public. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Parametri opzionali e denominati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Qualificatore ParamArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Organizzazione del codice in moduli e moduli di classe . . . . . . . . . . . . . . . . . . . . . . . . 76
Istruzioni di controllo e flusso di programma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Istruzioni IF… Then… Else…. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Istruzioni IIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Istruzioni Choose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Istruzioni Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Istruzioni TypeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Cicli For e For Each . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Cicli Do While e Do Until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Istruzioni Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Istruzione With. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
GoTo e GoSub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Continuazione di riga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Suddivisione di SQL in più righe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Capitolo 3:
Funzionalità del linguaggio VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Utilizzo delle funzioni incorporate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Funzioni di data e ora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Funzioni di stringa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Funzioni di dominio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Creazione di clausole Where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
SQL e virgolette incorporate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Utilizzo di funzioni VBA nelle query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Funzione Eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Book 1.indb x
09/02/2012 11:26:25
Sommario
xi
Shell e Sendkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Comando DoEvents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Oggetti e insiemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Variabili di oggetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Is Nothing, IsEmpty, IsObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Creazione di codice gestibile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Denominazione degli oggetti nei documenti Access. . . . . . . . . . . . . . . . . . . . . . . . . . 108
Denominazione dei campi del database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Denominazione dei controlli non associati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Denominazione delle variabili nel codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Rientro del codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Altre convenzioni di denominazione delle variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
VBA e macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Access Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Conversioni delle macro in VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Gestione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
On Error Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Oggetto Err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
On Error GoTo 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Sviluppo di un gestore errori generico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
OpenArgs e maschere di dialogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Err.Raise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Parte 2: Access Object Model e Data Access Objects (DAO)
Capitolo 4:
Utilizzo del modello oggetto di Access . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Metodi e proprietà dell'oggetto Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Metodo Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Metodo RunCommand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Semplificazione delle operazioni di filtro con BuildCriteria . . . . . . . . . . . . . . . . . . . . . 130
Campi memo ColumnHistory e Append only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Analisi di TempVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Richiamo del Generatore di espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Oggetti CurrentProject e CurrentData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Recupero dei dati sulla versione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Modifica delle proprietà di visualizzazione foglio dati della maschera . . . . . . . . . . 136
Dipendenze degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Oggetto DoCmd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Controllo di ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Verifica di dimensione e posizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Spostamenti nell'applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Scambio di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Manipolazione degli insiemi Forms e Reports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Utilizzo del Generatore di espressioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Riferimento a controlli in una maschera secondaria. . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Creazione di oggetti Access nel codice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Utilizzo dell'oggetto Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Modifica della forma del puntatore del mouse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Utilizzo di ActiveForm e ActiveControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Book 1.indb xi
09/02/2012 11:26:25
xii
Sommario
Sviluppo dell’interfaccia utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Opzioni di impostazione e acquisizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Blocco di Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Monitoraggio dello stato di avanzamento con SysCmd. . . . . . . . . . . . . . . . . . . . . . . . 155
Barre di stato personalizzate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Selezione di file con FileDialog di Office. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Capitolo 5:
Introduzione a Data Access Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Il modello DAO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
DAO, ADO e riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Utilizzo dei database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Oggetto DBEngine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Oggetto Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Transazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
La raccolta Error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Oggetto Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
CurrentDB, DBEngine e CodeDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Raccolta TableDefs e indici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Gestione delle proprietà del foglio dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Relazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Manipolazione dei dati con Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Ricerca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Segnalibri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Sintassi dei campi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Proprietà Filter e Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Aggiunta, modifica e aggiornamento di record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Campi di ricerca multivalore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Campi Attachment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Visualizzazione delle informazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Tipo di dati oggetti OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Campi calcolati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Clonazione e copia di Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Lettura di record in un array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Utilizzo di query nel codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
QueryDefs temporanei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
QueryDefs e Recordsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Creazione di QueryDefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Parametri QueryDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Analisi e documentazione degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Contenitori e documenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Proprietà oggetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Applicazioni di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Documentazione di un database utilizzando DAO. . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Ricerca di oggetti in un database utilizzando DAO . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Book 1.indb xii
09/02/2012 11:26:25
Sommario
xiii
Parte 3: Lavorare con maschere e report
Capitolo 6:
Utilizzo di maschere ed eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Visualizzazione di record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Maschere associate e non associate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Maschere a scelta obbligatoria e popup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Eventi Open e Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Filtro tramite i controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Filtro tramite la proprietà Filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Filtro tramite un'altra maschera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Private Sub cmdFilter_Click()
DoCmd.OpenForm "frmCustomersFilterPopup"
End Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Evento ApplyFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Eventi Unload e Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Utilizzo di RecordsetClone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Comandi Refresh, Repaint, Recalc e Requery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Chiamata di routine tra maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Interazione con i record su una maschera. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Evento Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Eventi Deactivate e Activate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Impostazione della proprietà Intervallo del timer dell'evento Timer . . . . . . . . . . . . 257
Eventi Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Operazioni di modifica e annullamento su un record. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Eventi BeforeUpdate e AfterUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Attivazione e disattivazione dei controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Eventi BeforeInsert e AfterInsert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Evento Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Eventi KeyPreview ed eventi tasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Evento Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Salvataggio di record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Capitolo 7:
Utilizzo di controlli ed eventi delle maschere . . . . . . . . . . . . . . . . . . . . . 273
Eventi di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Eventi Click e DblClick. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Evento BeforeUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Evento AfterUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Eventi GotFocus e LostFocus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Caselle combinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Sincronizzazione dei dati nei controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Casella combinata di tipo RowSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Colonne delle caselle combinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Modifica di Elenco valori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Modifica di Tabella/query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Caselle di riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Selezioni multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Selezioni multiple con due caselle di riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Utilizzo della casella di riepilogo come maschera secondaria . . . . . . . . . . . . . . . . . . . 292
Book 1.indb xiii
09/02/2012 11:26:25
xiv
Sommario
Controllo TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Aggiunta del controllo TreeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Popolamento dell'albero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Aggiunta di immagini. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Espansione e compressione dei nodi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Trascinamento della selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Eliminazione di un nodo con la ricorsione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Aggiunta di nodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Controllo Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Aggiornamento tra schede e controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Evento OnChange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Caricamento dinamico delle schede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Capitolo 8:
Creazione di eventi e report. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Sequenze di eventi nei report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Creazione di report drill-down ed evento Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Creazione di una griglia di caselle con l'evento Print . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Controllo del layout ed evento Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Controllo del layout nei report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Creazione di report da una maschera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Riduzione dei join con caselle combinate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Programmazione di un raggruppamento di report . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Compressione di dati sugli indirizzi con ParamArray . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Controllo delle stampanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Parte 4: Programmazione avanzata con le classi VBA
Capitolo 9:
Aggiunta di funzionalità con le classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Sviluppo del controllo dinamico Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Creazione di un modulo di classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Proprietà Let e Get degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Creazione di un oggetto con New e Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Insiemi di oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Creazione di classi di insiemi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Utilizzo di classi con Tab dinamico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Semplificazione dell'applicazione con le classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Creazione di una gerarchia di classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Creazione di una classe base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Classi derivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Capitolo 10: Utilizzo di classi ed eventi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Elaborazione WithEvents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Gestione di eventi delle maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Gestione di eventi dei controlli. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Elaborazione asincrona degli eventi e RaiseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Book 1.indb xiv
09/02/2012 11:26:25
Sommario
xv
Classi astratte e classi di implementazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Classi astratte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Classi di implementazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Implementazione di una classe astratta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Classi astratte ibride e classi non astratte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Metodi Friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Capitolo 11: Utilizzo di classi e maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
pertura di più istanze di una maschera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Classi e associazione di maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Associazione di una maschera a un oggetto Recordset DAO . . . . . . . . . . . . . . . . . . . 383
Associazione di una maschera a un oggetto Recordset ADO . . . . . . . . . . . . . . . . . . . 384
Controlli ActiveX ed eventi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Aggiunta di un controllo Slider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Controllo UpDown o Spin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Parte 5: Dati esterni e integrazione con Office
Capitolo 12: Collegamento di tabelle Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Collegamento Access-Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo del sistema di separazione database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gestione tabelle collegate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ricollegamento automatico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a Excel e a file di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a file di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configurazione del database di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione di un DSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connessione alle tabelle di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aggiornamento delle tabelle collegate di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . .
Connessione a una vista di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aggiornamento delle viste di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a SQL Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DSN di SQL Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a SQL Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a elenchi SharePoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ricollegamento degli elenchi di SharePoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collegamento a database Web di Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ricollegamento a un database Web di Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
396
397
398
398
406
406
407
407
407
410
416
417
418
419
420
420
424
426
428
430
432
435
Capitolo 13: Integrazione con Microsoft Office . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Utilizzo di oggetti e modelli a oggetti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Confronto tra associazione anticipata e tardiva e confronto tra
CreateObject e New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Parola chiave GetObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Apertura di file esistenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Book 1.indb xv
09/02/2012 11:26:25
xvi
Sommario
Connessione di Access a Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generazione di documenti da un documento segnaposto. . . . . . . . . . . . . . . . . . . . .
Apertura di un documento segnaposto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unione dei dati con i segnalibri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connessione di Access a Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scrittura di dati in un foglio di calcolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lettura di dati da un foglio di calcolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione di report con Excel collegato ad Access. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo di MS Query e delle Origini dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connessione di Access a Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estrazione di informazioni da Outlook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione di oggetti in Outlook. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo di Outlook per scrivere in Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
442
444
446
447
450
451
458
459
468
470
472
475
477
479
Parte 6: SQL Server e SQL Azure
Capitolo 14: Utilizzo di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Introduzione a SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Confronto tra programmi e servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Prestazioni client-server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Versioni di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
SQL Express e prodotti SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Percorsi dei file di database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
File di log e modelli di recupero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Istanze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Servizi di Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Database di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Tabelle di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Introduzione a SQL Server Management Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Esecuzione dello script di database di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Creazione di un nuovo database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Creazione di tabelle e relazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Diagrammi database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Tabelle, relazioni e file script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Modifica della struttura di una tabella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Utilizzo della proprietà Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Utilizzo delle viste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Interfaccia grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Viste e file script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Query CROSSTAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Utilizzo delle stored procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Introduzione a T-SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Definizione di variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Utilizzo di CAST e CONVERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Funzioni incorporate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Variabili di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Controllo del flusso di programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Gestione degli errori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Book 1.indb xvi
09/02/2012 11:26:25
Sommario
xvii
Utilizzo dei trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo delle transazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Livelli di isolamento transazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transazioni nidificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funzioni definite dall’utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operazioni preliminari per la sicurezza di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configurazione della superficie di attacco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Autenticazione di SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Autenticazione di Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
526
530
533
533
534
536
536
538
541
542
Capitolo 15: Upsize di Access a SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Pianificazione dell'upsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Tipi di dati testo e UNICODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Dati di tipo Data e ora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Dati booleani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Numeri interi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Numeri reali, decimali e a virgola mobile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Collegamenti ipertestuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
IMAGE, VARBINARY(Max), e Oggetto OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Dati Memo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Valuta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Allegati e dati a più valori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Campi richiesti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Cicli e percorsi a catena multipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Campi senza corrispondenza nella relazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Database replicati e numerazione automatica casuale . . . . . . . . . . . . . . . . . . . . . . . . 551
Indice univoco e valori null da ignorare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Timestamp e Rowversion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Schemi e sinonimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Upsize guidato e SQL Server Migration Assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Upsize guidato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Upsize per l'utilizzo di progetti ADP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
SSMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Sviluppo con Access e SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Costante dbSeeChanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Query pass-through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Stored procedure e tabelle temporanee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Gestione di query complesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Prestazioni e piani di esecuzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
SQL Server Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Capitolo 16: Utilizzo di SQL Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Introduzione a SQL Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione dei database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Impostazioni firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo di Management Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sviluppo tramite l'interfaccia browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Book 1.indb xvii
590
590
591
592
595
09/02/2012 11:26:25
xviii
Sommario
Migrazione dei database SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione di un set di tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trasferimento di dati tramite Importazione/Esportazione guidata SQL Server. . . .
Backup e copia di un database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Servizio di sincronizzazione dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data Sync Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gruppi e account di sincronizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modifica dei dati e della struttura del database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Risoluzione dei conflitti nei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modifica della struttura delle tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pianificazione e gestione della sicurezza. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Creazione di applicazioni multi-tentant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo di tabelle e viste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabelle e viste dell'applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gestione della protezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SQL Server Migration Assistant e accesso ad Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
596
597
599
603
604
605
609
611
612
613
614
616
617
619
622
623
627
Parte 7: Progettazione di applicazioni
Capitolo 17: Creazione delle applicazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
Sviluppo delle applicazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Spostamento nell'applicazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Progettazione della barra multifunzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ambienti a 32 e a 64 bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo del Registro di sistema di Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizzo dell'API di Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Completamento di un'applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schermate iniziali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Indicatore di stato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gestione degli errori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Blocco di un'applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Distribuzione delle applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Protezione del progetto con file ACCDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Distribuzione di Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Uno o più file dell'applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DSN e ricollegamento delle applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dipendenza dai riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aggiornamento delle applicazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
631
632
639
650
651
651
653
653
654
654
654
655
655
655
655
656
656
656
657
Capitolo 18: Utilizzo di ADO e ADOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
ActiveX Data Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cursori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operazioni asincrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Maschere e Recordset ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Book 1.indb xviii
660
661
662
662
09/02/2012 11:26:25
Sommario
xix
Lavorare con SQL Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stringhe di connessione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Connessione a SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Oggetto comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stored procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Multiple Active Result Sets e prestazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MARS e connessioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ADOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
663
663
664
666
666
668
669
672
673
Indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Autore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
Book 1.indb xix
09/02/2012 11:26:25