知识大全 在DELPHI程序中使用ADO对象存取ODBC数据库

Posted 数据库

篇首语:水往下流,人争上游。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在DELPHI程序中使用ADO对象存取ODBC数据库相关的知识,希望对你有一定的参考价值。

在DELPHI程序中使用ADO对象存取ODBC数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  作为一个ASP爱好者 笔者经常在ASP页面中使用ADO对象操作ODBC数据库 觉得用ASP创建Web应用系统确实是挺方便的 虽然在编程生涯中 笔者更喜欢Borland系列产品 对微软产品有点排斥 但对ASP却是例外 某天 忽然想到 ADO对象是一个标准OLE对象 如果在Delphi应用程序中能利用ADO操作数据库 应该挺不错 尤其在用DELPHI做网络数据库应用程序时 如果所在的Web站点是WINNT站点并且支持ASP页面 那就可以用ADO对象访问ODBC数据库 而不用把那么大的BDE再上载到站点上去 这样就可充分利用DELPHI和ASP的编程优势 做出更好的ISAPI/NSAPI/CGI 经过编程和测试 在Delphi中可以成功地用ADO对象存取ODBC数据库 现将本人的使用经验写出来 与大家共享 让我们多一个访问ODBC数据库的方法

  在 位的Delphi中 可以声明一个variant变量(如AVariant) 然后通过CreateOleObject创建一个OLE对象 如AVariant:=CreateOleObject ( ADODB Connection )可以获得一个数据库连接对象的实例 然后就可以利用该对象的方法和属性来操作ODBC数据库了   下面简单介绍一下访问ODBC数据库所用到的ADO对象及其方法和属性

   数据库连接对象(ADODB Connection)  该对象用于与ODBC数据库建立连接 所有对数据库的操作均通过该连接进行   数据库连接对象ADODB Connection的作用象Delphi中的TDatabase对象   建立一个连接对象的方法为(AConnection为Variant类型变量) AConnection:=CreateOleObject( A DODB Connection )  用于建立连接的方法为Open 使用语法为(以对象AConnection为例) AConnection Open( ConnectionString UserId Password )  三个参数均为字符串类型 其中UserId和Password为用户名称和用户密码 用于访问数据库使用时可以省略 因为在ConnectionString同样可以指定用户名称和用户密码 ConnectionString是用来说明ODBC数据源信息的字符串 其格式为 Provider=ProviderName; DSN=DSNName; DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password   其中 Provider 数据提供者 默认状态下为MSDASQL 为微软OLEDB 通常省略 DSN 要打开的数据库对应的OBDC系统数据源(DSN) 是可选参数 DRIVER 要打开的数据库所用的驱动程序名称 如Access对应Microsoft Access Driver (* mdb) 是可选参数 SERVER 要打开的数据库所在的服务器名称 本机可用(local) 是可选参数 DATABASE 要打开的数据库名称 是可选参数 UID 用户名称 用来访问数据库 是可选参数 PWD 用户密码 用来访问数据库 是可选参数   以上参数均为可选参数 但必须提供足够的信息来描述一个系统数据源   假如已经定义了一个ODBC的系统DSN 名称为MyDsn 那么就可用以下语句建立一个数据库连接 AConnection Open( DSN=MyDsn );  为了防止DSN不存在或其设置被他人修改时造成应用程序运行错误 可以用ADODB Connection 创建一个临时ODBC数据源 这样可以保证我们使用的系统DSN的参数设置是正确的 下面的语句可以创建一个临时ODBC系统DSN 对应一个ACCESS数据库 路径为C:\\Inetpub\\ root\\ test mdb AConnection open( Driver= Microsoft Access Driver (* mdb);DBQ=C:\\inetpub \\root\\test mdb )  建立一个ADODB Connection后 如果不需要返回操作结果(如删除 修改 更新等操作)就可以对数据库进行正常的SQL操作了 此时应用ADODB Connection的另外一个方法Execute 使用语法为 AConnection Execute( strSQL );  其中strSQL为执行操作的SQL语句 如删除操作可以为 delete from wfjmu 用AConnection Close关闭一个数据库连接    数据集对象(ADODB RecordSet)  如果要执行查询操作并返回查询结果 或者要更方便地操作数据表 那就需要用到数据集对象了   数据集对象ADODB RecordSet的作用象Delphi中的TTable或TQuery对象   建立一个数据集对象的方法为(ARecordSet为Variant类型变量) ARecordSet:=CreateOleObject ( ADODB RecordSet )  从数据表取得数据的方法为Open方法 具体使用方法为 ARecordSet Open( strCommand ActiveConnection int CursorType intLockType intCommandType );  其中 strCommand 字符串 为命令参数 可以是一个Table名称 可以是一个SQL语句 也可以是一个服务器上的存储过程(StoredProc)名称 具体需要后面的参数intCommandType来指定 ActiveConnection 要使用的数据库连接 是一个ADODB Connection对象 intCursorType 长整数 数据集的Cursor类型 可选参数 请参见程序中注释 intLockType 长整数 对数据表的加锁类型 可选参数 请参见程序中注释 intCommandType 长整数 命令参数的类型 用来指明strCommand的作用 可以指定strCommand为命令(如SQL语句)或数据表(TTable)或储存过程(StoredProc) 可选参数 请参见程序中注释   如执行一个SQL查询 可以采用如下语句 ARecordSet Open( Select * from wfjmu adOpenStatic ad LockOptimistic adCmdText);  其它常见属性和方法与TTable和TQuery相比较如下(具体请见ASP帮助文件) eof bof: eof bof.MoveFirst MoveLast: First LastMovePrevious MoveNext: Prior NextMove: MoveByAddNew: appendUpdate: PostClose: close   Delete加Update delete 所有对数据表的修改均须用Update使操作有效 这与Delphi不同 Fields[FieldNo]: Fields[FieldNo]Fields[ FieldName ]: FieldByName( FieldName )   其他常见对象(与Delphi对应的对象) ADODB Field: TField ADODB Parameter: TPara ADODB Error: EDBEngineErrorADODB Command 无 ADODB Property 无  下面来看一个应用例子 procedure TForm Button Click(Sender: TObject);*****************************************************用ADO操作ODBC数据库  本程序中 将创建一个临时的ODBC系统数据源 指向一个MsAccess数据库 然后对其中的数据表进行显示 增加 修改 删除和查询操作注意 请在Uses语句中包含ComObj单元*****************************************************const一些常量声明 详细请参见adovbs inc CommandType的常量说明 adCmdUnknown = ;//未知 需要系统来判断 速度慢 为缺省值adCmdText = ;//命令语句如SQL语句adCmdTable = ;//数据表名称adCmdStoredProc = ;//存储过程名称

