?? odbc-c4.htm
字號:
<html>
<head>
<title>ODBC Programming Tutorial: 檢索結果</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#000000" text="#FFFFFF" link="#FFFFCC" vlink="#ffFFCC" alink="#CCFFCC">
<h1 align="center"><font face="Tahoma" color="#FFFFCC">獲得結果</font></h1>
<p><font face="Tahoma" size="-1">在本章中,我們來學習如何獲得SQL語句的執行結果。</font></p>
<p><font face="Tahoma" size="-1">我們稱由查詢返回的一組記錄為一個<font color="#CCFFCC"><b>
結果集(result set)</b></font> (或在VB中被稱為recordset).檢索結果通常分為以下幾個步驟:</font></p>
<ol>
<li><font face="Tahoma" size="-1">確認一個結果集是否可用。</font></li>
<li><font face="Tahoma" size="-1">將結果集的列綁定在適當的變量上。</font></li>
<li><font face="Tahoma" size="-1">取得行</font></li>
</ol>
<p><font face="Tahoma" size="-1">完成對結果集的操作后,我們必須調用<font color="#FFFFCC"><b>SQLCloseCursor</b></font>來銷毀它.</font></p>
<h4><font face="Tahoma" color="#FFFFCC">確認一個結果集是否可用</font></h4>
<p><font face="Tahoma" size="-1">有時在執行SQL語句后,我們就已經知道結果集是否可用了。如果執行的語句并不是返回結果集的類型,我們就知道結果集不可用了。但有時我們不太清楚使用的SQL語句是什么類型,比如說,讓用戶自行輸入SQL語句。這時,我們必須確認是否有結果集被建立,這可以通過<font color="#FFFFCC"><b>SQLNumResultCols</b></font>函數實現。如果結果集存在,則該函數返回結果集中的列數(字段數)。語法如下:</font></p>
<blockquote>
<pre><b><font face="Tahoma" color="#33CCCC">SQLNumResultCols proto StatementHandle:DWORD, pNumCols:DWORD</font></b></pre>
</blockquote>
<ul>
<li><font face="Tahoma" size="-1"><b><font color="#FFCCFF">StatementHandle</font></b>
語句句柄</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pNumCols</font></b></font><font face="Tahoma" size="-1">
指向一個雙字的指針,其中包含了結果集的列數。</font></li>
</ul>
<p><font face="Tahoma" size="-1">如果<font color="#FFCCFF"><b>
pNumCols</b></font>指向的值為0,那么表明結果集不存在。</font></p>
<h4><font face="Tahoma" color="#FFFFCC">綁定列</font></h4>
<p><font face="Tahoma" size="-1">與綁定一個變量到SQL語句的參數相同,我們連接(綁定)一個變量到結果集中的某一列。這里要用到的函數是<font color="#FFFFCC"><b>SQLBindCol</b></font>,語法如下:</font></p>
<blockquote>
<pre><b><font face="Tahoma" color="#CCFFCC">SQLBindCol proto StatementHandle:DWORD,<br> ColumnNumber:DWORD,<br> TargetType:DWORD,<br> TargetValuePtr:DWORD,<br> BufferLength:DWORD,<br> pStrLenOrIndPtr:DWORD</font></b></pre>
</blockquote>
<ul>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">StatementHandle</font></b></font><font face="Tahoma" size="-1">
語句句柄</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">ColumnNumber</font></b></font><font face="Tahoma" size="-1">
結果集中要綁定的列序數.列序數從1開始.列0是書簽(bookmark)列.</font></li>
<li><font face="Tahoma" size="-1"><b><font color="#FFCCFF">TargetType </font></b>The
指示<font color="#FFCCFF"><b>
TargetValuePtr</b></font>指向的變量(緩沖區)的類型的常數。</font></li>
<li><font face="Tahoma" size="-1"><b><font color="#FFCCFF">TargetValuePtr</font></b>
指向將要捆綁到列的變量或緩沖區的指針。當調用<font color="#FFFFCC"><b>SQLFetch</b></font>來獲得結果集中的行時,本參數指向的變量或緩沖區將被填入被綁定的列的值。</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">BufferLength </font></b></font><font face="Tahoma" size="-1">由<font color="#FFCCFF"><b>TargetValuePtr</b></font>指向的緩沖區的長度。</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pStrLenOrIndPtr</font></b></font><font face="Tahoma" size="-1">
參見前章<font color="#FFFFCC"><b>SQLBindParameter</b></font></font></li>
</ul>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">例子:</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.data?<br>
buffer db 21 dup(?)<br>
DataLength dd ? ;調用SQLFetch后,被填入緩沖區的字符串的長度</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.code<br>
.....<br>
invoke SQLBindCol, hStmt, 1, SQL_C_CHAR, addr
buffer, 21, addr DataLength</font></b></font></p>
<h4><font face="Tahoma" color="#FFFFCC">取得一行</font></h4>
<p><font face="Tahoma" size="-1">非常簡單.先調用<font color="#FFFFCC"><b>SQLFetch</b></font>
檢索結果集的一列到綁定的變量中。當<font color="#FFFFCC"><b>SQLFetch</b></font>調用完成,游標(cursor)被更新(updated).可以認為游標就是一個記錄指針(record pointer).
它指明了<font color="#FFFFCC"><b>SQLFetch</b></font>調用后將返回哪一行。比如說,如果結果集有4列,當結果集建立時,游標指向第一行.當調用了<font color="#FFFFCC"><b>SQLFetch</b></font>
后,游標被加1。所以如果調用了<font color="#FFFFCC"><b>SQLFetch
</b></font>4次,就沒有更多的行可被提交了。游標會顯示指向文件尾(EOF). <font color="#FFFFCC"><b>SQLFetch</b></font>語法如下:</font></p>
<blockquote>
<pre><b><font face="Tahoma" color="#33CCCC">SQLFetch proto StatementHandle:DWORD</font></b></pre>
</blockquote>
<p><font face="Tahoma" size="-1">當沒有行可提交時,這個函數返回<font color="#CCFFCC"><b>
SQL_NO_DATA</b></font>.</font></p>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">例子:</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.data?<br>
buffer db 21 dup(?)<br>
DataLength dd ?</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.code<br>
.....<br>
invoke SQLBindCol, hStmt, 1, SQL_C_CHAR, addr
buffer, 21, addr DataLength<br>
invoke SQLFetch, hStmt</font></b></font></p>
<p> </p>
<p> </p><p> </p>
<p><font face="Tahoma" size="-1"><b><font size="+1" color="#FFFFCC">譯者廢話:</font></b>還記得地球的經緯嗎?我們通過<b><font color="#FFFFCC">SQLBindCol</font></b>來定位經度(列),用<b><font color="#FFFFCC">游標</font></b>來定義緯度(行),用<b><font color="#FFFFCC">SQLFetch</font></b>來獲得坐標,而<b><font color="#FFFFCC">結果集</font></b>就是地球。大航海時代2的同好們不應忘記呀!(船長,我們找不到水......順便問一句,這是地球嗎%$#@&*^:-)</font></p><font face="Tahoma" size="-1"><font>
<p align="center"><b><font face="Tahoma" size="-1"><a href="odbc-c3.htm">[<<]</a>
<a href="odbc-index.html">[index]</a> <a href="odbc-c5.htm">[>>]</a></font></b></p>
<hr>
<p align="center"><font face="Tahoma" size="-1"><b>[<a href="http://win32asm.cjb.net">Iczelion's
Win32 Assembly Homepage</a>]</b></font></p>
<p align="center"><b><font face="Tahoma" size="-1">[The Chinese Portion Is Translated By <a href="mailto:hw1979@263.net">Orochi</a> ,2000.8.24]</font></b></p>
</font></font></body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -