用Delphi编写小型数据库(二)——数据库编程的基本操作

编程爱好者

上一期我们讲解了数据库的基础知识,本期我们主要讲解Delphi数据库编程的基本操作,这一般遵循图1的模式:

15-g14-1-1.jpg
图1 数据库应用程序的构成

启动Delphi,选择主菜单的“Flie→New→Data Module”,就能创建一个数据模块,数据模块相当于一个容器,用于放置数据库的组件,这些数据库相关组件均为不可见组件,如ADODataSet、ADOConnection、DataSource等。用数据模块的好处是:1.从直观来讲,这些不可见组件不用放在窗体上,简化了窗体的设计。2.可以对数据库不可视组件进行统一管理,共享其中相同的内容。我们这里举例很简单,直接把不可视控件放在主窗体上,就不再讲数据模块了。

下面我们通过一个实例学习使用AD

O组件来访问数据库。

一、新建项目

启动Delphi,新建一个项目,选择ADO组件面板,在窗体上添加ADOConnection1和ADODataSet1;选择Data Access组件面板,在窗体上添加DataSource1;选择Data Controls组件面板,添加DBGrid1。

二、设置ADOConnection

ADO组件一般都包含一个被用于连接的属性,即ConnectionString属性,利用此属性可以指定一个到ADO数据存储及其属性的连接。

在窗体上选中ADOConnection1,在Object Inpector上双击这个组件的ConnectionString属性,弹出窗体的ADO连接对话框。

选择Build按钮,在弹出的对话框中选择“Microsoft OLE DB Provider for SQL Server”选项,单击“下一步”按钮,出现数据链接属性对话框。

1.选择或输入服务器名称:可以在此输入IP地址,也可以点击下拉列表,以显示当前系统可以访问的SQL Server数据库的列表,选择其中的一个,单击“刷新”按钮,可获得最新的SQL Server数据服务器列表。此例中点击下拉列表,选择上期我们建立的test数据库的列表。

2.输入登录服务器的信息:选择“使用指定的用户名称和密码”,然后输入用户名称和密码。并选中“允许保存密码”复选框。

3.在服务器上选择数据库:如果登录用户名和密码正确,点击下拉列表就会出现数据库的列表,否则显示报错信息。

4.点击“测试连接”按钮测试输入的登录信息是否正确。设置完毕后点击“确定”按钮返回到主窗体。

小技巧:ADOConnection1的LoginPrompt属性用于控制如何处理SQL数据库的安全性问题。如设置为True,当应用程序试图建立数据库连接时屏幕上将出现标准Delphi注册对话框,用户必须输入正确的用户名和口令。为了设计方便需要把ADOConnection1的LoginPrompt的属性设置为False,这样在配置其他的ADODataSet组件时不必每次都输入用户名和密码了。

三、配置数据集ADODataSet

Delphi数据库开发的很重要的特征之一是,Delphi可以在程序设计时让我们对数据进行处理,在开始处理表的数据之前,程序必须首先打开数据集,每个ADO数据集都可通过它自己的ConnectionString属性或一个ADOConnection组件(和它的ConnectionString)访问数据库的数据。在主窗体上选择ADODataSet1,设置其Connection属性:点击其下拉按钮,选择ADOConnection1,然后双击“CommandText”,在弹出的对话框中选择PersonInfo表,并点击*号,也可以直接在SQL中输入“select * from PersonInfo”,这样我们就配置了一个数据集。

四、配置数据源

配置数据源只需要设置DataSet属性,点击下拉按钮,选择ADODataSet1。

五、配置表格

配置表格需要设置DataSource属性,点击下拉按钮,选择DataSource1。

这时,再选中ADODataSet1,并把其Active属性设置为True,如果配置正常,将会在表格中显示数据库的PersonInfo表的数据,如图2。

15-g14-1-3.jpg
图2 程序主窗体

六、操作数据

1.增加记录

使用Insert方法可以插入一条记录,使用Append方法在数据集的最后添加一条记录。

双击“增加一条记录”按钮,进入代码编辑器,输入代码:

procedure TForm1.Button1Click(Sender: TObject);

begin

ADODataSet1.Active:=true;//打开数据集

ADODataSet1.Insert; //调用Insert方法

ADODataSet1.FieldByName('name').AsString:=Edit1.Text; //把Edit1的值赋给插入的记录的name字段

ADODataSet1.FieldByName('age').AsString:=Edit2.Text;

