oledb 方式的连接 一般说来,访问远程后台数据库我们都是通过ODBC来完成的。但是,ODBC有一个致命的缺点——速度慢。事实上,对于ORACLE数据库,除了ODBC,我们还可以利用ORACLE本身所提供的OLE对象(Oracle Objects for OLE)来实现快速访问有关数据库。 在ORACLE V8中,Oracle Objects for OLE(以下简称OO)为常用开发工具提供了一整套与数据库简单相连的通讯访问方式,它支持各种支持VB自定义控件或OLE自动化(OLE Automation)的开发环境。OO主要由三部分组成: l ORACLE对象服务器(the Oracle Object Server) l ORACLE数据访问控件(the Oracle Data Control) l C++类库(the Oracle Objects for OLE C++ Class Library)OO主要包括对象和用途: OraClient 定义工作域,并管理会话集。 OraSession 管理数据库对象集,并提供共享式连接和事务控制。 OraConnection 与ORACLE数据之间建立的连接。 OraDatabase 对ORACLE数据库的一个“虚”登录。 OraParamArray 参数组。 OraParameter 绑定在SQL语句或PL/SQL块中的有关变量。 OraDynaset 利用SELECT语句所得到的记录。 OraSQLStmt 预定义的单独的一句SQL语句。 OraField OraDynaset对象中的列(Column)。Private Sub Command_Click() Ls_server = "baoprog" '联接本地Oracle数据库 Ls_username = "system" '用户名为 system Ls_password = "manager" '密码为 manager '建立 OraSession 对象 Set OraSession = CreateObject("OracleInProcServer.XOraSession") '错误处理 On Error GoTo Connect_err:'建立OraDatabase 对象以联接到Oracle数据库 Set OraDatabase = OraSession.DbOpenDatabase(Ls_server, Ls_username + "/" + Ls_password, 0&) On Error GoTo 0 Exit Sub Connect_err: If InStr(OraSession.LastServerErrText, "ORA-01017") Then MsgBox "无效的用户名和密码,数据库联接不成功!", vbOKOnly + vbCritical, "提示信息" Else MsgBox "数据库联接不成功!请查看下面的出错信息:" + Chr(13) + OraSession.LastServerErrText, vbOKOnly + vbCritical, "提示信息" End IfEnd Sub
看一看: http://www.84ren.com/bbs/read.php?tid=712
Option Explicit Dim Cn As rdoConnection Dim En As rdoEnvironment Dim CPw As rdoQuery Dim Rs As rdoResultset Dim Conn As String Dim QSQL As String Dim Response As String Dim Prompt As String Private Sub cmdCheck_Click() QSQL = "Select Item_Number, Depot_Number From rdooracle Where " _ & "item_number =" & txtInput.Text Set Rs = Cn.OpenResultset(QSQL, rdOpenStatic, , rdExecDirect) Prompt = "Item_Number = " & Rs(0) & ". Depot_Number = " _ & Rs(1) & "." Response = MsgBox(Prompt, , "Query Results") Rs.Close End Sub Private Sub cmdSend_Click() CPw(0) = Val(txtInput.Text) CPw.Execute Prompt = "Return value from stored procedure is " & CPw(1) & "." Response = MsgBox(Prompt, , "Stored Procedure Result") End Sub Private Sub Form_Load() Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _ [$ "CONNECTSTRING=MyOracle]" Set En = rdoEnvironments(0) Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn) QSQL = "{call rdoinsert(?,?)}" Set CPw = Cn.CreateQuery("", QSQL) End Sub Private Sub Form_Unload(Cancel As Integer) En.Close End Sub =================================== kuui_chiu Conn = "UID=test;PWD=test;driver={Microsoft ODBC Driver for Oracle};" [$ "CONNECTSTRING=test]" Set En = rdoEnvironments(1) Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn) MsgBox "successful" 运行时报错,在Set En = rdoEnvironments(1)报错误(429),ActiveX元件无法产生物件,我哪里弄错了,试了好久,没结果,版主帮我看看吧~~~~~~~~~--------------------------------------------------------------------------------贝贝牛 原理很简单,首先建立ODBC数据源连接池,记住要使用系统DSN 添加MICROSOFT ODBC FOR ORACLE 然后输入标识名 最下面SID 输入ORACLE的实例名称 就可以了不用填写用户等,然后是定义连接 值得注意的是ORACLE的查询速度非常的好,只是在连接过程中启始连接速度比较慢;解决方法是使用长连接就可以了。--------------------------------------------------------------------------------kuui_chiu 贝贝牛:感谢你的回复,我试着在系统DSN里建了这个实例,连接测试也成功了,可是在程序里还是通不过,可否帮忙看看,我哪里写错了啊,谢谢了~~~~~~~~--------------------------------------------------------------------------------贝贝牛 运行时报错,在Set En = rdoEnvironments(1)报错误(429),ActiveX元件无法产生物件,我哪里弄错了,试了好久,没结果,版主帮我看看吧 我看这问题是在你没有加载Microsoft ActiveX 2.5 LIB 的缘故。 conn="DSN=;UID=;PWD=" 其中DSN就是你在系统DSN定义的名称,UID就是ORACLE里面的用户名一般来说用SCOTT,PWD=tiger. 剩下的就可以相当连接ACCESS那样就可以了。最简单的方法就是使用VB数据向导就可以了,不要告诉我你不会用哦。--------------------------------------------------------------------------------kuui_chiu 用向导我已经成功了,可是在程序里怎么也弄不成,我都已经把与access, database, remote等相关词的都加载了,还有,我用的是VBA,我想与VB应该是一样的吧~~~~~~~~--------------------------------------------------------------------------------贝贝牛 当然你选择的都没有用不是用ACCESS之类的东西,应该用ODBC然后选择你建立的ODBC数据源然后你要输入用户名称和密码,接下来就是选择表了,、然后你应该知道怎么做了吧,不过数据向导做不来的是用了控件的,如果你想用类的话,你在引用里面选择Microsoft activex 2.5 lib 就可以象上面的代码一样使用类了。如果需要等下次我写个模块给你。--------------------------------------------------------------------------------kuui_chiu 贝贝牛 wrote: 当然你选择的都没有用不是用ACCESS之类的东西,应该用ODBC然后选择你建立的ODBC数据源然后你要输入用户名称和密码,接下来就是选择表了,、然后你应该知道怎么做了吧,不过数据向导做不来的是用了控件的,如果你想用类的话,你在引用里面选择Microsoft activex 2.5 lib 就可以象上面的代码一样使用类了。如果需要等下次我写个模块给你。 我连的是Oracle数据库,因为是第一次做,所以不是很懂,非常感谢你的回复,等你把模块传上来,我再试试~~~~~~~~~~~:)
一般说来,访问远程后台数据库我们都是通过ODBC来完成的。但是,ODBC有一个致命的缺点——速度慢。事实上,对于ORACLE数据库,除了ODBC,我们还可以利用ORACLE本身所提供的OLE对象(Oracle Objects for OLE)来实现快速访问有关数据库。
在ORACLE V8中,Oracle Objects for OLE(以下简称OO)为常用开发工具提供了一整套与数据库简单相连的通讯访问方式,它支持各种支持VB自定义控件或OLE自动化(OLE Automation)的开发环境。OO主要由三部分组成:
l ORACLE对象服务器(the Oracle Object Server)
l ORACLE数据访问控件(the Oracle Data Control)
l C++类库(the Oracle Objects for OLE C++ Class Library)OO主要包括对象和用途:
OraClient 定义工作域,并管理会话集。
OraSession 管理数据库对象集,并提供共享式连接和事务控制。
OraConnection 与ORACLE数据之间建立的连接。
OraDatabase 对ORACLE数据库的一个“虚”登录。
OraParamArray 参数组。
OraParameter 绑定在SQL语句或PL/SQL块中的有关变量。
OraDynaset 利用SELECT语句所得到的记录。
OraSQLStmt 预定义的单独的一句SQL语句。
OraField OraDynaset对象中的列(Column)。Private Sub Command_Click()
Ls_server = "baoprog"
'联接本地Oracle数据库
Ls_username = "system"
'用户名为 system
Ls_password = "manager"
'密码为 manager
'建立 OraSession 对象
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'错误处理
On Error GoTo Connect_err:'建立OraDatabase 对象以联接到Oracle数据库
Set OraDatabase = OraSession.DbOpenDatabase(Ls_server, Ls_username + "/" + Ls_password, 0&)
On Error GoTo 0
Exit Sub
Connect_err:
If InStr(OraSession.LastServerErrText, "ORA-01017") Then
MsgBox "无效的用户名和密码,数据库联接不成功!", vbOKOnly + vbCritical, "提示信息"
Else
MsgBox "数据库联接不成功!请查看下面的出错信息:" + Chr(13) + OraSession.LastServerErrText, vbOKOnly + vbCritical, "提示信息"
End IfEnd Sub
http://www.84ren.com/bbs/read.php?tid=712
Dim Cn As rdoConnection
Dim En As rdoEnvironment
Dim CPw As rdoQuery
Dim Rs As rdoResultset
Dim Conn As String
Dim QSQL As String
Dim Response As String
Dim Prompt As String Private Sub cmdCheck_Click() QSQL = "Select Item_Number, Depot_Number From rdooracle Where " _
& "item_number =" & txtInput.Text
Set Rs = Cn.OpenResultset(QSQL, rdOpenStatic, , rdExecDirect) Prompt = "Item_Number = " & Rs(0) & ". Depot_Number = " _
& Rs(1) & "." Response = MsgBox(Prompt, , "Query Results") Rs.Close End Sub Private Sub cmdSend_Click() CPw(0) = Val(txtInput.Text)
CPw.Execute Prompt = "Return value from stored procedure is " & CPw(1) & "."
Response = MsgBox(Prompt, , "Stored Procedure Result") End Sub Private Sub Form_Load() Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
[$ "CONNECTSTRING=MyOracle]" Set En = rdoEnvironments(0)
Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
QSQL = "{call rdoinsert(?,?)}"
Set CPw = Cn.CreateQuery("", QSQL) End Sub Private Sub Form_Unload(Cancel As Integer) En.Close End Sub
===================================
kuui_chiu
Conn = "UID=test;PWD=test;driver={Microsoft ODBC Driver for Oracle};" [$ "CONNECTSTRING=test]"
Set En = rdoEnvironments(1)
Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
MsgBox "successful" 运行时报错,在Set En = rdoEnvironments(1)报错误(429),ActiveX元件无法产生物件,我哪里弄错了,试了好久,没结果,版主帮我看看吧~~~~~~~~~--------------------------------------------------------------------------------贝贝牛
原理很简单,首先建立ODBC数据源连接池,记住要使用系统DSN 添加MICROSOFT ODBC FOR ORACLE 然后输入标识名 最下面SID 输入ORACLE的实例名称 就可以了不用填写用户等,然后是定义连接 值得注意的是ORACLE的查询速度非常的好,只是在连接过程中启始连接速度比较慢;解决方法是使用长连接就可以了。--------------------------------------------------------------------------------kuui_chiu
贝贝牛:感谢你的回复,我试着在系统DSN里建了这个实例,连接测试也成功了,可是在程序里还是通不过,可否帮忙看看,我哪里写错了啊,谢谢了~~~~~~~~--------------------------------------------------------------------------------贝贝牛
运行时报错,在Set En = rdoEnvironments(1)报错误(429),ActiveX元件无法产生物件,我哪里弄错了,试了好久,没结果,版主帮我看看吧
我看这问题是在你没有加载Microsoft ActiveX 2.5 LIB 的缘故。
conn="DSN=;UID=;PWD="
其中DSN就是你在系统DSN定义的名称,UID就是ORACLE里面的用户名一般来说用SCOTT,PWD=tiger.
剩下的就可以相当连接ACCESS那样就可以了。最简单的方法就是使用VB数据向导就可以了,不要告诉我你不会用哦。--------------------------------------------------------------------------------kuui_chiu
用向导我已经成功了,可是在程序里怎么也弄不成,我都已经把与access, database, remote等相关词的都加载了,还有,我用的是VBA,我想与VB应该是一样的吧~~~~~~~~--------------------------------------------------------------------------------贝贝牛
当然你选择的都没有用不是用ACCESS之类的东西,应该用ODBC然后选择你建立的ODBC数据源然后你要输入用户名称和密码,接下来就是选择表了,、然后你应该知道怎么做了吧,不过数据向导做不来的是用了控件的,如果你想用类的话,你在引用里面选择Microsoft activex 2.5 lib 就可以象上面的代码一样使用类了。如果需要等下次我写个模块给你。--------------------------------------------------------------------------------kuui_chiu
贝贝牛 wrote:
当然你选择的都没有用不是用ACCESS之类的东西,应该用ODBC然后选择你建立的ODBC数据源然后你要输入用户名称和密码,接下来就是选择表了,、然后你应该知道怎么做了吧,不过数据向导做不来的是用了控件的,如果你想用类的话,你在引用里面选择Microsoft activex 2.5 lib 就可以象上面的代码一样使用类了。如果需要等下次我写个模块给你。
我连的是Oracle数据库,因为是第一次做,所以不是很懂,非常感谢你的回复,等你把模块传上来,我再试试~~~~~~~~~~~:)