Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:09:08 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 dobeginclose;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 of1: 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<>'' thenbeginADODataSet1.Active :=False;ADODataSet1.CommandText := 'EXEC #PRO_YB 3,'+Edit1.Text;ADODataSet1.Active :=True;endelseshowmessage('请填写查询行数。');end;end;2.使用游标添加和修改记录使用游标添加和修改数据的操作步骤是一样的,首先要声明一个游标并打开该游标,然后用INSERT INTO语句和UPDATE SET语句对数据进行添加和修改,最后关闭并释放游标。在修改数据时,要用@@fetch_status函数判断要修改的数据是否存在,如果该函数返回为0,则修改该数据。下面用游标添加和修改记录。操作步骤如下:(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TMemo、TDataSource、TButton、和TDBGrid等组件。(2)主要程序代码如下:使用游标添加数据。with ADOQuery1 dobeginclose;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 dobeginclose;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 dobeginclose;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;
赞