在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Delphi中用ADO控件连接数据库例子 来源:dudongxiao的专栏 作者:dudongxiao 时间:2008-05-04 点击:777 次
一、说明
最近在写个“数据库管理系统框架程序”,其中封装了几个连接数据库的函数,觉得挺好用,拿出来与大家分享下,希望能对大家有点用处。 我以连接oracle和access为例,其余数据库连接在此基础上稍加修改,便可使用。 二、连接oracle 1、源码 { 功能:连接ORACLE数据库 参数:sServerName ORACLE服务名,sUserName 用户名,sUserPwd 密码 } function LinkOracle(sServerName, sUserName, sUserPwd: string): boolean; begin Result := True; if _adoConn <> nil then _adoConn.Free; _adoConn := TADOConnection.Create(nil); _adoConn.ConnectionString := 'Provider=MSDAORA.1;'+ 'Password='+sUserPwd+';'+ 'User ID='+sUserName+';'+ 'Data Source='+sServerName+';'+ 'Persist Security Info=True'; _adoConn.LoginPrompt := False; try _adoConn.Open; except on E: Exception do begin Application.MessageBox(PChar('连接ORACLE失败!原因:' + E.message), '系统错误', MB_OK+MB_ICONERROR); Result := False; end; end; end; { 功能:返回成功连接上数据库的ADOConnection实例 } function GetAdoConnection: TADOConnection; begin Result := _adoConn; if _adoConn = nil then begin Application.MessageBox('尚未创建数据库连接!', '系统错误', MB_OK+MB_ICONERROR); Exit; end; try if not _adoConn.Connected then _adoConn.Connected := True; except on E: Exception do Application.MessageBox(PChar('Exception in GetAdoConnection: '+E.Message), '系统错误', MB_OK+MB_ICONERROR); end; end; 上面是我封装的连接oracle的函数,下面对代码进行简单介绍: _adoConn 是 TADOConnection 变量,被申明成在单元内可见的变量,这样方便在LinkOracle和GetAdoConnection中共同使用,又不至于对其他单元文件产生影响。 2、应用举例 例子:假设数据库服务名是orcl,用户名是scott,密码是tiger,连接该用户,并查出该用户有几张表。 begin if not LinkOracle('orcl', 'scott', 'tiger') then begin showmessage('连接数据库失败'); Exit; end; with TADOQuery.Create(nil) do try Connection := GetAdoConnection; sql.add(' select count(*) cnt from tab '); open; showmessage('共有' + fieldbyname('cnt').AsString + '张'); finally close; free; end; end; 三、连接access 1、源码 { 功能:创建AccessODBC数据源 参数:sDsn为数据源的名称, sMdbPath为数据库的名称包括目录, sUserId为用户名, sUserPwd为密码 } function CreateAccessODBCDataSource(sDsn, sMdbPath, sUserId, sUserPwd: string): boolean; var Reg: TRegistry; bData : array[ 0..0 ] of byte; begin Reg :=TRegistry.Create; with Reg do begin RootKey:=HKEY_LOCAL_MACHINE; if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',true) then begin WriteString(sDsn,'Microsoft Access Driver (*.mdb)'); end else begin Result:=False; Application.MessageBox('创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR); Exit; end; CloseKey; if OpenKey('Software\ODBC\ODBC.INI\'+sDsn,true) then begin WriteString('DBQ', sMdbPath);//数据库目录 WriteString('Description',sMdbPath+'数据源'); WriteString('Driver','C:\Windows\System32\odbcjt32.dll'); WriteInteger('DriverId', 25 ); WriteString('FIL', 'Ms Access;'); //Filter依据 WriteInteger('SafeTransaction', 0 ); //支持的事务操作数目 WriteString('UID', sUserId); //用户名称 WriteString('PWD', sUserPwd); //用户密码 bData[0] := 0; WriteBinaryData('Exclusive', bData, 1 );//非独占方式 WriteBinaryData('ReadOnly', bData, 1 );//非只读方式 end else begin Result:=False; Application.MessageBox('创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR); Exit; end; CloseKey; if OpenKey('Software\ODBC\ODBC.INI\'+sDsn+'\Engines\Jet',true) then begin WriteString('ImplicitCommitSync','Yes'); WriteInteger('MaxBufferSize',2048 );//缓冲区大小 WriteInteger('PageTimeout',5 );//页超时 WriteInteger('Threads',3 );//支持的线程数目 WriteString('UserCommitSync','Yes'); end else begin Result:=False; Application.MessageBox('创建ODBC数据源失败', '系统错误', MB_OK+MB_ICONERROR); Exit; end; CloseKey; Result:=True; Free; end; end; { 功能:连接ACCESS 参数:sDsn为数据源的名称 } function LinkAccess(sDsn: string): Boolean; begin Result := True; if _adoConn <> nil then _adoConn.Free; _adoConn := TADOConnection.Create(Application); _adoConn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=' + sDsn; _adoConn.LoginPrompt := False; _adoConn.Open; if not _adoConn.Connected then begin Application.MessageBox('连接ACCESS失败!', '系统错误', MB_OK+MB_ICONERROR); Result := False; end; end; { 功能:返回成功连接上数据库的ADOConnection实例 } function GetAdoConnection: TADOConnection; begin Result := _adoConn; if _adoConn = nil then begin Application.MessageBox('尚未创建数据库连接!', '系统错误', MB_OK+MB_ICONERROR); Exit; end; try if not _adoConn.Connected then _adoConn.Connected := True; except on E: Exception do Application.MessageBox(PChar('Exception in GetAdoConnection: '+E.Message), '系统错误', MB_OK+MB_ICONERROR); end; end; 上面是我封装的连接access的函数,下面对代码进行简单介绍: _adoConn 是 TADOConnection 变量,被申明成在单元内可见的变量,这样方便在LinkAccess和GetAdoConnection中共同使用,又不至于对其他单元文件产生影响。 2、应用举例 举例:我在e盘下有个access文件,名为db1.mdb, 该文件设了密码也为db1。下面代码为连接该文件的例子 begin if CreateAccessODBCDataSource('accessDataSource', 'e:\db1.mdb', 'db1', 'db1') then begin if LinkAccess('accessDataSource') then begin with TADOQuery.Create(nil) do try Connection := GetAdoConnection; SQL.Clear; SQL.Add('自己写吧'); Open; finally close; Free; end; end; end; end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论