|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。取得了局
在本章中,我们来进修怎样取得SQL语句的实行了局。
我们称由查询前往的一组纪录为一个了局集(resultset)(或在VB中被称为recordset).检索了局一般分为以下几个步骤:
确认一个了局集是不是可用。将了局集的列绑定在得当的变量上。获得行
完成对了局集的操纵后,我们必需挪用SQLCloseCursor来烧毁它.
确认一个了局集是不是可用
偶然在实行SQL语句后,我们就已晓得了局集是不是可用了。假如实行的语句并非前往了局集的范例,我们就晓得了局集不成用了。但偶然我们不太分明利用的SQL语句是甚么范例,好比说,让用户自行输出SQL语句。这时候,我们必需确认是不是有了局集被创建,这能够经由过程SQLNumResultCols函数完成。假如了局集存在,则该函数前往了局会合的列数(字段数)。语法以下:
SQLNumResultColsprotoStatementHandle:DWORD,pNumCols:DWORD
StatementHandle语句句柄pNumCols指向一个双字的指针,个中包括了却果集的列数。
假如pNumCols指向的值为0,那末标明了局集不存在。
绑定列
与绑定一个变量到SQL语句的参数不异,我们毗连(绑定)一个变量到了局会合的某一列。这里要用到的函数是SQLBindCol,语法以下:
SQLBindColprotoStatementHandle:DWORD,
ColumnNumber:DWORD,
TargetType:DWORD,
TargetValuePtr:DWORD,
BufferLength:DWORD,
pStrLenOrIndPtr:DWORD
StatementHandle语句句柄ColumnNumber了局会合要绑定的列序数.列序数从1入手下手.列0是书签(bookmark)列.TargetTypeThe唆使TargetValuePtr指向的变量(缓冲区)的范例的常数。TargetValuePtr指向将要绑缚到列的变量或缓冲区的指针。当挪用SQLFetch来取得了局会合的行时,本参数指向的变量或缓冲区将被填进被绑定的列的值。BufferLength由TargetValuePtr指向的缓冲区的长度。pStrLenOrIndPtr拜见前章SQLBindParameter
例子:
.data?
bufferdb21dup(?)
DataLengthdd?;挪用SQLFetch后,被填进缓冲区的字符串的长度
.code
.....
invokeSQLBindCol,hStmt,1,SQL_C_CHAR,addrbuffer,21,addrDataLength
获得一行
十分复杂.先挪用SQLFetch检索了局集的一列到绑定的变量中。当SQLFetch挪用完成,游标(cursor)被更新(updated).能够以为游标就是一个纪录指针(recordpointer).它指了然SQLFetch挪用后将前往哪一行。好比说,假如了局集有4列,当了局集创建时,游标指向第一行.当挪用了SQLFetch后,游标被加1。以是假如挪用了SQLFetch4次,就没有更多的行可被提交了。游标会显现指向文件尾(EOF).SQLFetch语法以下:
SQLFetchprotoStatementHandle:DWORD
当没有行可提交时,这个函数前往SQL_NO_DATA.
例子:
.data?
bufferdb21dup(?)
DataLengthdd?
.code
.....
invokeSQLBindCol,hStmt,1,SQL_C_CHAR,addrbuffer,21,addrDataLength
invokeSQLFetch,hStmt
译者空话:还记得地球的经纬吗?我们经由过程SQLBindCol来定位经度(列),用游标来界说纬度(行),用SQLFetch来取得坐标,而了局集就是地球。年夜帆海时期2的同好们不该健忘呀!(船主,我们找不到水......特地问一句,这是地球吗%$#@&*^:-)
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。 |
|