来源:www.cncfan.com | 2006-1-16 | (有7434人读过)
关键词:ADO组件 ADO(Active Data Object)是微软公司基于OLE DB的数据库模型。实现了一系列COM连结,通过数据库提供者(Data Provider)和数据库使用者(Data Consumer)来实现广义的数据库连结存取。ADO模型一方面简化了数据存取的连结,另一方面在ASP等Internet应用中也得到了大量的使用。BCB与 Delphi 中ADO数据控制组件封装了ADO的各项功能,使得撰写ADO程序和在Visual Basic中一样的容易。
●Delphi 中所提供的 ADO 组件如下: TADOConnection 连结数据来源组件 TADOCommand封装 ADO 的 Command 对象,提供 SQL 叙述 TADODataSet封装 ADO 的 RecordSet 对象,提供 ADO 数据存取及处理 TADOTable连结特定数据表组件。(仿真 BDE/IDAPI TTable 组件) TADOQuery执行 SQL 叙述组件。(仿真 BDE/IDAPI TQuery 组件) TADOStoredProc呼叫数据库预储程序组件 TRDSConnection封装 ADO 的 RDS 功能 TADOConnection-连结数据来源组件
●TADOConnection组件重要属性 Connected-启动数据链路与否 ConnectionString-连结来源的信息及使用何种连结特性等连结字符串。 可选择Use Data Link File从MS数据链路档案 .udl进行连结或Use Connection String设定连结信息如下: Provider=SQLOLEDB.1;Password=mypasswd;Persist Security Info=True;User ID=sa;Initial Catalog=DBName;Data Source=ServerName;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ComputerName ConnectionTimeout-连结数据库愈时时间,单位秒 ConnectionOptins-选择以同步或异步连节数据来源 coConnectUnspecified同步连结资料来源 coAsyncConnect异步连结数据来源 CursorLocation-代表Cursor存在的地方 clUseClient-使用 client-side cursor 方式 clUseServer-使用 server-side cursor 方式。 IsolationLevel-交易层级,虽提供交易层级的选项但还是会受限于使用者于数据库中的使用权限 LoginPrompt-连结数据库是否出现Username/password登入窗口或将Username/password内建于ConnectionString中 Mode-数据链路所允许的存取动作 cmUnknown 未知的连结通常由使用权线来决定存取模式 cmRead 只读 cmWrite 写入 cmReadWrite 可擦写 cmShareDenyRead 防止其它使用者开启与读取 cmShareDenyWrite防止其它使用者开启连结与写入 cmShareExclusive 防止其它使用者开启连结 cmShareDenyNone 防止其它使用者开启连结以及其它权限 Provider-使用ADO驱动程序的种类
●TADOConnection组件重要事件 OnBeginTransComplete 在执行BeginTrans方法完成时触发 OnCommitTransComplete在执行CommitTrans方法完成后触发 OnConnectComplete 数据库连接成功之后触发 OnDisconnect 数据库断线之后触发 OnExecuteComplete 在执行ADO命令完成后触发 OnInfoMessage 当数据从数据库取得时触发 OnRollbackTransComplete在执行RollbackTrans方法完成时触发 OnWillConnect将要联机前触发 OnWillExecute将执行命令前触发 OnLogin登入时触发 OnBeforeConnect联机前触发 OnAfterConnect联机后触发 OnAfterDisconnect断线后触发 OnBeforeDisconnect断线前触发
□若连结数据库时依序触发事件的顺序如下 1.OnBeforeConnect 2.OnWillConnect 3.OnLogin 4.OnConnectComplete 5.OnInfoMessage 6.OnAfterConnect
□若数据库断线时依序触发事件的顺序如下 1.OnBeforeDisconnect 2.OnDisconnect 3.OnAfterDisconnect
●TADOConnection组件重要方法 Open() 开启连结,相当于Connected设为 true Close() 关闭连结,相当于Connected设为false GetProcedureNames() 取得数据库中所提供的 stored procedures 名称 ADOConnection1->GetProcedureNames(ListBox1->Items); GetTableNames() 取得数据库中可使用的 Table名称 ADOConnection1->GetTableNames(ListBox2->Items, false); Cancel取消一个尝试中的联机 Execute() 执行ADO命令,可选择执行的Command type与Execute Option BeginTrans() transaction程序的开始 CommitTrans() 完成一段transaction更新信息并结束 RollbackTrans() 当执行一段transaction失败时回复执行前状况
三个一组的方法,为了让一连串的命令能够一起完成或一起失败,所以必须建立transaction区块,在这个区块中必须依序的完成命令,若其中一项发生错误则执行RollbackTrans恢复未执行前的状况,若成功执行则呼叫CommitTrans完整的更新信息,这种方式对有相互影响的一组指令,有确保指令执行正确的保障
使用范例..输入一段SQL指令
try
{
ADOConnection1-> BeginTrans();
//一连串的处理程序
ADOConnection1->Execute(“select * from Tabel1 where name=’David’”,cmdText, eoAsyncExecute);
.
}
Catch(…)
{
//若有任何闪失就回复前状态
ADOConnection1-> RollbackTrans();
Return;
}
ADOConnection1->CommitTrans();
PS.使用TADOConnection 任何方法时若TADOConnection 尚未连结则自动将Connected 设为true连结数据库
●如何开始使用TADOConnection组件
□首先需建立数据来源的连结,此连结必须透过windows的数据来源ODBC(Open Data Base Connection)进行设定,开启windows的ODBC(98、Me于控制台中,2000、XP于 控制台/系统管理工具 中即可找到)选择数据系统来源名称新增来源步骤如下(以连结MS SQL作为范例): 1.选取数据来源的驱动程序代表使用者将连结的数据库种类,使用MS SQL数据库则选择 SQL Server 2.自定数据来源名称以及描述(名称自定如 MS SQL 1描述可写可不写) 服务器输入该数据库服务器别名或远程服务器的IP Address 3.选择认证系统,可选择Windows NT或MS SQL的认证方式,接着输入 Username以及Password 4.设定初始数据库 5.进行联机测试,若测试成功代表此数据库服务器可透过本机 ODBC进行连接 ,若失败则回到步骤 2或3修改设定,一般失败的原因除了使用者名称与密码 错误或伺服端未提供相关权限外,另一原因通常在连接管道以及使用的Port的设定上错误,可回到步骤3的客户端设定进行设定,选择 TCP/IP 计算机名称输入该服务器IP,port 选择初始值 1433,个人是觉得透过TCP/IP协议做连结比较强悍,通常都可以解决服务器联不上的问题。
PS.连接不同的数据库将会有不同的设定方式,改变也会随着各种数据库所提供服务有所不同,例如单机的数据库就不提供网络联机的设定…等,但基本的设定是可以参考的。
□以上是ODBC的设定部分,连接上以后就已经大功告成一半了,接下来就是TADOConnection中ConnectionString 属性进行设定,可选择Use Data Link File从MS数据链路档案 .udl进行连结或Use Connection String设定连结信息,但充其量就是把Use Connection String存成档案就是Use Data Link File且扩展名必须为.udl,但使用上就有点不同了,Use Connection String是直接以字符串的形式写在执行档中,Use Data Link File是把它们给分离开另行一个档案进行储存,而后者的好处在于改变服务器的地址时并不需要重新编译执行档,只需修改该.udl档案即可,相当的便利所以笔者也建议使用者使用这种方式进行设定。但要如何产生.udl檔呢?其实在BCB中就有现成的.udl供使用者使用,依下列地址寻找: C:\Program Files\Common Files\SYSTEM\ole db\Data Links\BCDEMOS.udl 此档案就是现成的,接下来copy一份来使用,并Rename成SQLDB.udl,双击打开档案(Windows会自动开启)进行编辑,依序将下列项目一一设定: 1.提供者选择ODBC中新增的数据库 2.连接设定服务器或数据库名称以及使用者名称账号与密码 3.进阶与全部先不要动然后进行测试连接
PS.连接不同的数据库将会有不同的设定方式,改变也会随着各种数据库所提供服务有所不同,例如单机的数据库就不提供网络联机的设定…等,但基本的设定是可以参考的。
若这里的设定与ODBC设定一样应该也会成功,然后按下确定关闭(会自动Save)。接下设定ConnectionString属性选择Use Data Link File选取该文件SQLDB.udl即可,或于Use Connection String按下 Build…键也会看到档案编辑的画面一样画葫芦,确定后会转成字符串如下: Provider=SQLOLEDB.1;Password=mypasswd;Persist Security Info=True;User ID=sa;Initial Catalog=DBName;Data Source=ServerName;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ComputerName 里面的项目分别代表编辑中的各项设定值,有设定才有没设定就不会显示出来。 若要于程序中动态的设定如下:
档案输入 ADOConnection1->ConnectionString= “FILE NAME=C:\Program Files\Common Files\SYSTEM\ole db\Data Links\SQLDB.udl” 字符串输入 ADOConnection1->ConnectionString= “Provider=SQLOLEDB.1;Password=mypasswd;Persist Security Info=True;User ID=sa;Initial Catalog=DBName;Data Source=ServerName;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ComputerName”
设定完成后将Connection设为true进行联机则会出现 Login的窗口,那是因为LoginPrompt属性为 true,当每次进行联机时就会询问使用者账号密码,若不想出现则将LoginPrompt设为False,则会以ConnectionString中设定的数据进行Login,至此以完成数据库的连结,至于数据集的处理交由其它原件处理。顺带说明若在Runtime中修改TADOConnection中的属性值(Connectiont除外) 必须先进行断线即Connectiont设为False方可修改,另外有些属性与使用者于数据库中的权限有关,必须加以修正与配合。
|