Hitro branje velikih množic iz povezanih tabel
Koda, ki povezano tabelo prebere od začetka do konca – izvoz, preverjalna zanka, poročilo v VBA –, je prek gonilnika občutno počasnejša, če odpre dynaset. S posnetkom (snapshot) prebere iste vrstice v delčku časa.
Pregled rešitve
Access (ACE) povezano tabelo bere na dva načina, prek gonilnika enako kot prek gonilnika ODBC SQL Serverja:
- Posnetek (
dbOpenSnapshot; poročila, kombinirana polja): en stavek, vrstice gonilnik pridobi po straneh. - Dynaset (
dbOpenDynaset; obrazci, podatkovni listi): najprej samo ključi, nato vsako prikazano vrstico posebej z… WHERE "ID" = ?. Prek gonilnika iz tega nastane po ena zahteva storitvi na vrstico.
Obrazec pridobi samo vrstice, ki jih prikaže, zato zamik ni opazen. V zanki prek vseh vrstic pa vsaka vrstica pomeni lastno zahtevo s stalnim časom zahteve HTTP. Posnetek se temu izogne.
Izvedba
Nabore zapisov, ki jih samo berete, odprite kot posnetek:
Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT Nummer, Bezeichnung FROM Artikel WHERE Gruppe = 'S'", dbOpenSnapshot) Do Until rs.EOF ' … obdelava … rs.MoveNext Loop rs.Close- Stolpce in vrstice omejite v stavku: pogoj in seznam stolpcev se pošljeta storitvi, ki vrne samo ustrezne vrstice.
- Berite z
MoveNext, ne zGetRows; glejte napotke.
Rezultat: posnetek prebere vse vrstice z nekaj zahtevami, dynaset pa potrebuje po eno za vsako obiskano vrstico. V omrežju vsaka zahteva doda svoj čas povratne poti; pri dynasetu torej vsaka vrstica.
Napotki
GetRowslahko ob napaki pri nadaljnjem branju obvisi – s katerim koli gonilnikom ODBC; glejte Access obvisi pri GetRows.- Spoje dveh povezanih tabel Access pošlje kot en stavek; brez naslova za lastne stavke ne uspejo, glejte "ODBC--call failed" pri vsotah ali spojih.
- Stiskanje največ prihrani pri počasnih povezavah; gonilnik odgovor sam razširi, če ga storitev stisne.
Sorodne teme
- Podprti SQL – kaj se storitvi pošlje kot pogoj