---- 3.其它常见对象(与delphi对应的对象):
----
adodb.field:tfield adodb.parameter: tpara adodb.error:edbengineerror adodb.command:无 adodb.property:无
---- 下面来看一个应用例子,听别人说总不如自己看实际的例子来体会。在这个例子中,将演示如何利用ado对象来对一个数据表进行查询、增加记录、修改记录和删除记录操作。具体的用法请参见程序中的注释,如果有点delphi数据库编程经验,相信不难理解。
---- 在我们的例子使用的数据库为test.mdb,其中有一个数据表为wfjcommu,有五个字段aname、portable、tel、bp、postaddress,分别表示姓名、手机号、电话号码、呼机号码和通信地址。
----
procedure tform1.button1click(sender: tobject);
{*****************************************************
---- 用ado操作odbc数据库本程序中,将创建一个临时的odbc系统数据源,指向一个msaccess数据库,然后对其中的数据表进行显示、增加、修改、删除和查询操作注意:请在uses语句中包含comobj单元
*****************************************************}
const{ 一些常量声明,详细请参见adovbs.inc }
{ ---- commandtype的常量说明 ---- }
adcmdunknown = 0008;//未知,
需要系统来判断,速度慢,为缺省值
adcmdtext = 0001;//命令语句如sql语句
adcmdtable = 0002;//数据表名称
adcmdstoredproc = 0004;//存储过程名称
{ ---- cursortype的常量说明 ---- }
adopenforwardonly = 0;//只能由前向后单向访问,为缺省值
adopenkeyset = 1;//可见其他用户对数据的修改,
但对其它用户的增加和删除不可见
adopendynamic = 2;//其他用户对数据的增加修改和删除均可见
adopenstatic = 3;//其他用户对数据的增加修改和删除均不可见
{---- locktype的常量说明 ---}
adlockreadonly = 1;//只读,为缺省值
adlockpessimistic = 2;//在修改时,按单个记录锁定
adlockoptimistic = 3;//在修改后更新时,按单个记录锁定
adlockbatchoptimistic = 4;//在成批更新时记录锁定
var
aconnection, arecordset : variant;
longinttemp : integer;
strtemp : string;
intindex : integer;
begin
{创建一个临时的odbc数据源,
指向一个msaccess数据库,
并利用此dsn建立一个数据库连接}
aconnection := createoleobject('adodb.connection');
aconnection.open('driver={microsoft access driver
(*.mdb)};dbq=c:\inetpub\wwwroot\test');
{建立一个数据集对象,并从数据表中提取数据}
arecordset := createoleobject('adodb.recordset');
arecordset.open( 'wfjcommu',aconnection,
adopenstatic,adlockoptimistic,adcmdtable );
memo1.lines.clear;
memo1.lines.add('********数据表原有的内容如下********');
{显示各个域的域名}
strtemp := '';
for intindex := 0 to arecordset.fields.count - 1 do
strtemp := strtemp + arecordset.fields[intindex].name+';';
memo1.lines.add( strtemp );
{显示各个域的内容}
while not arecordset.eof do
begin
strtemp := '';
for intindex := 0 to arecordset.fields.count - 1 do
strtemp := strtemp + arecordset.fields
[intindex].value+';';
memo1.lines.add( strtemp );
arecordset.movenext;//移到下条,next
end;
{增加一个记录}
arecordset.addnew;//增加,append
arecordset.fields['aname'] := '1';
//以fieldbyname的方式存取
arecordset.fields['portable'] := '2';
arecordset.fields(2) := '3';
//以fields[index]的方式存取
arecordset.fields(3) := '4';
arecordset.fields(4) := '5';
arecordset.update;//更新,post
arecordset.movefirst;//移到首条,first
memo1.lines.add('********增加了一条
记录后的数据表的内容如下********');
{显示各个域的内容}
while not arecordset.eof do
begin
strtemp := '';
for intindex := 0 to arecordset.
fields.count - 1 do
strtemp := strtemp +
arecordset.fields[intindex].value+';';
memo1.lines.add( strtemp );
arecordset.movenext;//移到下条,next
end;
{修改最后一条记录}
arecordset.movelast;
arecordset.fields['aname'] := '11';
//以fieldbyname的方式存取
arecordset.fields['portable'] := '22';
arecordset.fields(2) := '33';
//以fields[index]的方式存取
arecordset.fields(3) := '44';
arecordset.fields(4) := '55';
arecordset.update;//更新,post
arecordset.movefirst;//移到首条,first
memo1.lines.add('********修改了最后一条
记录后的数据表的内容如下********');
{显示各个域的内容}
while not arecordset.eof do
begin
strtemp := '';
for intindex := 0 to
arecordset.fields.count - 1 do
strtemp := strtemp +
arecordset.fields[intindex].value+';';
memo1.lines.add( strtemp );
arecordset.movenext;//移到下条,next
end;
{删除最后一条记录}
arecordset.movelast;//移到末条,last
arecordset.delete;//删除,delete
arecordset.update;//更新,在delphi不需要
arecordset.movefirst;//移到首条,first
memo1.lines.add('********删除了最后一条
记录后的数据表的内容如下********');
{显示各个域的内容}
while not arecordset.eof do
begin
strtemp := '';
for intindex := 0 to arecordset.fields.count - 1 do
strtemp := strtemp + arecordset.
fields[intindex].value+';';
memo1.lines.add( strtemp );
arecordset.movenext;//移到下条,next
end;
arecordset.close;{关闭数据集}
{用sql语句进行查询,查询姓名为“张三”的记录}
{注意,在sql语句中,字符串应该用单引号包括起来}
arecordset.open( 'select * from wfjcommu
where aname = ''张三''',
aconnection,adopenstatic,adlockoptimistic,
adcmdtext );
memo1.lines.add('********张三的内容如下********');
memo1.lines.add( '共有' + inttostr
( arecordset.recordcount ) + '条匹配的记录' );
{显示各个域的内容}
while not arecordset.eof do
begin
strtemp := '';
for intindex := 0 to arecordset.fields.count - 1 do
strtemp := strtemp + arecordset.fields
[intindex].value+';';
memo1.lines.add( str