c语言游标
❶ Cursor游标是什么有什么作用
在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条sql选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用c语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER中并没有一种描述表中单一记录的表达形式,除非使用where子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案——那就是使用游标。
❷ C语言的光标
C语言控制台输入 是行缓冲输入方式,直到敲回车键,行缓冲中的数据才会真正传输给程序。如果真想输入数据后,光标后退, 可以用格式"%b"退格试试
❸ C语言定位光标
用Win32 API
SetConsoleCursorPosition是API中设置控制台光标位置的函数。
#include <stdio.h>
#include <windows.h>
int main(void)
{
HANDLE hOut;
COORD pos= {0,2}; /* 光标的起始位(第1列,第3行) 0是第1列 2是第3行*/
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
printf("定位光标位置(%d,%d)\n",pos.X,pos.Y);
return 0;
}
❹ 在c语言中定义游标中有一段代码:select...from...where area = \'%d
在存储过程里,直接执行
select * from table where area ="变量名"或者"字段"
具体area是啥类型?
在存储过程里,看你是不是需要传参了,如果需要就定义一下。
不需要就是直接调用某个字段就行了
❺ c语言中如何实现随意移动光标输出字符
函数名:gotoxy
原型:extern void gotoxy(int x, int y);
用法:#include <system.h>
功能:将光标移动来到指定自位置
说明:gotoxy(x,y)将光标移动到指定行y和列x。设置光标到文本屏幕的指定位置,其知中参数x,y为文本屏幕的坐标,gotoxy(0,0)将光标移动到屏幕左上角。
(5)c语言游标扩展阅读:
用法举例
#include <conio.h>
int main(void)
{ /*gotoxy()的用法*/
//clrscr(); //清除文本模式的窗口
gotoxy(2,1);//在文本窗口中设置光标用(列,行)
cprintf("Hello world");//送格式化输出至屏幕
getch();
return 0;
}
❻ C语言中可以在两个函数里边定义同一个游标吗,这个游标查询同一张表,相同的字段和where条件
不正确,函数的定义一定要放在主函数外。
❼ C语言光标移动
CROOD就是这样的一个玩意:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
很明显这个结构可以用来记录坐标
GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器
SetConsoleCursorPosition(hout,coord); 看函数名称:设置控制台光标坐标,参数就是设备句柄,坐标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)
下面这段代码可以在屏幕第10行第30列输出"Hello world"
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hout;
COORD coord;
coord.X=30;
coord.Y=10;
hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,coord);
cout<<"Hello world! ";
return 0;
}
❽ mysql c语言 游标能取多行吗
1、 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等
2、 select语句返回单行变量并可传给本地变量(select ..into)
3、 返回多行结果集的select语句,并可使用MySQL游标循环处理
注意,存储过程返回的多行结果集,可以被客户端程序(如php)所接收,但要在一个存储过程中接收另一个存储过程的结果集是不可能的,一般解决办法是存入临时表供其它过程共用
4、 prepare语句
以下主要讲述游标及prepare部分
游标
定义
DECLARE cursor_name CURSOR FOR SELECT_statement;
游标操作
OPEN 打开游标
OPEN cursor_name;
FETCH 获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与MySQL游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH
FETCH cursor_name INTO variable list;
CLOSE关闭游标
CLOSE cursor_name ;
注意:MySQL的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录.
一个完整的例子:
定义本地变量
DECLARE o varchar(128);
定义游标
DECLARE ordernumbers CURSOR
FOR
SELECT callee_name FROM account_tbl where acct_timeration=10800;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
SET no_more_departments=0;
打开游标
OPEN ordernumbers;
循环所有的行
REPEAT
-- Get order number
FETCH ordernumbers INTO o;
update account set allMoneyallMoney=allMoney+72,=lastMonthConsume-72 where NumTg=@o;
循环结束
UNTIL no_more_departments
END REPEAT;
关闭游标
CLOSE ordernumbers;
DELIMITER $$
USE `kubauser`$$
DROP PROCEDURE IF EXISTS `cursortest`$$
CREATE DEFINER=`coo8new`@`%` PROCEDURE `cursortest`(OUT a VARCHAR(50),OUT b VARCHAR(50))
BEGIN
DECLARE _outuserid VARCHAR(50);
DECLARE _kubauserid VARCHAR(50);
DECLARE flag INT;
DECLARE update_cursor CURSOR
FOR
SELECT outuserid,kubauserid FROM ecuser_cooperationuser;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
SET flag=0;
OPEN update_cursor;
REPEAT /*循环*/
FETCH update_cursor INTO _outuserid,_kubauserid;
SET a=_outuserid;
SET b=_kubauserid;
/*update set where*/
UNTIL flag
END REPEAT;
CLOSE update_cursor ;
END$$
DELIMITER ;
转载,仅供参考。
❾ C语言中使用嵌入式SQL 定义游标出现-01036错误【非法的变量/编号】请高手帮忙
http://www.dezai.cn/Channel/Web/ArticleShow.aspx?AI=61490