L_C_CHAR, addr TelNo, sizeof TelNo,addr TelNoLength
现在,结果集被返回.我们要绑定结果集的所有三列到我们提供的缓冲区中.这是调用SQLBindCol来实现的.注意我们要对每一列分别调用.并且我们并不需要绑定所有的列:只要绑定要获得数据的列就行了.
mov row,0.while TRUEmov byte ptr ds:[TheName],0mov byte ptr ds:[TheSurname],0mov byte ptr ds:[TelNo],0
当列中没有数据时,我们初始化缓冲区为NULLs.更好的方法是用SQLBindCol指定的变量中数据的长度.在我们的例子中,我们可以检查NameLength, SurnameLength和TelNoLength中的值的确切长度.
invoke SQLFetch, hStmt.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFOmov lvi.imask,LVIF_TEXT+LVIF_PARAMpush rowpop lvi.iItem mov lvi.iSubItem,0mov lvi.pszText, offset TheNamepush rowpop lvi.lParaminvoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
其它都很简单了.调用SQLFetch 来获得结果集的一行,并将其存入listview control的缓冲区中.当没有更多的行供检索时(已到达文件尾), SQLFetch返回SQL_NO_DATA并且程序跳出循环.
invoke SQLCloseCursor, hStmtinvoke SQLFreeHandle, SQL_HANDLE_STMT, hStmt
当完成对结果集的操作时,调用SQLCloseCursor关闭结果集并调用SQLFreeHandle释放语句句柄.
当用户选择"Query"命令,程序显示另一个对话框供用户输入要查询的名字.
.elseif uMsg==WM_INITDIALOGinvoke ShowWindow, hList, SW_SHOWinvoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFOinvoke lstrcpy, addr Conn, addr SQLStatementinvoke lstrcat, addr Conn, addr WhereStatementinvoke SQLBindParameter,hStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,25,0, addr SearchName,25,addr StrLeninvoke SQLPrepare, hStmt, addr Conn, sizeof Conn
对话框做的第一件事是显示listview control.接下来分配一个语句句柄以创建SQL语句.这个SQL语句有一个"where"子句及一个参数标志符"?". 完整的SQL语句是:
select * from上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
|