BCB讲座第十五讲简单数据库查询操作.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单数据库查询操作

上一讲我们学习了数据库编程的基础知识,并对 MP3Collect 进行了一番改造,使其具有数据库访问能力。在本讲中,我们首先设置三个数据库元件 Query1、DataSource1和 DBGrid1的属性,接下来学习如何通过 Query 控件实现简单的数据库查询操作。

设置控件属性

Query1控件的用途是查询数据库,获取可以显示在窗体中的数据。 Query 控件和 Table 控件一样,它们都是从 VCL 类 TDataSet (数据集元件中继承来的,都代表数据库中一组记录的集合。不同的是, Table 控件代表库中实际存在的一个数据表对象, 而 Query 控件则代表一次查询的结果。 Query 控件支持通过 SQL 进行查询,因此比 Table 控件具有更大的灵活性,它可以同时访问多个数据表, 可以灵活访问数据表中的行和列,可以实现十分复杂的条件查询。

SQL 的全称是结构化查询语言,它是一种标准的数据库查询语言,具有自己的关键字(SQL 中的关键字是不分大小写的, SELECT 和 Select 的作用是相同的和语法,典型的 SQL 查询语句如下所示:

SELECT [字段名 ] FROM [数据表名 ] WHERE [条件子句 ]

其中 SELECT 、 FROM 和 WHERE 都是 SQL 的关键字。 SELECT 代表查询操作, “字段名”表示返回的记录集中所包含的字段,字段名可以使用通配符 *,表示查询的数据表中的所有字段, “数据表名”表示在哪个数据表中进行查询, “条件子句”为查询的条件。

了解了 SQL 的基本语法后, 下面我们来设置 Query1控件的 SQL 属性。在对象监视器中双击 Query1控件的 SQL 属性(该属性为 TStrings*类型 ,打开字符串列表编辑器,在其中输入这样两句“ Select * From MP3Info”和“ Order by FileName ASC”。注意第二句要另起一行,这样在后面的编程中可以很方便地改变记录的排序方式。这两句合在一起的意思是获取 MP3Info 数据表中的所有记录,并以 FileName 字段为基

准按升序方式排序。除了指定 Query1控件的 SQL 属性外,还要指定它在哪个数据库中进行查询,将其 Database 属性设为别名 MP3Collect 。然后指定其 Active 属性为true ,其它属性值都接受缺省值。

DataSource 控件从字面上可翻译为数据源控件, 不过它与上一讲介绍的 ODBC 数据源可不是一回事。 DataSource 控件是一个中间控件,它位于数据集控件(如Table 控件或 Query 控件和数据控制控件(如 DBGrid 控件或 DBEdit 控件之间,是联系两类控件的桥梁。 DataSource 控件最重要的属性是它的数据集属性 DataSet ,在对象浏览器中点击该属性右侧的下拉式列表框,可以看到其中列出了 Table1和Query1,我们选中 Query1,表示 DataSource 控件从 Query1中获取数据。

DBGrid 控件是一种常用的数据控制元件,它以表格的方式显示记录,表格中的行表示记录,而列表示记录的字段。所有的数据控制元件都必须和某个 DataSource 控件相关联, 才能获取所需要的数据, 因此我们在这里将 DBGrid1控件的 DataSource 属性设为 DataSource1。指定 DBGrid1的数据来源后, 我们可以看到 DBGrid1的表格中立即显示出相应的记录了。

缺省情况下, DBGrid1会显示数据集的全部字段,并以字段的名称显示在列标题中,我们可以在设计时通过 DBGrid 控件的列编辑器修改列的数目、标题以及布局等。在对象浏览器中双击 Columns 属性,打开列编辑器,此时列编辑器中的内容还是空的,因此我们在列编辑器中点击鼠标右键,选择关联菜单中的“ Add All Field”命令,先把数据集中的所有字段添加进来。由于我们不希望将记录的编号显示出来,所以要删除其中的“ ID ”字段。

接下来我们来设置各列的列标题。首先选中“ FileName ”列,这时可以在对象浏览器中看到该列的各种属性,其中 FieldName 属性为“ FileName ”,表示该列显示“ FileName ”字段的内容,列对象的 Title 属性为复合属性,展开 Title 属性,将其中的Caption 子属性改为“文件名称”,然后设置

“ FileName ”列的列宽度,其缺省的 Width 属性为 -1,表示根据字段的宽度自动设置列宽度,我们可以根据窗体的布局为其重新设置一个实际的值。按照同样的方法,

我们继续把“ SongName ”、“ SingerName ”的列标题改为“歌曲名称”和“歌手名称”。

设置好 DBGrid1控件的列对象的属性后,接下来还要设置它的 Options 属性,该属性决定了显示记录的方式。展开 DBGrid1控件的 Options 属性,可以看见其中有十多项选项,将其中的 dgEditing 、 dgAlwaysShowEdit 和 dgMultiSelect 三个选项设为 false ,其余的选项都设为 true ,如此设置可以屏蔽在 DBGrid 中直接修改记录以及同时选中多条记录的功能。另外还可以设置 DBGrid1的 ReadOnly 属性为 true ,使用户不能在网格中进行添加、修改、删除记录的操作。最后,设置 DBGrid1的PopupMenu 属性为 PopupMenu1,为其指定关键菜单。

现在所有元件的属性都设置好了,下面我们来看看访问数据库的具体方法。为了简洁起见,下面的代码中都没有异常处理措施,读者朋友可以根据第 13讲的内容自己添加相应的异常处理代码。实现查询功能

Table 控件和 Query 控件都可以实现查询,但 Table 不支持 SQL ,只能通过数据表中的索引实现比较简单的检索功能(在后面还会用到 Table 的查询功能 ,因此心铃决定用 Query1控件进行查询, 提供显示在 DBGrid1中的数据。

所有的查询都是通过设置 Query1控件的 SQL 属性来完成的。实现显示所有记录的 SQL 语句最简单,即前面给出的 SQL 属性。下面是 btnShowAllClick 事件处理函数的新代码,其中给出了在运行时改变 Query 控件 SQL 属性的方法。

void __fastcall TMainForm::btnShowAllClick(TObject *Sender

{

Query1->Close(;//先关闭上一次查询

Query1->SQL->Clear(;//清除原来的 SQL 语句

Query1->SQL->Add("Select * from MP3Info";//添加一个字符串, SQL 属性由多个字符串组合而成

相关文档
最新文档