Lotus数据库与模板之间的关系

本文详细介绍了数据库设计、模板的概念及应用,包括如何利用模板进行设计更新、避免影响正常数据库使用的方法,以及模板与数据库之间的区别。同时,阐述了如何在不同场景下使用模板刷新设计,确保设计质量和适应需求变化。

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

 为什么要有模板?
Notes数据库是个文档型数据库,集成了包含设计、权限、数据、索引等各类信息。
那么如何开发数据库,应用到现有数据,并且可以对其进行升级维护呢?直接修改设计,不仅因为测试不及时不能保证质量,还会影响到正常数据库的使用。
因此,如果有个数据库,可以作为模板,将修改好的设计刷新到目前正在使用的数据库中,既可以事先测试保证质量,又可以不断地增加功能,满足日益变化的需求,这样才算是理想的解决方案。
数据库和模板有什么差别呢?
其实很简单,在数据库属性对话框中(可以通过“文件->数据库->属性”菜单打开)中,单击第四个标签(设计标签),可以看到“数据库文件是主模板”,以及后面的“模板名称”这两栏,只要你勾上后填写了模板名称,它就是个模板了。
为什么很多地方都在说NTF呢?NTF是不是也是模板?
我们打开domino\data目录,可以看到数据库文件名的后缀主要有.nsf和.ntf两种,主要是为了直观地让大家在操作系统中区分,.nsf后缀的文件是数据库,.ntf后缀的文件是模板。
(注:有点像穿了军装的就是军人,不穿的就是群众一样)
但是真正的模板,哪怕后缀名是.nsf,只要在数据库属性框中填上了“模板名称”才算有效。
(其实要拿得出军人证的才真正是军人,不管你穿没穿军装。)
不过把文件后缀名改成了.ntf,还是有用处。如果你把该文件名放在domino\data目录下后,你新建数据库时,可以在“指定新数据库的模板”选择了服务器,就可以发现你的这个模板显示在列表中了。
一定要满足这两个条件:1)文件后缀名是.ntf;2)文件必须放在domino\data目录下,放在notes\data下就显示在local下,但是放在任何一个子目录下都不行。
注意这个时候,其实你没有在数据库属性框中填上“模板名称”,也是有效的。
(这就像穿了军装,很多地方就当你军人了,比如需要军人见义勇为的时候,不管你有没有军人证。)
还有其他用到模板列表的地方,比如“文件->数据库->替换设计”,也是一样。
小贴士:
反过来,你如果文件名是.nsf的话,并且在数据库属性框的设计标签中勾上“显示在打开数据库对话框”中,你就可以通过“文件->数据库->打开”列表中找到这个数据库了,改成.ntf等就不行。
(老百姓也有老百姓的好处呀,呵呵。)
怎么从模板中刷新设计呢?
还是回到那些真正的模板上,你在数据库属性框中填上了模板名称,你就可以方便地对数据库进行更新。
注意:模板名称在一个domino\data目录下的所有子目录下必须、必须唯一,否则有可能会出现异常效果!

如果你希望从模板中更新设计,那么同样在数据库属性框的这个设计标签上,你要在“从主模板继承设计”选项上打勾并且填写“模板名称”。
这个时候你要更新设计的话,你可以手工从“文件->数据库->刷新设计”菜单中,对某个数据库进行刷新了。
Domino也好,Notes也好,都能从自己的data目录包括其任何一级子目录下,找到模板名称一样的模板,将数据库的设计对照模板中的设计一一进行更新;当然如果设计一致,就不用更新了。(思考:更新依据是什么?是不是不管怎样都换一遍?)
另外,服务器上还有个凌晨执行的任务——Design,你们可以在notes.ini文件中找到:
ServerTasksAt1=Catalog,Design
运行了这个任务,服务器会在凌晨1点钟将所有填写了“从主模板继承设计”的模板名称的数据库做一遍刷新设计。当然如果找不到,它也会提示无法定位模板xxx。
从上面可以知道,数据库模板名称重要性了。
是不是可以对表单定义一些和其他数据库不同的设计模板?
除了数据库中可以定义模板名称外,还可以对每一个设计元素进行不同的模板名称定义。
比如我们可以切换到表单设计视图下,用“设计->设计属性”菜单打开设计属性对话框,同样是第3个设计标签中,可以看到“继承的设计模板”一栏,填写我们希望从中刷新设计的模板名称,就可以刷新设计了。
有什么用处呢?比如我们设计了许多不同的流程数据库,但是其中都要选择办理人,我们可以设计一个通用的人员选择框,这个选择框可以专门从一个公用资源库中继承设计。
是不是可以设置某些设计元素不刷新?
或者,
为什么有的时候明明改好了设计,也做过刷新设计,为什么还是以前的界面或功能?甚至还是以前的错误呢?
那就是设计属性中的下一个栏目:“刷新/替换设计时不允许修改”。
如果我想自己做一个测试的属性,或者在Domino系统模板里面增加一些属性,又不希望被它自己的模板给替换掉,我们可以把这个选项打上勾。
那么随之也会带来一个问题,在已经设置“从主模板继承设计”了以后,你每创建一个数据库,都有可能被打上勾,导致数据库中有很多无法被替换的设计元素。
所以记得养成修改设计模板,测试完再更新最终数据库的良好习惯。虽然可能调试起来会麻烦一点,但是安全、保险,不容易出错,也容易对大型项目做版本控制和质量管理。