ADODataSet1.FieldByName('sex').AsString:=Edit3.Text;

ADODataSet1.FieldByName('address').AsString:=Edit4.Text;

ADODataSet1.Post;//将数据集中修改的内容写回到数据库中

ADODataSet1.Active:=false;//关闭数据集

ADODataSet1.Active:=true;//打开数据集,观看效果

end;

2.编辑记录

鼠标选择表格里的一条记录,Edit输入框显示所选的记录,然后进行修改后,点击“编辑一条记录”按钮,把修改后的记录写到数据库中。

首先设置DBGrid,用鼠标点击表格的记录时,自动选中所点击的一行,方法是设置DBGrid的Option属性的dgRowSelect为True。

然后在DBGrid的OnCellClick事件中写如下代码:

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

Edit1.Text:=ADODataSet1.FieldByName('name').AsString;//把选择的记录中的姓名显示在Edit1中

Edit2.Text:=ADODataSet1.FieldByName('age').AsString;

Edit3.Text:=ADODataSet1.FieldByName('sex').AsString;

Edit4.Text:=ADODataSet1.FieldByName('address').AsString;

end;

然后根据需要对字段进行修改,最后在“编辑一条记录”按钮中写如下代码:

procedure TForm1.Button2Click(Sender: TObject);

begin

ADODataSet1.Active:=true;

ADODataSet1.Edit;//进入编辑模式

ADODataSet1.FieldByName('name').AsString:=Edit1.Text;

ADODataSet1.FieldByName('age').AsString:=Edit2.Text;

ADODataSet1.FieldByName('sex').AsString:=Edit3.Text;

ADODataSet1.FieldByName('address').AsString:=Edit4.Text;

ADODataSet1.Post;

ADODataSet1.Active:=false;

ADODataSet1.Active:=true;

end;

注意:这里修改的是当前指针所指向的记录,如果修改后再点击一次“编辑一条记录”按钮,程序就会报错,原因是没有定位到某一条记录。如果要指定修改某条记录,可以使用下面提供的方法:

First:定位到第一条记录

Last:定位到最后一条记录

Next:定位到下一条记录

Prior:定位到上一条记录

MoveBy(n):如果n为正数,下移n条记录;如果n为负数,则上移n条记录

3.删除记录

和编辑记录一样,需要先定位,找到需要删除的记录后,才能对所选中的记录进行删除操作。

在删除记录中写如下代码:

procedure TForm1.Button3Click(Sender: TObject);

begin

ADODataSet1.Active:=true;

ADODataSet1.Delete;

end;

4.查询记录

在实际的项目中,一般都需要给用户提供一个查询,比如用户在Edit5中输入姓名后,点击“查询姓名”按钮,系统在数据库中进行查找。如果找到,表格就自动定位到这条记录,否则给出提示信息:

双击“查询姓名”按钮,进入代码编辑器:

var

i:integer;//定义一个整型变量用于循环

Tmpname:string; //定义一个内部变量,用于赋值

begin

ADODataSet1.Active:=false;//关闭数据集

ADODataSet1.Active:=true;//打开数据集,目的是更新数据集,使显示的数据是最新的

ADODataSet1.First; //定位到第一条记录

for i:=0 to ADODataSet1.RecordCount-1 do //从第一条记录开始到最后一条记录做循环

begin

//把当前记录的name的值赋给内部变量Tmpname

Tmpname:=ADODataSet1.FieldByName('name').AsString;

//去掉字符串中的空

Tmpname:=Trim(Tmpname);

//如果数据库中记录的name值与查询的值一致则在Edit中显示相关字段的值,并退出这段代码块

if trim(Edit5.Text)=Tmpname then

begin

Edit1.Text:=ADODataSet1.FieldByName('name').AsString;

Edit2.Text:=ADODataSet1.FieldByName('age').AsString;

Edit3.Text:=ADODataSet1.FieldByName('sex').AsString;

Edit4.Text:=ADODataSet1.FieldByName('address').AsString;

exit;

end;

ADODataSet1.Next;

end;

//如果没有查询到,给出提示信息

MessageDlg('数据库中没有这个姓名!', mtError,[mbOk], 0);

end;

本章讲解了如何使用ADO对数据库进行简单的操作。在本章学习结束后,读者应该对操作数据库有一定的认识,并能通过ADO创建连接,能编写增加记录、删除记录、查询记录、修改记录的代码。