Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » troubleshooting » Branje povezane tabele ODBC se nikoli ne konča

Branje povezane tabele ODBC se nikoli ne konča

Okolje

Lastna koda VBA, ki povezane tabele ODBC ali OData bere z DAO Recordset.GetRows, v kateri koli različici Accessa, z gonilnikom Microsoft ODBC Driver 18 for SQL Server ali z gonilnikom Wkl OData; drugi gonilniki niso podprti.

Vzrok

Ko vir odpove sredi rezultata – vrstica, ki je strežnik ne more izračunati, podatkovna storitev, ki odgovori s 429 (preveč zahtev), prekinjena povezava –, se GetRows nikoli ne vrne: DAO v zanki v eni niti pri 100 % obremenitvi procesorja kliče gonilnikov SQLFreeStmt, Access pa visi, dokler ga ne končate. MoveNext prek istih zapisov namesto tega sproži napako 3146 („ODBC call failed“).

Kontrolniki WKL berejo z MoveNext in prikažejo napako (DataError ali besedilo napake v kontrolniku); težava jih ne zadeva. Zadeva pa lastno kodo, ki zanje ali za kar koli drugega polni polja.

Rešitev

  1. Povezane tabele namesto z GetRows berite z zanko MoveNext in obravnavajte napako 3146:

    Dim rs As DAO.Recordset, n As Long
    On Error GoTo ReadFailed
    Set rs = CurrentDb.OpenRecordset("SELECT ID, Name FROM tblKunde", dbOpenSnapshot)
    Do Until rs.EOF
        n = n + 1
        rs.MoveNext
    Loop
    Exit Sub
    ReadFailed:
        ' 3146: the source failed while reading; DBEngine.Errors may hold the driver's text
        Debug.Print Err.Number, DBEngine.Errors(0).Description
  2. Če objekt polja za vsak stolpec preberete enkrat, zunaj zanke (Set fName = rs!Name), je zanka približno tako hitra kot GetRows.
  3. Proces, ki že visi, lahko končate samo v upravitelju opravil; neshranjeno delo v tem Accessu se izgubi.

Sorodne teme

sl/wiki/msaccess/comctl/troubleshooting/reading-a-linked-table-never-returns.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille