Access
 sql >> Database >  >> RDS >> Access

In che modo Access comunica con le origini dati ODBC? Parte 1

Questa è una serie di articoli in sei parti sulla traccia ODBC per aiutare gli sviluppatori di Access a risolvere i problemi e utilizzare Access durante lo sviluppo di un'applicazione che utilizza origini dati ODBC, in genere ma non esclusivamente SQL Server. La serie mira a dimostrare come utilizzare la traccia ODBC per monitorare le istruzioni SQL ODBC che Access genera in background quando si lavora con oggetti come query, moduli o report o anche durante l'esecuzione di codice VBA su oggetti DAO. La serie mostrerà anche come Access formula le istruzioni SQL ODBC. Infine, la serie tratterà come interpretare il tracciato e identificare potenziali problemi. Gli articoli verranno stampati quotidianamente fino alla conclusione della serie.

AGGIORNAMENTO: Aggiunta una chiave di registro per l'installazione C2R a 32 bit su Windows a 64 bit. Grazie, Jack MacDonald!

Quante volte hai sentito "Non so perché, ma muovere la maniglia funziona e basta"? Ogni volta che ricevo quel tipo di risposta, mi irrita perché è così insoddisfacente. Sarei molto preoccupato se il mio idraulico mi dicesse che non sa che c'è una trappola per p e continuasse a riferirsi ad essa come "quella cosa sinuosa amijig sotto il lavandino". Allo stesso modo, i miei clienti dovrebbero essere molto preoccupati se dicessi "Non so perché quella query è stata lenta, quindi ho provato alcune cose casuali e, ehi, ho trovato un trucco che funziona. Non so perché, però. È forse uno dei più grandi flagelli dello sviluppo del software:stiamo lavorando con un sistema complesso che equivale a passare da 0 a 1 molto rapidamente in una certa sequenza e ci si aspetta che sappia perché non ha funzionato in questo modo invece di in questo modo.

Credo che valga la pena dedicare tempo e investimenti allo sviluppatore che lavora con Access e VBA per conoscere davvero cosa sta facendo, specialmente con un back-end ODBC. Abbiamo avuto scenari di migrazione in cui potremmo non avere accesso agli strumenti di profilazione lato server per diversi motivi, ma questo non dovrebbe essere un motivo per scrollare le spalle e premere casualmente i pulsanti finché qualcosa non funziona. Ancora più importante, avere una solida comprensione di ciò che sta succedendo sotto il cofano ti aiuta a diventare molto più bravo nel prevedere quali correzioni per le prestazioni devi applicare per un determinato scenario. Dichiaro che anche se tutto ciò che hai fatto è stato leggere la serie e imparare come funziona Access con le origini dati ODBC, sarai molto più attrezzato semplicemente perché sai cosa probabilmente farà Access.

Per scenari più complicati, il tracciamento di solito può fare miracoli nel rivelare perché le cose stanno andando così lentamente. Poiché è possibile tracciarlo sul lato di accesso anziché sul server, non richiede autorizzazioni elevate oltre all'accesso alla chiave del Registro di sistema per abilitare la traccia ODBC. Il vantaggio aggiuntivo è che funziona per qualsiasi origine dati ODBC, non solo SQL Server, quindi se hai un client che utilizza MySQL o PostgreSQL di cui non sai nulla, la traccia ODBC ti aiuterà comunque a identificare potenziali problemi che puoi quindi affrontare direttamente su Accesso lato'.

La serie si concentrerà solo nel contesto di Access e DAO. Le cose potrebbero essere diverse quando utilizziamo ADO in VBA, ma per ora non è nell'ambito di applicazione perché ogni volta che utilizziamo DAO, Access farà diverse cose per soddisfare le nostre richieste altrimenti impossibili. Un buon esempio è una query di Access che fa riferimento a una funzione VBA. Non è possibile eseguire la funzione VBA su SQL Server, ma Access non si lamenta. Allora, cosa sta succedendo davvero dietro le quinte? Possiamo scoprire cosa sta facendo Access tracciando i comandi SQL ODBC che invia alle origini dati ODBC.

