lotus 图片存入sql server的操作方法(原创)

本文介绍了如何使用VB在Lotus中将图片存入SQL Server数据库,涉及ADO的AppendChunk方法和NotesStream类。通过分块读取超过32kb的二进制文件并将其追加到数据库记录中,实现了大文件存储。代码已测试成功,适用于产品资料库的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在讲插入ls 操作图片如何插入sql server之前,我们要先了解些相关知识
ADO中的AppendChunk方法---将我们的数据追加到大型文本、二进制文件中
Notesstream类,读取文件,转为二进制文件,具体请参考lotus designer的help
我们现在主要是用到open /read2个事件
2、代码段
sub F_ImageInsertSQL
'---声明所需要的一些变量
Dim conn As Variant
Dim EmpRS As Variant
Dim Stream As Variant'ADO 使用流,用于读取二进制文件,处理文件和图片
Dim Session As New NotesSession
Dim DB As NotesDatabase
Dim Doc As NotesDocument
Dim SQLCmd As String
Const Maxchunksize = 32767'系统限制的最大流值32kb,二进制文件分块后最大值是maxchunkSize;
Dim Allchunksize As Long'整个二进制文件的大小
Dim Numchunk As Long'一个二进制流分成几块,NumChunk=2,即分成2块
Dim LeftOver As Long '余数,=Allchunksize mod MaxChunkSize
Dim FileLength As Long'源文件长度
Dim instream As NotesStream


'初始化ADODB
Set Conn = CreateObject("ADODB.Connection")
Set EmpRS = CreateObject("ADODB.Recordset")
Set db=session.CurrentDatabase
Set Stream=CreateObject("ADODB.stream")

FileLength=Filelen(filename)'提取本地文件的大小,filename--绝对路径。如c:/a.jpg
If FileLength >0 Then
Numchunk=FileLength/Maxchunksize'提取到底存在多少个最大值
LeftOver=FileLength Mod Maxchunksize‘余数
End If
'---------得到数据库连接-------------------
ConnectString$=ADODB.GetSQLConnection(Nothing,"ProfileLK","g3")'这里是一个数据库字符串,用户自己可以设置
Conn.Open ConnectString$
'-----定义流----------------------------
Set instream = session.createstream

If instream.open(filename,"binary") Then’能够正常提取本地文件,binary--二进制的方式打开
'--------Add 数据----------------------------
SQLCmd = |Select * from b_material_photo |'sql命令语句
EmpRS.Open SQLCmd,Conn,1,3'执行语句

EmpRS.AddNew
EmpRS.Fields("father").Value = "abcd"
'--- 因为32kb大小的限制,我们的图片不可能都是小于32kb,
'这个时候就需要我们用一个循环语句按分块读取,maxChunkSize是每一个块的最大值
'当然由于我们不可能凑整数凑的这么好,多少还留有余数,所以我们还需要把最后一部
'分的余数也提取出来。
'
'
For i=1 To NumChunk
emprs("b_photo").AppendChunk instream.Read(maxChunkSize)
Next
emprs("b_photo").AppendChunk instream.Read(LeftOver)

EmpRS.Update
End If


end Sub


3、代码思路解释下
如果用户懂得vb、vc的操作方式的话,它们对于大文件存入数据库是需要把转为二进制的文件进行分块读取,提高读取速度。当然我们lotus,好像有32kb大小的限制,那我们正好就利用vb分块读取大文件写入数据库的思想,我们也就能够在lotus实现附件、图片存入sql server的操作
4、这个操作之前,我们还需要rtf域中的图片存入到本地,这个方法以前论坛里空空空好像还特别写了个类库,提取rtf域的附件到本地,大家可以在里面收下。
5、上面的代码,我自己测试过。主要是自己在做产品资料库的开发,需要这方面的技术,,这几天在网上查询资料,有些匮乏但问得人也不少。自己既然能实现这个功能,也希望给那些研究此功能的用户提供点帮助。

开发思路: 使用ADO通过ODBC链接进行Louts数据读取,在建立一个与SQL server数据库相连的ADO,将读取数据写入SQL server数据库。 安装环境: 首先安装lotus_notes853_win_SC(lotus客户端软件) 然后安装LOTUS_NOTES_SQL_853_W32_CIC6PEN(顺序好像有关系,win8.1安装64位不能正常使用,一定要安装32位的) 数据库连接: 先通过lotus客户端软件连接登陆成功,需要admin.id文件 通过ODBC 数据源(32 位) 添加 Lotus Notes SQL Driver(*.nsf)数据源,选择自己的loust数据库文件.nsf delphi ADO控件通过ODBC Drivers直接连接,本程序中用例名设置为LotusOA,每次连接需要输入lotus密码,其他开发这里就不在介绍可以看源代码 delphi ADO控件连接自己本地的SQL Server数据库,程序下载后自己修改 软件使用: 1、配置:通过config.ini修改LOTUSCONN,即LotusOA设置为自己的建立ODBC的名字,关系数据库修改DBCONN,本例中为SQLServer数据库 2、启动程序,点“数据源链接”,程序连接到lotus数据库Sql server数据库 设置原始表名:通过lotus设计程序中的试图中可以看到,大部分是fm_Main,设置创建表名用于数据导出的表 3、获取表字段,会读处lotus数据的所有表名,自动目标生成表创建的sql语句,默认字段长度都是254,如需要可以自己修改 4、点“创建表”按钮,如果已创建了不要再点这个按钮 5、点“导出数据”,程序开始自动导出数据 如果目标数据库是其他类型数据库,可自己通过配置文件config.ini中的DBCONN进行修改 lotus导入关系数据库的资源一直很难找,自己的一点拙见,希望对大家有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值