以下是俺学习参考别人有关NOTES关系数据库互相操作的文档后更新的LOTUSSCRIPT程序代码 Set con=New ODBCConnection Set qry=New ODBCQuery Set rs=New ODBCResultSet Set qry.Connection = con Set rs.Query=qry Set ws=New notesuiworkspace Set uidoc=ws.currentdocument Dim s As New NotesSession Dim db As NotesDatabase Dim tempdoc As NotesDocument Dim StudentView As NotesView Dim j As Integer Set db=s.CurrentDatabase Set StudentView = db.GetView("($studentid)") Call con.ConnectTo("arice","","") qry.SQL="Select * From people" rs.execute rs.LastRow rs.CurrentRow = currentrow If Cstr(uidoc.fieldgettext("Saveoptions"))="0" Then '如果是新建表单 Set tempdoc=StudentView.GetDocumentByKey(Trim(uidoc.fieldgettext("Student_ID")),True)'判断是否在视图存在此学生id的表单 If Not tempdoc Is Nothing Then'如果存在 Messagebox "系统已经存在,请不要重复录入",,"警告" continue=False Exit Sub Else j = 0 For i = 1 To rs.NumRows rs.CurrentRow = i If Cstr(rs.GetValue("Cname")) = Cstr(uidoc.FieldGetText("Student_ID")) Then j = j + 1 End If Next '==============更新操作================================================== If j > 0 Then Call rs.SetValue("Student_id",Cstr(uidoc.FieldGetText("Student_ID"))) 'Messagebox "执行第一条语句" Call rs.SetValue("CName", Cstr(uidoc.fieldgettext("CName"))) 'Messagebox "执行第二条语句" Call rs.SetValue("EName", Cstr(uidoc.fieldgettext("EName"))) Call rs.SetValue("Address",Cstr(uidoc.fieldgettext("Address"))) Call rs.SetValue("Tel",Cstr(uidoc.fieldgettext("Tel"))) 'Messagebox "执行第五条语句" If rs.UpdateRow Then Messagebox "提交SQL数据库成功" 'Call uidoc.fieldsettext("Saveoptions","1") Call uidoc.Save(False,False) Else Messagebox "保存SQL数据库失败" Exit Sub End If Else Messagebox "是新增的文档,待定新增代码处理!" '====================新增保存代码========================= rs.AddRow Call rs.SetValue("Student_id",Cstr(uidoc.FieldGetText("Student_ID"))) Call rs.SetValue("CName", Cstr(uidoc.fieldgettext("CName"))) Call rs.SetValue("EName", Cstr(uidoc.fieldgettext("EName"))) Call rs.SetValue("Address",Cstr(uidoc.fieldgettext("Address"))) Call rs.SetValue("Tel",Cstr(uidoc.fieldgettext("Tel"))) If rs.UpdateRow Then Call uidoc.fieldsettext("Saveoptions","1") Call uidoc.Save(True,False) Messagebox "提交SQL数据库成功" Else Messagebox "保存SQL数据库失败" Exit Sub End If End If End If 'Messagebox "执行update条语句" Else Call rs.SetValue("Student_id",Cstr(uidoc.FieldGetText("Student_ID"))) 'Messagebox "执行第一条语句" Call rs.SetValue("CName", Cstr(uidoc.fieldgettext("CName"))) 'Messagebox "执行第二条语句" Call rs.SetValue("EName", Cstr(uidoc.fieldgettext("EName"))) Call rs.SetValue("Address",Cstr(uidoc.fieldgettext("Address"))) Call rs.SetValue("Tel",Cstr(uidoc.fieldgettext("Tel"))) 'Messagebox "执行第五条语句" If rs.UpdateRow Then Messagebox "提交SQL数据库成功" 'Call uidoc.fieldsettext("Saveoptions","1") Call uidoc.Save(True,False) Else Messagebox "保存SQL数据库失败" Exit Sub End If End If rs.Close(DB_CLOSE) con.Disconnect
开发思路: 使用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、付费专栏及课程。

余额充值