CursorType的常量说明 adOpenForwardOnly = ;//只能由前向后单向访问 为缺省值adOpenKeyset = ;//可见其他用户对数据的修改 但对其它用户的增加和删除不可见adOpenDynamic = ;//其他用户对数据的增加修改和删除均可见adOpenStatic = ;//其他用户对数据的增加修改和删除均不可见

LockType的常量说明 adLockReadOnly = ;//只读 为缺省值adLockPessimistic = ;//在修改时 按单个记录锁定adLockOptimistic = ;//在修改后更新时 按单个记录锁定adLockBatchOptimistic = ;//在成批更新时记录锁定varAConnection 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\\root\\test );

建立一个数据集对象 并从数据表中提取数据ARecordSet := CreateOleObject( ADODB RecordSet );ARecordSet open( wfjmu AConnection adOpenStatic adLockOptimistic adCmdTable );

memo lines clear;memo lines add( ********数据表原有的内容如下******** );显示各个域的域名strTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] name+ ; ;memo lines add( strTemp );

显示各个域的内容while not ARecordSet eof dobeginstrTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] value+ ; ;memo lines add( strTemp );ARecordSet MoveNext;//移到下条 Nextend;

增加一个记录ARecordSet AddNew;//增加 AppendARecordSet Fields[ AName ] := ;//以FieldByName的方式存取ARecordSet Fields[ Portable ] := ;ARecordSet Fields( ) := ;//以Fields[index]的方式存取ARecordSet Fields( ) := ;ARecordSet Fields( ) := ;ARecordSet Update;//更新 PostARecordSet MoveFirst;//移到首条 Firstmemo lines add( ********增加了一条记录后的数据表的内容如下******** );显示各个域的内容while not ARecordSet eof dobeginstrTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] value+ ; ;memo lines add( strTemp );ARecordSet MoveNext;//移到下条 Nextend;

