- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BCB讲座第十六讲简单数据库编辑操作
简单数据库编辑操作
上一讲我们学习了利用Query1控件和SQL语句实现简单数据库查询的方法,在本讲中,我们将要学习如何利用Table1控件来实现添加、修改、删除记录等数据库编辑操作。
获取当前记录
在上一讲中我们曾经比较过Query控件和Table控件的异同,并指出Query控件是通过SQL语句来操作数据库的,SQL语句除了可以实现查询外,也可以通过关键字INSERT、UPDATE、DELETE来实现添加、修改和删除记录的操作,但是这一类SQL语句对初学者来说有一定难度,而Table控件提供有Insert、Edit、Delete等方法,实现简单的数据库编辑操作比Query控件更为容易,因此心铃决定以Table控件为例来介绍进行数据库编辑操作的方法。
MP3Collect使用的Query1和Table1是两个独立的控件,用户看到窗体上的数据是由Query1提供的,怎样才能让Table1控件知道用户当前操作的是哪一条记录呢?
为了解决这个问题,我们需要先学习一些基础知识。数据集控件(Table或Query)除了提供一组记录集合之外,还保存了一个称为光标(Cursor)的指针,用于指向当前记录,程序可以通过调用TDataSet类的First()、Next()、Prior()、MoveBy()、Last()等方法控制记录光标的移动。
如果数据集控件与某个数据控制控件相关联,则还可以通过数据控制控件来移动记录光标,例如,MP3Collect主窗体上的Query1控件和DBGrid1控件建立了关联(通过DataSource1控件),当用户在DBGrid1中选择不同的行时,同时也会把Query1的记录光标移到相应的位置上。
无论用哪种方式改变了数据集控件的当前记录光标,都会触发数据集控件的AfterScroll事件。因此,我们要为Query1控件添加AfterScroll事件的处理函数Query1AfterScroll,在其中获取当前记录的内容并显示在三个编辑框中,同时在MediaPlayer1中打开相应的音乐文件,另外还要利用Table控件的FindKey()方法将Table1的记录光标调整到相同的记录上。
前一讲中介绍过,Table控件也具有一定的查询能力,FindKey()就是它的查询方法之一,其原理是利用数据表的索引进行快速的检索操作。查询的步骤如下:首先设置Table控件的IndexName属性。在窗体设计阶段,我们已经将Table1控件的IndexName属性设为ID,选择ID作为Table1的索引,是因为每个记录的ID值是唯一的,不用担心会检索出重复的记录。在运行时确认Table1处于打开的状态,然后调用其FindKey()方法,查找数据表中ID值与Query1控件的当前记录ID值相等的记录,同时将Table1的光标移到新的记录上。下面就是Query1AfterScroll的实现代码。
void __fastcall TMainForm::Query1AfterScroll(TDataSet *DataSet)
{
if(Query1-State==dsBrowse )//如果Query1控件当前处于记录浏览状态
{
if(!Query1-IsEmpty())//如果Query1的数据集不为空
{
//声明TVarRec类型的变量数组,FindKey()方法使用该类型的数组作为参数。
TVarRec KeyValues[1];
//获得Query1控件的当前记录的ID字段内容,并赋给KeyValues数组中的第一个元素
KeyValues[0]=Query1-FieldByName(ID)-AsInteger;
if(!Table1-Active) //如果Table1还未打开,将其打开
Table1-Active =true;
Table1-FindKey(KeyValues,0);//调用FindKey()方法,查找并定位新的记录光标
//获取Query1控件当前记录的各个字段内容,并赋给相应的编辑框
edtFileName-Text=Query1-FieldByName(FileName)-AsString;
edtSongName-Text=Query1-FieldByName(SongName)-AsString;
edtSingerName-Text=Query1-FieldByName(SingerName)-AsString;
//在MediaPlayer1中打开相应的音乐文件
MediaPlayer1-FileName=Query1-FieldByName(FileName)-AsString;
MediaPlayer1-Open();
}
}
}
移动当前记录
为了实现向前、向后浏览和连续播放的功能,我
文档评论(0)