Molte delle informazioni presentate in questa serie di articoli sono rese possibili con l'aiuto del vecchio whitepaper di Microsoft su Jet &ODBC. Anche se penso che le informazioni siano ancora molto utili, sono anche piuttosto dense e richiedono un alto livello di competenza tecnica. Si spera che attraverso la serie di tracciati aiuti a dare un senso e a presentare le informazioni in un modo più accessibile.

Perché dovremmo tracciare ODBC? In che modo mi aiuterà?

Se hai mai riscontrato uno di questi sintomi:

O qualsiasi altro errore quando si lavora con una tabella collegata ODBC, quindi è utile capire perché stai ricevendo quei messaggi e come puoi risolverli. Una soluzione comune applicata da diversi sviluppatori di Access consiste nell'aggiungere Requery o provare a salvare i record. Sebbene ciò possa risolvere alcuni dei problemi, non è raro vedere un modulo di accesso complesso cosparso di Requery e diverse catene di eventi a cascata che le prestazioni iniziano a risentirne. Invece di cospargerli come se fossero polvere magica, dovremmo essere più chirurgici nei nostri approcci per risolvere i problemi con l'applicazione.

Un altro motivo convincente è essere in grado di analizzare perché un particolare modulo A impiega 10 secondi per aprirsi ma un modulo simile B solo 2 secondi per aprirsi. Invece di prenderti del tempo per rimescolare le cose per trovare ciò che rende la forma A più aperta, puoi iniziare tracciando e confrontare la differenza e poi concentrarti sulla differenza per aiutarti a risolvere i problemi in modo più diretto.

Anche se non sempre finiamo per rintracciare ogni volta che si verificano problemi di prestazioni, avere la familiarità di ciò che Access dovrebbe fare è di immenso valore. Quindi, anche se tutto ciò che hai fatto è leggere la serie, si spera che apprezzerai meglio come lavorare con Access piuttosto che contro.

Accedi ai dialetti SQL e ODBC SQL

Prima di entrare nei dettagli, dobbiamo riconoscere che ogni volta che Access funziona con un'origine dati ODBC, deve prima tradurre la sua istruzione SQL in un'istruzione SQL ODBC valida. Questo è distinto dal dialetto SQL di destinazione del back-end (ad es. SQL Server, Oracle, MySQL, PostgreSQL). La grammatica SQL ODBC è descritta qui. Puoi anche vedere un elenco di tutte le funzioni supportate dal livello ODBC. È importante ricordare che quando utilizziamo ODBC, in realtà non stiamo traducendo direttamente da Access SQL al dialetto SQL nativo dell'origine dati. Piuttosto, stiamo traducendo Access SQL in ODBC SQL che il driver ODBC per l'origine dati specificata tradurrà quindi nel suo dialetto nativo. Se riesci a immaginare un madrelingua giapponese e un madrelingua francese che non parlano la lingua dell'altro ma parlano entrambi inglese, questo è fondamentalmente ciò che sta accadendo sul livello ODBC. Un'ulteriore conseguenza è che solo perché il dialetto ODBC supporta la funzionalità X, non significa che nessuna delle parti la supporti. Entrambi i lati devono supportare quella caratteristica X affinché sia ​​portabile sul livello ODBC. Fortunatamente, la maggior parte dei driver ODBC là fuori sono abbastanza ampi e fanno un buon lavoro nel coprire la maggior parte delle funzionalità. Se dovessi riscontrare una situazione in cui una funzionalità dovrebbe funzionare ma non funziona, potrebbe essere utile consultare la documentazione del driver ODBC per verificare che sia supportata.

Abilitazione della traccia SQL ODBC

La prima cosa da fare per poter sbirciare dietro le quinte è abilitare la traccia SQL ODBC. Sebbene sia possibile utilizzare SQL Server Profiler, è molto utile osservare come Access formatta l'SQL ODBC. Funzionerà con qualsiasi origine dati ODBC e non solo con SQL Server. Ancora più cruciale, questo ci consente di vedere come Access traduce le sue query in ODBC in un modo più diretto rispetto a SQL Server Profiler o altri strumenti di profilatura lato server. Non sono necessarie autorizzazioni speciali per utilizzare la traccia SQL ODBC, mentre gli strumenti di profilatura lato server potrebbero richiedere un livello elevato di autorizzazione per l'uso. L'abilitazione della traccia SQL ODBC è un'impostazione del registro, quindi possiamo configurarla andando alla chiave di registro appropriata:

