在DELPHI程序中使用ADO对象存取ODBC数据库[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 gao277 的 blog

----   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

本文关键:ado,delphi
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top