在Notes数据库中,可以通过公式函数和Script读写其他关系数据库资料,本文就是举例讲解如何通过程序读写关系数据库,为了方便,以通过 ODBC访问TXT文件数据库格式举例。
一、设置ODBC数据源
Notes是通过ODBC数据源来访问关系数据库,但其他特殊数据库,如DB2,ORACLE等,有特殊的形式,不再此处解释。
1、在操作系统的控制面板中,打开“ODBC数据源”。
2、在“用户DSN”中单击“添加”,增加一个新的数据源。
3、选择数据源的驱动程序,本例选择“Microsoft Text Driver(*.txt,*.csv)”,单击“完成”。
4、在“ODBC文本安装中”输入:
· 数据源名称:此名称将是Notes访问ODBC数据库的识别名称,区分大小写,本例使用“TESTXT”。
· 描述:解释说明,可以缺省
· 目录:指定数据库的表单位置。本例为“c:txt”
· 注:真正的数据库文件应该是一个包括若干表单的文件数据资料库,如*.nsf数据库文件,而*.TXT,*.DBF等文件不能叫数据库,只能是属于数据库中的一个表单。因此需要指定其文件所属的数据库文件,即目录地址,表示此目录下的所有*.txt文件都属于此数据库中的表单。
5、在定义格式中,需要指定*.txt文件字段之间的分隔符,此例为"Tab"
6、在指定*.txt表单的字段名称,本例为:
· Field_Char:字符类型,10位
· Fidle_Int:整数类型
7、全部完成后,在“用户DSN”中可以看到“TESTXT”,表示ODBC数据库设置完成。
8、在“c:txt”目录中新建一个"abc.txt"文件,需要使用英文文件名称,数字有些问题,内容为
"aa"    1(用TAB分隔)
"bb"    2
二、利用Notes函数访问数据库
1、@DbColumn:检索指定的DBMS、表和列,并返回该列的所有值。
本例返回所有记录中的字段Table_Char的值:
@DbColumn("ODBC" : "NoCache" ; "TESTXT" ; "";"";"ABC.TXT" ;"Table_Char" )
返回"aa":"bb"
2、@DbLookup:检索指定的 DBMS,表和列,并对那些关键字列的值和指定的关键字匹配的记录返回该列的值。
    本例搜索字段Table_Char = "aa"的记录,并返回其字段Table_Int的值:
    @DbLookup("ODBC":"NoCache";"TESTXT";"";"";"ABC.TXT";"Table_Int";"";"Table_Char";"aa")
    返回:1
说明:这两条公式函数都能返回数据库,可以在域初始值的计算公式中使用,建议最好使用LotusScript来代替这两个函数,因为这两个函数对访问错误比较难捕获和处理。
三、利用Script读取数据库
使用LotusScript访问数据库的完整函数:
注意:使用LotusScript访问数据库一定要在(Options)中加入Uselsx "*LSXODBC"命令
Sub Click(Source As Button)                
    Dim con As New ODBCConnection
‘定义ODBC连接对象
    Dim qry As New ODBCQuery
‘定义ODBC执行对象
    Dim result As New ODBCResultSet
‘定义ODBC结果处理对象
    On Error Goto errorHandler
‘如果有错误,就显示错误信息
    Set qry.Connection = con
    Set result.Query = qry
    con.ConnectTo("TXTEST")
‘激活连接TESTXT数据库
    qry.SQL = "SELECT Table_Chat,Table_Int FROM ABC.TXT"
‘决定对表单的“ABC.TXT”的字段Table_Char,Table_Int进行处理
    result.Execute 
‘执行SQL命令
    maxrow = result.MaxRows
‘获得表单的记录数
    Call result.FirstRow
‘定位第一条记录
    Do
        aa = result.GetValue("Table_Char")
        bb = result.GetValue("Table_Int")
        Print aa,bb
‘将返回的值,打印显示
        Call result.NextRow
‘继续下一条记录
    Loop While maxrow > result.CurrentRow
‘如果搜索到最后条记录,退出循环
    result.Close(DB_CLOSE)
    con.Disconnect
Exit Sub
errorHandler:
    Messagebox result.GetExtendedErrorMessage,, result.GetErrorMessage
    Exit Sub
End Sub
四、利用Script写入数据库
使用LotusScript访问数据库的完整函数:
本函数仅加入了一条记录,你可以使用循环,将Notes数据库中的值加入到ODBC中。
Sub Click(Source As Button)                
    Dim con As New ODBCConnection
‘定义ODBC连接对象
    Dim qry As New ODBCQuery
‘定义ODBC执行对象
    Dim result As New ODBCResultSet
‘定义ODBC结果处理对象
    On Error Goto errorHandler
‘如果有错误,就显示错误信息
    Set qry.Connection = con
    Set result.Query = qry
    con.ConnectTo("TXTEST")
‘激活连接TESTXT数据库
    qry.SQL = "SELECT Table_Chat,Table_Int FROM ABC.TXT"
‘决定对表单的“ABC.TXT”的字段Table_Char,Table_Int进行处理
    result.Execute 
‘执行SQL命令
    result.AddRow
‘增加一行记录
    Call result.SetValue("Table_Char","cc")
    Call result.SetValue("Table_Int",3)
    result.UpdateRow
‘将增加的记录更新到数据库文件中
    result.Close(DB_CLOSE)
    con.Disconnect
‘关闭数据库,断开连接
Exit Sub
errorHandler:
    Messagebox result.GetExtendedErrorMessage,, result.GetErrorMessage
    Exit Sub
End Sub
五、Notes数据库和关系数据库的区别
关系数据库
NOTES数据库
DBF数据库
数据库文件
NSF数据库文件
文件目录
表单
视图
DBF文件
记录
文档
记录
字段
列值
字段