Access pri vsotah ali združitvah javi "ODBC--call failed"
Poizvedba nad povezanimi tabelami gonilnika se konča z napako 3146 “ODBC–call failed”, medtem ko preproste poizvedbe nad istimi tabelami delujejo. Značilni primeri: poizvedba z vsotami (“Sum”, “Count”, “Group By”), združitev dveh povezanih tabel, podpoizvedba.
Okolje
Microsoft Access in Access Runtime s povezanimi tabelami prek {Wkl OData}; prav tako vsaka druga
aplikacija ODBC, ki pošilja take stavke.
Vzrok
Access vsote, skupine in združitve nad povezanimi tabelami pošlje gonilniku kot en stavek in jih ne izračuna sam, če gonilnik stavek zavrne (tudi kadar gonilnik ne javi skladnosti SQL). Tudi gonilnik ničesar ne izračuna lokalno: stavek prevede, posreduje ali zavrne:
| Stavek | Deluje, če … |
|---|---|
vsote, skupine, HAVING, DISTINCT nad eno tabelo | storitev javi podporo za združevanje v skupine ($apply) ali obstaja naslov za lastne stavke |
združitev dveh tabel, podpoizvedba, računanje med agregati (SUM(a) - SUM(b)) | obstaja naslov za lastne stavke |
Če manjka oboje, gonilnik stavek zavrne s SQLSTATE 42000, Access pa prikaže samo 3146. Podatkovni prehod
Wkl.Data.Gateway naslov navede vsakemu klicatelju, katerega pravilo navaja alias, dokler so vklopljeni
pri aliasu preverjeni stavki (privzeto). Če prehod stavek zavrne, ker objekt, ki ga navaja, ni odobren,
prispe 403 kot 28000, Access pa spet prikaže samo 3146.
Odprava
- Razlog preberite v sledenju gonilnika: v povezavi nastavite
TRACEFILE=ali spremenljivko okoljaWKL_ODATA_ODBC_TRACE, znova zaženite Access in ponovite poizvedbo. Če tam piše, da storitev ne podpira združevanja v skupine ali da stavka ni mogoče prevesti, nadaljujte z 2. korakom. - Naj skrbnik storitve preveri, ali storitev od vašega klicatelja sprejema lastne stavke: pri podatkovnem prehodu Wkl.Data.Gateway, ali so vklopljeni pri aliasu preverjeni stavki in ali pravilo odobri alias in vsak objekt poizvedbe; glejte Nastavitev prepustnih poizvedb,
- korak. Če storitev naslov javi sama, na delovnem mestu ni treba ničesar spreminjati. Če povezave v datoteki Access
PASSTHROUGHnavajajo izrecno, ga mora navajati vsaka povezava v tej datoteki.
- Če storitev lastnih stavkov ne sprejema, poizvedbo preoblikujte: vsote nad eno tabelo delujejo tudi brez tega, če storitev podpira
$apply; združitev ustvarite kot pogled v podatkovni zbirki in povežite pogled. - Po spremembi storitve znova zaženite Access: Access uporablja eno povezavo za vsako vrednost
DATABASEin podatke storitve prebere ob povezovanju.
Preverjanje
Ista poizvedba vrne vrstice. V sledenju je namesto zavrnitve zahteva z $apply= (združevanje v
skupine) ali zahteva na naslov za lastne stavke (…/sql.json).