Я работаю над Lotus Notes 9, у меня есть несколько записей в базе данных Lotus Notes с вложением в документы.
Теперь я хотел бы переместить записи этого документа на сервер SQL со всеми текстовыми и числовыми полями и т. Д.Мне было интересно, если кто-нибудь может помочь мне в приложениях.Как я могу прикрепить вложение к типу BLOB-полей SQL-сервера с использованием LotusScript или JDBC (с использованием кода LS2J)?
Я знаю, что с помощью ODBC-соединения некоторые вещи могут быть достигнуты, но не знаю, как это сделать.Если кто-то выполнил подобное упражнение, любая помощь будет высоко оценена.
Вот код, в таблице SQL я задаю поле FileNameAtt is varbinary(max)
.
Sub Initialize
Dim cn As Variant
Dim rs As Variant
' Variable declarations
Dim file_length As Variant
Dim NumBlocks As Variant
Dim leftover As Variant
Dim inBuff As Variant, outBuff() As Byte
'VB Constants
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const adBlocksize = 4096
'Connect to the serve server
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
' Open provider
cn.open "SQLConnectionCSIDB", "user1", ""
Dim session As New NotesSession
Set stream = session.CreateStream
Call stream.open("C:\\Image1.PNG")
file_length=stream.Bytes
If file_length > 0 Then
num_blocks = Int(file_length / adBlocksize)
left_over = file_length Mod adBlocksize
Call rs.Open("SELECT TOP 1 * FROM tblFiles", cn, adOpenKeyset, adLockOptimistic)
rs.AddNew
'rs.Fields("dsize").Value = file_length
rs.Fields("FileNameAtt").Value ="C:\\Image1.PNG"
' Get blocks of the file
ReDim outBuff(adBlocksize)
For block_num = 1 To num_blocks
' Get data into a variant
inBuff = stream.Read(adBlocksize)
' Move to byte array
counter% = 0
ForAll b In inBuff
outBuff(counter%) = b
counter% = counter% + 1
End ForAll
' Save to field
rs.Fields("dimage").AppendChunk(outBuff)
Next block_num
' Get the remainder of the file
If left_over > 0 Then
inBuff = stream.Read(left_over)
' Move to byte array
counter% = 0
ReDim outBuff(left_over)
ForAll b In inBuff
outBuff(counter%) = b
counter% = counter% + 1
End ForAll
' Save to field
rs.Fields("dimage").AppendChunk(outBuff)
End If
rs.Update
Call rs.Close
End If
Call cn.Close
Set stream = Nothing
Set session = Nothing
End Sub
выдает ошибку, как показано ниже в номере строки
rs.Fields("FileNameAtt").Value ="C:\\Image1.PNG"
Поставщик Microsoft OLEDB для драйверов ODBC: ошибка, вызванная многоэтапной операцией OLE DB, проверьте значение каждого состояния OLE DB, если доступно, работа не выполнена
Спасибо, Человек