Geplaatste bijwerk- en verwijderinstructies verwerken

Important

Deze functie wordt verwijderd in een toekomstige versie van Windows. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die deze functie momenteel gebruiken. Microsoft raadt aan de cursorfunctionaliteit van het stuurprogramma te gebruiken.

De cursorbibliotheek ondersteunt positioned update and delete-statements door de WHERE CURRENT OF-clausule in zulke statements te vervangen door een WHERE-clausule die de waarden in de cache voor elke gebonden kolom opsomt. De cursorbibliotheek geeft de nieuw gebouwde UPDATE en DELETE statements door aan de driver voor uitvoering. Voor gepositioneerde update-instructies werkt de cursorbibliotheek vervolgens zijn cache bij vanuit de waarden in de rowset-buffers en stelt de overeenkomstige waarde in de rijstatusarray in op SQL_ROW_UPDATED. Voor positioned delete-instructies stelt het de overeenkomstige waarde in de rijstatusarray in op SQL_ROW_DELETED.

Caution

De WHERE-clausule die door de cursorbibliotheek wordt geconstrueerd om de huidige rij te identificeren, kan falen in het identificeren van rijen, een andere rij of meer dan één rij identificeren. Voor meer informatie, zie Constructing Searched Statements, later in deze bijlage.

Gepositioneerde update- en delete-instructies zijn onderworpen aan de volgende beperkingen:

  • Gepositioneerde update- en delete-instructies kunnen alleen worden gebruikt in de volgende gevallen: wanneer een SELECT-instructie de resultaatset genereerde; wanneer de SELECT-instructie geen join, een UNION-clausule of een GROUP BY-clausule bevatte; en wanneer kolommen die een alias of expressie in de selectielijst gebruikten, niet gebonden waren met SQLBindCol.

  • Als een applicatie een positioned update- of delete-instructie voorbereidt, moet dit gebeuren nadat het SQLFetch of SQLFetchScroll heeft aangeroepen. Hoewel de cursorbibliotheek de instructie ter voorbereiding aan de driver stuurt, sluit deze de instructie en voert deze direct uit wanneer de applicatie SQLExecute aanroept.

  • Als de driver slechts één actieve instructie ondersteunt, haalt de cursorbibliotheek de rest van de resultaatset op en reketteert vervolgens de huidige rowset uit zijn cache voordat een gepositioneerde update- of delete-instructie wordt uitgevoerd. Als de applicatie vervolgens een functie aanroept die metadata teruggeeft in een resultaatset (bijvoorbeeld SQLNumResultCols of SQLDescribeCol), geeft de cursorbibliotheek een foutmelding.

  • Als een gepositioneerde update- of verwijderingsinstructie wordt uitgevoerd op een kolom van een tabel die een tijdstempelkolom bevat die automatisch wordt bijgewerkt telkens wanneer een update wordt uitgevoerd, zullen alle volgende gepositioneerde update- of delete-instructies falen als de tijdstempelkolom wordt begrensd. Dit gebeurt omdat de gezocht update- of delete-instructie die de cursorbibliotheek aanmaakt, de te updaten rij niet nauwkeurig identificeert. De waarde in de gezocht instructie voor de tijdstempelkolom zal niet overeenkomen met de automatisch bijgewerkte waarde van de tijdstempelkolom.