用Delphi编写小型数据库(二)——数据库编程的基本操作
编程爱好者
上一期我们讲解了数据库的基础知识,本期我们主要讲解Delphi数据库编程的基本操作,这一般遵循图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。

六、操作数据
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创建连接,能编写增加记录、删除记录、查询记录、修改记录的代码。