首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

oracle的CLOB字段,如何用VB6来读写

2012-01-10 
oracle的CLOB字段,怎么用VB6来读写?找到过一个关于BLOB字段的读写模块,用这个来存取图片等文件都成功了,但

oracle的CLOB字段,怎么用VB6来读写?
找到过一个关于BLOB字段的读写模块,用这个来存取图片等文件都成功了,但是.TXT用这个来处理,想存进CLOB字段会变成乱码,有人能找出其中的问题所在吗?

Option   Explicit
Public   rn   As   ADODB.Connection

Public   Function   CreateDataSource(DataSource   As   String,   UserID   As   String,   Password   As   String)   As   Boolean
On   Error   GoTo   DbConErr:
Set   rn   =   New   ADODB.Connection
With   rn
.ConnectionString   =   "Provider=OraOLEDB.Oracle.1;   password=TEST   ;User   ID   =   TEST;Data   Source=DEV;Locale   Identifier=2052 "
.Open
End   With
CreateDataSource   =   True
Exit   Function
DbConErr:
CreateDataSource   =   False
End   Function

Sub   BlobToFile(fld   As   ADODB.Field,   filename   As   String,   Optional   ChunkSize   As   Long   =   8192)
        Dim   fnum   As   Integer,   bytesleft   As   Long,   bytes   As   Long
        Dim   tmp()   As   Byte
        If   (fld.Attributes   And   adFldLong)   =   0   Then
                Err.Raise   1001,   ,   "field   doesn 't   support   the   GetChunk   method. "
        End   If
        If   Dir$(filename)   <>   " "   Then   Kill   filename
        fnum   =   FreeFile
        Open   filename   For   Binary   As   fnum
        bytesleft   =   fld.ActualSize
        Do   While   bytesleft
                bytes   =   bytesleft
                If   bytes   >   ChunkSize   Then   bytes   =   ChunkSize
                tmp   =   fld.GetChunk(bytes)
                Put   #fnum,   ,   tmp
                bytesleft   =   bytesleft   -   bytes
        Loop
        Close   #fnum
End   Sub

Sub   FileToBlob(fld   As   ADODB.Field,   filename   As   String,   Optional   ChunkSize   As   Long   =   8192)
        Dim   fnum   As   Integer,   bytesleft   As   Long,   bytes   As   Long
        Dim   tmp()   As   Byte
        If   (fld.Attributes   And   adFldLong)   =   0   Then
                Err.Raise   1001,   ,   "field   doesn 't   support   the   GetChunk   method. "
        End   If
        If   Dir$(filename)   =   " "   Then   Err.Raise   53,   ,   "File   not   found "
        fnum   =   FreeFile
        Open   filename   For   Binary   As   fnum


        bytesleft   =   LOF(fnum)
        Do   While   bytesleft
                bytes   =   bytesleft
                If   bytes   >   ChunkSize   Then   bytes   =   ChunkSize
                ReDim   tmp(1   To   bytes)   As   Byte
                Get   fnum,   ,   tmp
                fld.AppendChunk   tmp
                bytesleft   =   bytesleft   -   bytes
        Loop
        Close   #fnum
End   Sub

Private   Sub   cmdread_Click()
        Dim   rs   As   New   ADODB.Recordset
        rs.ActiveConnection   =   rn
        rs.LockType   =   adLockOptimistic
        rs.CursorLocation   =   adUseClient
        rs.Source   =   "select   *   from   t_demo "
        rs.Open
        comDlgDir.DialogTitle   =   "保存文件 "
        comDlgDir.Filter   =   "*.* "
        comDlgDir.ShowSave
        Call   BlobToFile(rs.Fields( "text "),   comDlgDir.filename)
        Set   rs   =   Nothing
        Exit   Sub
        Set   rs   =   Nothing
End   Sub
Private   Sub   cmdsave_Click()
        Dim   rs   As   New   ADODB.Recordset
        rs.ActiveConnection   =   rn
        rs.LockType   =   adLockOptimistic
        rs.CursorLocation   =   adUseClient
        rs.Source   =   "select   *   from   t_demo "
        rs.Open  
        rs.AddNew
        comDlgDir.DialogTitle   =   "选取文件 "
        comDlgDir.ShowOpen
        rs.Fields( "id ").Value   =   1
        If   comDlgDir.filename   <>   " "   Then
                Call   FileToBlob(rs.Fields( "text "),   comDlgDir.filename)
                rs.Update
        End   If
        Set   rs   =   Nothing
        Exit   Sub
        Set   rs   =   Nothing
End   Sub
Private   Sub   Form_Load()
        If   Not   CreateDataSource( "DEV ",   "TEST ",   "TEST ")   Then
                MsgBox   "Connection   failure! "
        End   If
End   Sub



[解决办法]
为什么要使用ADO呢?换OraDatabase吧

热点排行