Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:09:08
delphi中使用游标处理数据

delphi中使用游标处理数据

游标

1.使用存储过程调用游标读取数据

声明并打开游标后,执行FETCH语句可以读取数据。声明一个滚动游标,执行FETCH语句,则可以实现使用游标按指定行读取数据集中的数据。

例如,读取数据集中第一行数据。

SQL.Add('FETCH First FROM 游标名称')

例如,读取游标所在当前位置的上一行数据。

SQL.Add('FETCH prior FROM 游标名称')

例如,读取游标所在当前位置的下一行数据。

SQL.Add('FETCH Next FROM 游标名称')

例如,读取数据集中最后一行数据。

SQL.Add('FETCH Last FROM 游标名称')

例如,读取数据集中的任意一行数据。

SQL.Add('FETCH absolute 行数 FROM 游标名称');

下面利用本地临时存储过程(#PRO_YB)来创建一个游标,并通过调用临时存储过程对当前记录的首记录、尾记录和任意行记录进行读取操作。

操作步骤如下:

(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TADODataSet、TDataSource、TButton、和TDBGrid等组件。

(2)主要程序代码如下:

用临时存储过程创建游标。

with ADOQuery1 do

begin

close;

SQL.Clear;

SQL.Add('CREATE PROCEDURE #PRO_YB'); //创建本地临时存储过程

SQL.Add('@Int Integer,'); //自定义参数

SQL.Add('@Row Integer');

SQL.Add('AS');

SQL.Add('DECLARE ReadCursor scroll CURSOR FOR'); //创建游标

SQL.Add('select * from MR_student');

SQL.Add('OPEN ReadCursor'); //打开游标

SQL.Add('if @Int=1');

SQL.Add(' FETCH First FROM ReadCursor'); //首记录

SQL.Add('if @Int=2');

SQL.Add(' FETCH Last FROM ReadCursor'); //尾记录

SQL.Add('if @Int=3');

SQL.Add(' FETCH absolute @Row FROM ReadCursor'); //任意行的记录

SQL.Add('CLOSE ReadCursor'); //关闭游标

SQL.Add('DEALLOCATE ReadCursor'); //释放游标

EXECSQL;

end;

调用临时存储过程,并分别执行首记录、尾记录和读取任意行记录。

case Int of

1: begin //首记录

ADODataSet1.Active :=False;

ADODataSet1.CommandText := 'EXEC #PRO_YB 1,0';

ADODataSet1.Active :=True;

end;

2: begin //尾记录

ADODataSet1.Active :=False;

ADODataSet1.CommandText := 'EXEC #PRO_YB 2,0';

ADODataSet1.Active :=True;

end;

3: begin //任意行记录

if Edit1.Text<>'' then

begin

ADODataSet1.Active :=False;

ADODataSet1.CommandText := 'EXEC #PRO_YB 3,'+Edit1.Text;

ADODataSet1.Active :=True;

end

else

showmessage('请填写查询行数。');

end;

end;

2.使用游标添加和修改记录

使用游标添加和修改数据的操作步骤是一样的,首先要声明一个游标并打开该游标,然后用INSERT INTO语句和UPDATE SET语句对数据进行添加和修改,最后关闭并释放游标。在修改数据时,要用@@fetch_status函数判断要修改的数据是否存在,如果该函数返回为0,则修改该数据。

下面用游标添加和修改记录。

操作步骤如下:

(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TMemo、TDataSource、TButton、和TDBGrid等组件。

(2)主要程序代码如下:

使用游标添加数据。

with ADOQuery1 do

begin

close;

SQL.Clear;

SQL.Add('DECLARE UB_Insert CURSOR FOR'); //声明一个游标

SQL.Add('select * from MR_Table');

SQL.Add('OPEN UB_Insert'); //打开游标

//使用游标添加数据

SQL.Add('INSERT INTO MR_Table (id,name,sex,memo) VALUES ('''+Edit1.Text+''','''+Trim(Edit2.Text)+''','''+ Trim(Combobox1.Text)+''','''+memo1.Lines.Text+''')');

SQL.Add('CLOSE UB_Insert'); //关闭游标

SQL.Add('DEALLOCATE UB_Insert'); //释放游标

EXECSQL;

end;

使用游标修改数据。

with ADOQuery1 do

begin

close;

SQL.Clear;

SQL.Add('DECLARE UB_Update CURSOR FOR'); //声明一个游标

SQL.Add('select * from MR_Table where id='+Edit3.Text);

SQL.Add('OPEN UB_Update'); //打开游标

SQL.Add('if @@FETCH_STATUS=0'); //用@@FETCH_STATUS判断当前是否有记录

SQL.Add('begin');

//使用游标修改数据

SQL.Add(' Update MR_Table SET name= '+Quotedstr(Trim(Edit4.Text))+ ',sex= '+Quotedstr(Trim(Combobox2.Text))+ ' where id='+Edit3.Text);

SQL.Add('end');

SQL.Add('CLOSE UB_Update'); //关闭游标

SQL.Add('DEALLOCATE UB_Update'); //释放游标

EXECSQL;

end;

3.使用游标删除指定记录

声明一个SQL Server数据库游标,打开游标,然后读取游标所在当前行,使用游标函数@@fetch_status判断游标的当前状态,如果游标读取数据成功,@@fetch_status函数将返回数值0,然后使用DELETE语句删除指定行的记录。

下面使用游标删除符合条件的记录行。

操作步骤如下:

(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TComboBox、TDataSource、TButton、和TDBGrid等组件。

(2)主要程序代码如下:

with ADOQuery1 do

begin

close;

SQL.Clear;

SQL.Add('DECLARE UB_delete CURSOR FOR'); //声明一个游标

SQL.Add('select * from '+Combobox1.Text+' where '+Combobox2.Text+Combobox3.Text+''''+Edit1.Text+'''');

SQL.Add('OPEN UB_delete'); //打开游标

SQL.Add('FETCH UB_delete'); //执行取数操作

SQL.Add('if @@FETCH_STATUS=0'); //用@@FETCH_STATUS判断当前是否有记录

SQL.Add('begin');

SQL.Add(' delete from '+Combobox1.Text+' where '+Combobox2.Text+Combobox3.Text+''''+Edit1.Text+'''');

SQL.Add('end');

SQL.Add('CLOSE UB_delete'); //关闭游标

SQL.Add('DEALLOCATE UB_delete'); //释放游标

EXECSQL;

end;




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759