Database Jet o versioni di Office precedenti al 2007

Per Windows a 32 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\ODBC

Per il motore Jet a 32 bit o Office precedente al 2007 su Windows a 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\ODBC

Nota:non esistono versioni a 64 bit del motore Jet deprecato.

Office dal 2007 al 2016 (installazioni MSI)

Per Office a 32 bit su Windows a 32 bit o Office a 64 bit su Windows a 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\X.Y\Access Connectivity Engine\Engines\ODBC

Per Office a 32 bit su Windows a 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\X.Y\Access Connectivity Engine\Engines\ODBC

(dove X.Y corrisponde alla versione di Office installata)

Office 2016 o Office 365 (fai clic per eseguire)

Per Office a 32 bit su Windows a 32 bit o Office a 64 bit su Windows a 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ODBC

Per Office a 32 bit su Windows a 64 bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ODBC

Sotto la chiave, individua la chiave TraceSQLMode e cambia il valore da 0 a 1 .

L'accesso dovrà essere riavviato se è già aperto. Altrimenti, aprilo ed esegui alcune query. Un file chiamato sqlout.txt verrà creato nella directory corrente. In genere si trova nella stessa cartella del file di Access OPPURE nella cartella dei documenti. In alternativa, puoi eseguire la funzione VBA CurDir per determinare la directory corrente.

Consiglio di utilizzare Notepad ++ o un editor di testo simile che ha la capacità di rilevare che è stato modificato. Verrà quindi richiesto di ricaricare il file. Ciò ti consente di visualizzare i nuovi aggiornamenti poiché Access emette nuovi comandi al file di testo senza riaprire continuamente. Quando attivi il file di testo, Notepad++ mostrerà una finestra di dialogo:

Puoi quindi fare clic su Yes per visualizzare gli ultimi comandi SQL ODBC emessi da Access. Poiché Access può emettere diversi comandi SQL ODBC, il registro può aumentare rapidamente. Trovo conveniente arrivare al punto in cui voglio tracciare qualcosa (ad esempio per aprire un modulo o eseguire una query), quindi passo a sqlout.txt , ricaricalo, quindi seleziona tutto, elimina tutto il testo e quindi salva il file ora vuoto. In questo modo, posso eseguire l'azione che voglio tracciare, quindi vedere solo i comandi ODBC pertinenti senza tutti gli altri rumori che non hanno nulla a che fare con l'azione tracciata.

Ecco un breve video dimostrativo:

Conclusioni

Hai imparato come attivare la traccia ODBC e visualizzare l'output generato da Access. Puoi vedere che puoi raccogliere l'output anche da azioni come semplicemente aprire una tabella o eseguire una query. Ciò fornisce informazioni dettagliate sul tipo di query SQL che Access sta effettivamente inviando all'origine dati ODBC.

Come puoi vedere, la traccia SQL ODBC acquisisce tutti i comandi SQL ODBC emessi da Access anche se non li hai emessi direttamente. Pertanto, puoi usarlo in qualsiasi momento in cui stai riscontrando rallentamenti per i quali non hai una buona spiegazione. Ad esempio, supponi di avere un modulo lento da aprire e non sei sicuro che sia il tuo codice VBA nel Open del modulo. o Load eventi o la fonte di record che è il problema. Una strategia potrebbe essere quella di configurare l'applicazione Access in modo che stai per aprire quel modulo, cancellare il sqlout.txt file di testo, quindi procedere con l'apertura del modulo. È quindi possibile rivedere le istruzioni SQL ODBC tracciate e determinare se ce ne sono che possono essere migliorate.

Ciò è particolarmente utile quando si ha a che fare con un modulo o un report complesso che contiene anche sottomaschera/sottoreport o contiene caselle combinate o caselle di riepilogo che inviano le proprie query per soddisfare la proprietà rowsource.

Nel prossimo articolo analizzeremo l'output durante la navigazione tra i record.

Hai bisogno di aiuto con Microsoft Access? Contatta il nostro team al numero 773-809-5456 o inviaci un'e-mail a [email protected].