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