Nastavitev prepustnih poizvedb
Prepustna poizvedba (pass-through) pošlje svoj SQL nespremenjen podatkovni zbirki za storitvijo – za združitve, združevanje v skupine prek več tabel, spremembe mnogih vrstic ali klice procedur, ki jih ni mogoče izraziti kot zahtevo OData. Po isti poti se izvajajo tudi poizvedbe nad povezanimi tabelami, ki jih Access pošlje kot lastni stavek (združitve, podpoizvedbe).
Pregled rešitve
Gonilnik stavek posreduje na naslov za lastne stavke. Ta naslov navede bodisi storitev v svojem
dokumentu metapodatkov – v tem primeru na delovnem mestu ni treba ničesar nastavljati – bodisi povezava s PASSTHROUGH.
Ali se stavek sme izvesti, odloči storitev; gonilnik ga ne preverja.
Izvedba
Pri skrbniku storitve preverite, katere stavke storitev sprejema. To določa storitev, ne gonilnik. Podatkovni prehod Wkl.Data.Gateway razlikuje dve vrsti:
Vrsta Kaj se izvede Predpogoj v storitvi Preverjeni stavki SELECTz združitvami, podpoizvedbami,UNION, združevanjem v skupine;INSERT,UPDATE,DELETE; klic procedure. Storitev vsak navedeni objekt preveri glede na pravice klicateljaprivzeto vklopljeno ( AllowCheckedStatements); vsak klicatelj, katerega pravilo navaja alias. Pravilo samo za branje dovoli samo bralne stavkeNepreverjeni stavki poljuben SQL, vključno s spremembami sheme, s pravicami prijave, s katero se izvede AllowPassThrough: truepri aliasu in pravilo, ki ni samo za branje; pri ključu storitve ali pri prijavi aliasa dodatno pravicasqlPoizvedbe nad povezanimi tabelami, ki jih Access ustvari sam, so preverjeni stavki; običajno jih ni treba posebej omogočiti. Podrobnosti so v „Aliasi, katalog in osrednje pravilo“ (dokumentacija podatkovnega prehoda).
- V Accessu ustvarite prepustno poizvedbo: izberite „Create“ > „Query Design“, zaprite pogovorno okno za tabele, na traku izberite „Pass-Through“ in vnesite SQL.
Nastavite povezavo poizvedbe: v listu z lastnostmi pod „ODBC Connect Str“ vnesite isti niz kot pri povezanih tabelah iste datoteke, na primer
ODBC;DRIVER={Wkl OData};URL=https://daten.example.com/odata/v4/fachdaten/dbo/;AUTH=WINDOWSČe stavek ne vrne rezultata (
UPDATE,EXECbrez rezultata), nastavite „Returns Records“ na „No“.
Zaženite poizvedbo. Access prevzame polja in tipe iz opisa, ki ga vrne storitev.
Prek VBA:
Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("qryUmsatzJeKunde")
qd.Connect = "ODBC;DRIVER={Wkl OData};URL=https://daten.example.com/odata/v4/fachdaten/dbo/;AUTH=WINDOWS"
qd.SQL = "SELECT k.Name, SUM(u.Betrag) AS Summe FROM dbo.Umsatz u JOIN dbo.Kunde k ON k.Id = u.Kunde GROUP BY k.Name"
qd.ReturnsRecords = True
Rezultat: poizvedba vrne iste vrstice kot isti stavek neposredno v podatkovni zbirki.
Napotki
- En naslov za vse povezave iste datoteke. Access odprto povezavo deli z vsako poizvedbo, katere niz povezave vsebuje isto vrednost
DATABASE– tudi če se razlikuje vPASSTHROUGH. Če je bila najprej odprta povezana tabela brez naslova, prepustna poizvedba doseže gonilnik prek njene povezave in je zavrnjena.PASSTHROUGHzato navedite v vsaki povezavi v datoteki ali v nobeni (v tem primeru velja naslov storitve). - Števila vrstic spremembe Access ne prikaže. Po prepustni poizvedbi
RecordsAffectedv Accessu javi 0; Access gonilnika sploh ne vpraša zanj. Neposredno prek ODBC gonilnik javi pravilno število. - Vezane vrednosti (
?iz aplikacije) se podatkovni zbirki pošljejo kot parametri, nikoli kot besedilo. Binarna vrednost se pri tem prenese kodirana v base64; če mora stavek primerjati binarno vrednost, jo je bolje zapisati neposredno v stavek. - Brez naslednjih strani. Rezultat posredovanega stavka se prebere v celoti; omejuje ga omejitev števila vrstic storitve. Gonilnik odgovor bere vrstico za vrstico, medtem ko prihaja. Podatkovni prehod Wkl.Data.Gateway rezultat od 500 vrstic naprej pošlje pretočno; če se tak tok sredi prenosa prekine, aplikacija dobi
08S01namesto skrajšanega rezultata. - Brez naslova za lastne stavke gonilnik stavke, ki jih ni mogoče prevesti, zavrne z
42000; glejte "ODBC--call failed" pri vsotah ali združitvah.