修改最后一条记录ARecordSet MoveLast;ARecordSet Fields[ AName ] := ;//以FieldByName的方式存取ARecordSet Fields[ Portable ] := ;ARecordSet Fields( ) := ;//以Fields[index]的方式存取ARecordSet Fields( ) := ;ARecordSet Fields( ) := ;ARecordSet Update;//更新 PostARecordSet MoveFirst;//移到首条 Firstmemo lines add( ********修改了最后一条记录后的数据表的内容如下******** );显示各个域的内容while not ARecordSet eof dobeginstrTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] value+ ; ;memo lines add( strTemp );ARecordSet MoveNext;//移到下条 Nextend;

删除最后一条记录ARecordSet MoveLast;//移到末条 LastARecordSet delete;//删除 deleteARecordSet Update;//更新 在Delphi不需要ARecordSet MoveFirst;//移到首条 Firstmemo lines add( ********删除了最后一条记录后的数据表的内容如下******** );显示各个域的内容while not ARecordSet eof dobeginstrTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] value+ ; ;memo lines add( strTemp );ARecordSet MoveNext;//移到下条 Nextend;

ARecordSet Close;关闭数据集

用SQL语句进行查询 查询姓名为 张三 的记录注意 在SQL语句中 字符串应该用单引号包括起来ARecordSet open( select * from wfjmu where AName = 张三 AConnection adOpenStatic adLockOptimistic adCmdText );memo lines add( ********张三的内容如下******** );memo lines add( 共有 + IntToStr( ARecordSet RecordCount ) + 条匹配的记录 );显示各个域的内容while not ARecordSet eof dobeginstrTemp := ;for intIndex := to ARecordSet Fields count dostrTemp := strTemp + ARecordSet Fields[intIndex] value+ ; ;memo lines add( strTemp );ARecordSet MoveNext;//移到下条 Nextend;

cha138/Article/program/Delphi/201311/25077

相关参考

知识大全 ADO.NET Entity Framework存取数据库中的图片

ADO.NETEntityFramework存取数据库中的图片  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Delphi实现在数据库中存取图像

Delphi实现在数据库中存取图像  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本实例演示如何

知识大全 Oracle ADO数据存取

OracleADO数据存取  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADO是ActiveD

知识大全 ADO.NET的并行控制与数据存取冲突侦测

ADO.NET的并行控制与数据存取冲突侦测  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 发布程序时对ODBC数据源的配置方法

发布程序时对ODBC数据源的配置方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  方法:&nb

知识大全 DELPHI存取JPEG文件到SQL Server数据库

DELPHI存取JPEG文件到SQLServer数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 在Delphi数据库应用程序中常见错误

在Delphi数据库应用程序中常见错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Delph

知识大全 直接存取文件的方法

  为了方便编程Delphi在很多需要与文件打交道的组件类中都定义了直接文件存取方法使用这些方法可以非常简单地将组件中处理的数据保存到文件中或从文件中读取所需的数据到组件中LoadFromFile和S

知识大全 Delphi存取图像完整解决方案

Delphi存取图像完整解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于涉及图像数据的

知识大全 使用ADO对象连接SQL Server数据库

使用ADO对象连接SQLServer数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  链接代