我给你我的一个执行你的类似包的vb代码,我一直在用,是可以的。
Public Function fReceiveCandImage(ByVal RemoteID As String, ByVal ResponseID As Long, ocKeyNo As String, oiFingerNo As Integer) As Boolean
Dim rsR As New ADODB.Recordset
Dim cmdR As ADODB.Command
Dim Pram As ADODB.Parameter
'//写日志
Call WriteToSendLog("开始接收候补图象信息, ResponseID = " & ResponseID)
On Error GoTo fReceiveCandImageErr
'//执行以上过程
Set cmdR = New ADODB.Command
With cmdR
.CommandText = "{call pkgRemote.sp_Get_CandidateImg(?,?,{resultset 0, io_cursor})}"
.CommandType = adCmdText 'adCmdText
Set Pram = .CreateParameter("iRemote_ID_I", adBSTR, adParamInput, , RemoteID)
.Parameters.Append Pram
Set Pram = .CreateParameter("iResponseID", adInteger, adParamInput, , ResponseID)
.Parameters.Append Pram
End With
'//得到记录集
rsR.CursorType = adOpenStatic
rsR.LockType = adLockReadOnly
Set cmdR.ActiveConnection = CNRemote 'CNRemote是一个ADO的连接
Set rsR.Source = cmdR
'set fExecuteOneCommand = CNRemote.Execute '这是另一种执行方式
rsR.Open
'//如果没有记录集,过程执行不成功
If rsR Is Nothing Then
Call WriteToSendLog("读取远程remote数据库发生错误")
fReceiveCandImage = False
GoTo fReceiveCandImageErr
End If
'//如果记录集为空,没有取到数据
If rsR.EOF Then
Call WriteToSendLog("没有该图象供接收:ResponseID = " & ResponseID)
fReceiveCandImage = False
GoTo fReceiveCandImageExit
End If
'//函数执行成功,数据获取成功
fReceiveCandImage = True
Call WriteToSendLog("接收候补图像结束")
fReceiveCandImageExit:
If rsR.Status = adStateOpen Then rsR.Close
Set rsR = Nothing
If Not (cmdR Is Nothing) Then Set cmdR = Nothing
On Error GoTo 0
Exit Function
fReceiveCandImageErr:
Call WriteToSendLog("接收候补图像失败:" & Err.Description)
fReceiveCandImage = False
GoTo fReceiveCandImageExit
End Function
Public Function fReceiveCandImage(ByVal RemoteID As String, ByVal ResponseID As Long, ocKeyNo As String, oiFingerNo As Integer) As Boolean
Dim rsR As New ADODB.Recordset
Dim cmdR As ADODB.Command
Dim Pram As ADODB.Parameter
'//写日志
Call WriteToSendLog("开始接收候补图象信息, ResponseID = " & ResponseID)
On Error GoTo fReceiveCandImageErr
'//执行以上过程
Set cmdR = New ADODB.Command
With cmdR
.CommandText = "{call pkgRemote.sp_Get_CandidateImg(?,?,{resultset 0, io_cursor})}"
.CommandType = adCmdText 'adCmdText
Set Pram = .CreateParameter("iRemote_ID_I", adBSTR, adParamInput, , RemoteID)
.Parameters.Append Pram
Set Pram = .CreateParameter("iResponseID", adInteger, adParamInput, , ResponseID)
.Parameters.Append Pram
End With
'//得到记录集
rsR.CursorType = adOpenStatic
rsR.LockType = adLockReadOnly
Set cmdR.ActiveConnection = CNRemote 'CNRemote是一个ADO的连接
Set rsR.Source = cmdR
'set fExecuteOneCommand = CNRemote.Execute '这是另一种执行方式
rsR.Open
'//如果没有记录集,过程执行不成功
If rsR Is Nothing Then
Call WriteToSendLog("读取远程remote数据库发生错误")
fReceiveCandImage = False
GoTo fReceiveCandImageErr
End If
'//如果记录集为空,没有取到数据
If rsR.EOF Then
Call WriteToSendLog("没有该图象供接收:ResponseID = " & ResponseID)
fReceiveCandImage = False
GoTo fReceiveCandImageExit
End If
'//函数执行成功,数据获取成功
fReceiveCandImage = True
Call WriteToSendLog("接收候补图像结束")
fReceiveCandImageExit:
If rsR.Status = adStateOpen Then rsR.Close
Set rsR = Nothing
If Not (cmdR Is Nothing) Then Set cmdR = Nothing
On Error GoTo 0
Exit Function
fReceiveCandImageErr:
Call WriteToSendLog("接收候补图像失败:" & Err.Description)
fReceiveCandImage = False
GoTo fReceiveCandImageExit
End Function
解决方案 »
- decode有问题?
- sqlplus中怎么在1个服务器中访问另外一个服务器的数据库?
- 又一道SQL题
- win7(64bit)在安装Oracle_11G时, PATH 环境变量的长度这个问题解决不了,还望各位高手帮忙解决下。谢谢了....
- 简单连接问题:求助
- 请指教:偶尔会出现 ORA-00923 错误的pl/sql语句
- linux下安装oracle,出现没有权限的报警,怎么解决?
- 怎么改变一张表的字段名??
- 十里开源最新决策『十里开源__http://www.opensource.com.cn』
- 请问高手,如何移动oracle数据库
- 关于索引的问题
- pro*c能调用oracle中的存储过程吗?
DROP TABLE person;CREATE TABLE person
(ssn NUMBER(9) PRIMARY KEY,
fname VARCHAR2(15),
lname VARCHAR2(20));INSERT INTO person VALUES(555662222,'Sam','Goodwin');INSERT INTO person VALUES(555882222,'Kent','Clark');INSERT INTO person VALUES(666223333,'Jane','Doe');COMMIT;
/
Create the following package on your Oracle server:CREATE OR REPLACE PACKAGE packperson
AS
TYPE tssn is TABLE of NUMBER(10)
INDEX BY BINARY_INTEGER;
TYPE tfname is TABLE of VARCHAR2(15)
INDEX BY BINARY_INTEGER;
TYPE tlname is TABLE of VARCHAR2(20)
INDEX BY BINARY_INTEGER; PROCEDURE allperson
(ssn OUT tssn,
fname OUT tfname,
lname OUT tlname);
PROCEDURE oneperson
(onessn IN NUMBER,
ssn OUT tssn,
fname OUT tfname,
lname OUT tlname);
END packperson;
/
Create the following package body on your Oracle server:CREATE OR REPLACE PACKAGE BODY packperson
ASPROCEDURE allperson
(ssn OUT tssn,
fname OUT tfname,
lname OUT tlname)
IS
CURSOR person_cur IS
SELECT ssn, fname, lname
FROM person; percount NUMBER DEFAULT 1;BEGIN
FOR singleperson IN person_cur
LOOP
ssn(percount) := singleperson.ssn;
fname(percount) := singleperson.fname;
lname(percount) := singleperson.lname;
percount := percount + 1;
END LOOP;
END;PROCEDURE oneperson
(onessn IN NUMBER,
ssn OUT tssn,
fname OUT tfname,
lname OUT tlname)
IS
CURSOR person_cur IS
SELECT ssn, fname, lname
FROM person
WHERE ssn = onessn; percount NUMBER DEFAULT 1;BEGIN
FOR singleperson IN person_cur
LOOP
ssn(percount) := singleperson.ssn;
fname(percount) := singleperson.fname;
lname(percount) := singleperson.lname;
percount := percount + 1;
END LOOP;
END;
END;
/
Open a new project in Visual Basic 5.0 or 6.0 Enterprise edition. Form1 is created by default.
Place the following controls on the form:
Control Name Text/Caption
-----------------------------------------
Button cmdGetEveryone Get Everyone
Button cmdGetOne Get One
From the Tools menu, select the Options item. Click the "Default Full Module View" option and then click OK. This will allow you to view all of the code for this project. Paste the following code into your code window:Option Explicit
Dim Cn As ADODB.Connection
Dim CPw1 As ADODB.Command
Dim CPw2 As ADODB.Command
Dim Rs As ADODB.Recordset
Dim Conn As String
Dim QSQL As String
Dim inputssn As LongPrivate Sub cmdGetEveryone_Click() Set Rs.Source = CPw1 Rs.Open While Not Rs.EOF
MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)
Rs.MoveNext
Wend Rs.CloseEnd SubPrivate Sub cmdGetOne_Click() Set Rs.Source = CPw2 inputssn = InputBox("Enter the SSN you wish to retrieve:") CPw2(0) = inputssn Rs.Open MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2) Rs.CloseEnd SubPrivate Sub Form_Load() 'Replace <User ID>, <Password>, and <Server> with the
'appropriate parameters.
Conn = "UID=*****;PWD=*****;driver=" _
& "{Microsoft ODBC for Oracle};SERVER=dseOracle;" Set Cn = New ADODB.Connection
With Cn
.ConnectionString = Conn
.CursorLocation = adUseClient
.Open
End With QSQL = "{call packperson.allperson({resultset 9, ssn, fname, " _
& "lname})}" Set CPw1 = New ADODB.Command
With CPw1
Set .ActiveConnection = Cn
.CommandText = QSQL
.CommandType = adCmdText
End With QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, " _
& "lname})}" Set CPw2 = New ADODB.Command
With CPw2
Set .ActiveConnection = Cn
.CommandText = QSQL
.CommandType = adCmdText
.Parameters.Append .CreateParameter(, adInteger, adParamInput)
End With Set Rs = New ADODB.Recordset
With Rs
.CursorType = adOpenStatic
.LockType = adLockReadOnly
End WithEnd SubPrivate Sub Form_Unload(Cancel As Integer) Cn.Close
Set Cn = Nothing
Set CPw1 = Nothing
Set CPw2 = Nothing
Set Rs = NothingEnd Sub
Go to the Project menu item and select References. Select the "Microsoft Active Data Objects 2.x Library." Run the project. When you click on the "Get Everyone" button, it executes this query:QSQL = "{call packperson.allperson({resultset 9, ssn, fname, "_
& "lname})}"
我照你的方法已经实现,
Set rs = New ADODB.Recordset
Dim comm As New ADODB.Command
Dim SQLS As String
SQLS = "{call pkg_test.getforums({resultset 10, forumname})}"
With comm '执行存储过程
.ActiveConnection = Cn
.CommandType = adCmdText
.CommandText = SQLS
.Execute
End With
Set rs.Source = comm
rs.Open
' While Not rs.EOF '在这里可以看到数据集!
' MsgBox "Name: " & rs(0)
' rs.MoveNext
' Wend
Set DataGrid1.DataSource = rs还有个问题是,我想把RS附值给一个DBGRID!但是在DBGIRD里面看不到数据,不知道为什么!