Hàm tương ứng với lệnh FETCH trong SQL nhỳng hoặc PSM là SQLFetch(sh)
trong đú sh là một handle lệnh. Chỳng ta giả thiết lệnh do sh trỏ đến đó được thực hiện, hoặc việc lấy ra sẽ gõy ra một lỗi. SQLFetch, giống như tất cả cỏc hàm CLI, trả lại một giỏ trị kiểu SQLRETURN chỉ ra hoặc thành cụng hoặc bị lỗi. Chỳng ta cú thể nhận thấy rằng giỏ trị trở về do hằng ký hiệu SQL_NO_DATA biểu thị, chỉ ra rằng khụng bộ nào cũn lại trong kết quả truy vấn. Giống như trong cỏc vớ dụ trước đõy của chỳng ta về việc lấy ra, giỏ trị này sẽ được sử dụng để đi ra khỏi vũng lặp mà trong đú chỳng ta lấy ra liờn tiếp cỏc bộ từ kết quả truy vấn.
Tuy nhiờn, nếu chỳng ta đặt sau SQLExecute của vớ dụ 8.19 một hoặc nhiều dũng gọi SQLFetch thỡ bộ xuất hiện ở đõu? Cõu trả lời là cỏc thành phần của nú đi vào một trong cỏc bản ghi mụ tả liờn kết với lệnh mà handle của nú xuất hiện trong lời gọi SQLFetch. Chỳng ta cú thể rỳt ra cựng một thành phần tại mỗi lần thử bằng cỏch liờn kết thành phần với một biến ngụn ngữ chủ trước khi chỳng ta bắt đầu lấy ra. Hàm làm nhiệm vụ đú là
SQLBindCol (sh, colNo, colType, pVar, varSize, varInfo) í nghĩa của sỏu đối số này là:
1. sh là handle của của lệnh liờn quan
2. colNo là số của thành phần (bờn trong bộ) mà chỳng ta nhận giỏ trị của nú
3. colType là mó của kiểu của biến mà giỏ trị của thành phần được đặt vào đấy. Vớ dụ về cỏc mó do sqlcli.h cung cấp là SQL_CHAR đối với cỏc mảng hoặc cỏc xõu ký tự, SQL_INTEGER đối với cỏc số nguyờn.
4. pVar là một biến trỏ chỉ đến biến mà giỏ trị được đặt vào đú.
6. varInfor là biến trỏ chỉ đến một số nguyờn cú thể được SQLBinCol sử dụng để cung cấp thụng tin phụ về giỏ trị được sản xuất ra.
Vớ dụ 3.20. Chỳng ta làm lại toàn bộ hàm HangLuong từ hỡnh 3.4 bằng cỏch sử dụng cỏc dũng gọi CLI thay cho SQL nhỳng. Chỳng ta bắt đầu từ Hỡnh 3.18 nhưng để ngắn gọn, chỳng ta bỏ qua cỏc kiểm tra lỗi trừ kiểm tra xem cú phải SQLFetch chỉ ra rằng khụng cũn bộ nào xuất hiện hay khụng. Chương trỡnh được chỉ ra ở hỡnh 3.19:
1) #include sqlcli.h 2) void Hạnglương () { 3) int i, Chuso, Đem[15]; 4) SQLHENV MyEnv; 5) SQLHDBC MyCon;
6) SQLHSTMT execStat
7) SQLINTEGER luong, luongInfo;
8) SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, &myEnv);
9) SQLAllocHandle(SQL_HANDLE_DCB,myEnv, &myCon); 10) SQLAllocHandle(SQL_HANDLE_STMT,myCon,&execStat); 11) SQLPrepare(execStat, “SELECT Luong FROM NHANVIEN “, SQL_NTS);
12) SQLExecute(execStat) ;
13) SQLBindCol(execStat, 1, SQL_INTEGER, &luong, size(luong), &luongInfo);
14) While(SQLFetch (execStat != SQL_NO_DATA { 15) Chuso = 1;
16) while((LuongNV /= 10) > 0) Chuso++;
8) if(Chuso <= 14) Dem[Chuso]++; }
9) for (i=0; i<15; i++)
i, Dem[i]); }
Hỡnh 3.19 Đếm số nhõn viờn cú lương gồm 1 chữ số, 2 chữ số, ….
Dũng 3) khai bỏo cỏc biến cục bộ giống như trong SQL nhỳng và cỏc dũng 4) và 7) khai bỏo cỏc biến cục bộ thờm bằng cỏch sử dụng cỏc kiểu được sqlcli.h cung cấp.