Sdílet prostřednictvím


Vázání sloupců sady výsledků

Aplikace můžou svázat libovolný počet sloupců sady výsledků, nebo nemusí svázat žádné sloupce vůbec. Když se načte řádek dat, ovladač vrátí data pro vázané sloupce do aplikace. Zda aplikace sváže všechny sloupce v sadě výsledků, závisí na aplikaci. Například aplikace, které generují sestavy, mají obvykle pevný formát; tyto aplikace vytvoří sadu výsledků obsahující všechny sloupce použité v sestavě a pak sváže a načte data pro všechny tyto sloupce. Aplikace, které zobrazují obrazovky plné dat, někdy umožňují uživateli rozhodnout, které sloupce se mají zobrazit; takové aplikace vytvoří sadu výsledků obsahující všechny sloupce, které uživatel může chtít, ale sváže a načte data pouze pro tyto sloupce vybrané uživatelem.

Data lze načíst z nevázaných sloupců voláním SQLGetData. To se běžně označuje jako načtení dlouhých dat, která často překračují délku jedné vyrovnávací paměti a musí být načtena v částech.

Sloupce lze kdykoli vázat, a to i po načtení řádků. Nové vazby se však neprojeví, dokud se příště nenačte řádek; nejsou použity na data z již načtených řádků.

Proměnná zůstává svázaná se sloupcem, dokud není na sloupec vázána jiná proměnná, dokud sloupec není nevázaný voláním sqlBindCol s ukazatelem null jako adresa proměnné, dokud nebudou všechny sloupce nevázané voláním SQLFreeStmt s možností SQL_UNBIND nebo až do vydání příkazu. Z tohoto důvodu musí aplikace mít jistotu, že všechny vázané proměnné zůstanou platné, pokud jsou vázány. Další informace naleznete v tématu Přidělování a uvolnění vyrovnávacích pamětí.

Vzhledem k tomu, že vazby sloupců jsou pouze informace přidružené ke struktuře příkazů, lze je nastavit v libovolném pořadí. Jsou také nezávislé na sadě výsledků. Předpokládejme například, že aplikace sváže sloupce sady výsledků vygenerované následujícím příkazem SQL:

SELECT * FROM Orders  

Pokud aplikace pak spustí příkaz SQL.

SELECT * FROM Lines  

u stejného popisovače příkazu jsou vazby sloupců pro první sadu výsledků stále účinné, protože tyto vazby jsou uloženy ve struktuře příkazu. Ve většině případů se jedná o špatnou programovací praxi a měli byste se jim vyhnout. Místo toho by aplikace měla volat SQLFreeStmt s možností SQL_UNBIND zrušit vazbu všech starých sloupců a pak svázat nové.