Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

OLEDB Provider does not return CLOB data to ADO in VB6 ??

101540May 14 2002
Hi all,

I hope someone can help me out, since I've a severe problem and a question.

I try to retrieve an Oracle CLOB field to use it for several purposes, but I fail in doing it.

Environment: VB6 SP5, MDAC 2.5x (can be upgraded to 2.7 if necessary) and ORACLE OLEDB Provider 8.1.7

I wrote a simple and small program that on load retrieves 10 records and tries to use the CLOB-field. To help myself, the program generates a messagebox about the CLOBfield that now says:

Name: ClobFld
Type: 201 (which seems to be OK)
TypeName: Null (???)
Defined size: 2147483647
Actual size: 0 (is incorrect)
Long: True
MayDefer: False
Chachedeferred: False

The program has a form with an ADO Data Control named Adodc1 on it

Most important question 1. Question 2 is irrelevant as long as I don't have a solution for 1.

1. What do I do wrong and how to get it running? When I copy the SQL-statement in TOAD I get the desired result and see (part of) the CLOB-string displayed.

2. I want to avoid retrieving the CLOB-field in a loop, using the GetChunk-method. As far as I know there are ways to do so, something like using an ADODB-Command object and setting some parameters before executing the query, but I have no idea how to do this. (Please don't respond with the usage of a stored procedure: I can not use that solution, since we now have more than 1 Oracle Instance/Schema-combinations with this type of data and expect more of them. The final program will allow the user to choose an Instance/Schema combination and I don't want to write/maintain stored procedures for each Instance/Schema combination.)

Here is my code, please take a look at it:

Private dbCon As ADODB.Connection
Private Rst As ADODB.Recordset

Private Sub Form_Initialize()

Set dbCon = New ADODB.Connection

With dbCon
.ConnectionString = "Provider=OraOLEDB.Oracle.1;OSAuthent=1;Data Source=DatabaseName"
.Open
End With

Set Rst = New ADODB.Recordset
Rst.Open "Select REGNO, ClobFld from Schema.Table where REGNO between 91 and 100", dbCon, adOpenStatic, adLockReadOnly
End Sub

Private Sub Form_Load()
Set Adodc1.Recordset = Rst
End Sub

Private Sub Form_Terminate()
Rst.Close
dbCon.Close
Set dbCon = Nothing
Set Rst = Nothing
End Sub

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

Dim MsgStr As String

Dim sResult As String
Const lChunkSize as Long = 100
Dim lFieldLength as Long
Dim lCharsRead as Long

If Not Rst.BOF And Not Rst.EOF Then
With Rst.Fields("ClobFld")
MsgStr = "Name: " & .Name & Chr(13)
MsgStr = MsgStr & "Type: " & .Type & Chr(13)
MsgStr = MsgStr & "Type: " & .Type & Chr(13)
MsgStr = MsgStr & "Typename: " & TypeName(.Value) & Chr(13)
MsgStr = MsgStr & "Defined size: " & .DefinedSize & Chr(13)
MsgStr = MsgStr & "Actual size: " & .ActualSize & Chr(13)
MsgStr = MsgStr & "Long: " & CBool(.Attributes And adFldLong) & Chr(13)
MsgStr = MsgStr & "Maydefer: " & CBool(.Attributes And adFldMayDefer) & Chr(13)
MsgStr = MsgStr & "Cachedeferred: " & CBool(.Attributes And adFldCacheDeferred) & Chr(13)
End With
MsgBox MsgStr

lFieldLength = Rst.Fields("ClobFld").ActualSize
lCharsRead = 0
While lCharsRead < lFieldLength
sResult = sResult & Rst.Fields("ClobFld").GetChunk(lChunkSize)
lCharsRead = lCharsRead + lChunkSize
Wend
End If

End Sub

Thanks in advance,

Hans Troost
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 11 2002
Added on May 14 2002
0 comments
637 views