壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1807|回复: 16

[Domino B/S开发] NOTES 中动态表格的实现

[复制链接]
发表于 2003/4/17 09:41:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
---- LOTUS NOTES 为用户提供了强大的文档式数据库,在开发中利用 NOTES 提供的各种对象,“表单”;“视图”能很好的组织,查找数据。但是开发中需要生成数据的动态表格,如VB中的DBGRID。笔者在开发中用SQL SERVER 为后端数据库,或者动态的搜索NOTES 数据库中的值生成动态表格。下面的例子为出勤统计,员工请假后将在SQL SERVER 数据库中登记,每月进行统计。

---- 方法如下:

---- 一.建立与数据源的连接的准备

---- 我的后端数据库为 SQL SERVER ,首先在ODBC 中添加 “系统DSN”按步骤把要添加的数据源添加到“系统DSN”中,如图中的“gwgl”,设置好以后准备在NOTES 中进行连接。

---- 二.NOTES 中与ODBC的连接

---- 在NOTES 中共提供了三个对象用于操作数据库,

---- 1 ODBCConnection 用于连接到ODBC 数据源

---- 2 ODBCQuery 用于定义一个SQL 语句

---- 3 ODBCREsultSet 在结果集合上执行操作

---- 用ODBCConnection 对象的connectTo 成员函数进行连接。详细语句请看例子。

---- 三.NOTES 中对SQL数据库的操作

---- 在 NOTES 对数据库进行操作主要使用ODBCQUERY和 ODBCRESULTSET 。其中使用ODBCQUERY 的sql 属性 能灵活的对数据库进行有效的管理。

---- 此例的要求是这样的,在对公司的请销假的管理中,客户要求每月生成“考勤表”,而用户在请假和销假时都只是标出假期的开始和结束时间,生成一个全月每一天的记录难以实现。后端用sql 数据库,每当用户请假时插入一条记录,如已有此人的记录则更新记录。

---- 在每月的月末再把其他未请假的职工生成默认的记录。

---- 在访问 ODBC 类前 必须在(Golbal)对象中输入以下语句:

---- uselsx “*lsxodbc”

---- 在NOTES 中创建请销假表单,并创建一个“操作”,名为“登记”,当用户完成请假流程后此操作将出现。以下编码首先读取请假人的姓名和请假的时间,判断是否由此记录,如有则更新记录,如没有则插入记录。其编码为:

Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Dim con As New ODBCConnection
     Dim qry As New ODBCQuery
     Dim result As New ODBCResultSet
     Dim firstName As String
     Dim lastName As String
     Dim msg As String   ‘声明数据库对象
    Set qry.Connection = con
     Set result.Query = qry
     con.silentmode=True
     Dim ts As Integer
     If  con.ConnectTo("gwgl","sa","") Then
yf=uidoc.fieldgettext("dn")
         …..
nf=uidoc.fieldgettext("nf")   
‘取得NOTES 表单中域的值
Dim odate As Variant
sta1=Cint(Right(uidoc.fieldgettext
("xj_sta1"),2))
end1=Cint(Right(uidoc.fieldgettext
("xj_end1"),2)
‘取得假期的开始和结束时间
schstr="select qxj_xm from qxj
where qxj_xm='"
& xm &"' and year='" & nf & "'
and month='" & yf & "'"
qry.sql=schstr
result.execute
If result.IsResultSetAvailable Then
‘判断是否存在该数据
Dim n As Integer
Const qz="qxj_"
For i=sta1 To end1
ym=qz & i
schstr="update qxj set " & ym &"='"
        & lx & "' where qxj_xm=" & "'" & xm & "'"
n=n+1
Messagebox schstr
qry.sql=schstr
result.execute
Next
schstr="update qxj set " & lx &"='" & n
        & "' where qxj_xm=" & "'" & xm & "'"
qry.sql=schstr
result.execute
p=ts-n
schstr="update qxj set qxj_sc='" & p
        & "' where qxj_xm=" & "'" & xm & "'"
qry.sql=schstr
result.execute
Else  ‘存在该数据进行插入操作
Dim intstr As String
intstr="insert qxj (qxj_xm,year,month,qxj_sc)
         values('" & xm & "','" & nf & "','" & yf
        & "','" & ts & "')"
qry.sql=intstr
result.execute
Const qz1="qxj_"
For i=sta1 To end1
ym=qz1 & i
schstr="update qxj set " & ym &"='" & lx
         & "' where qxj_xm=" & "'" & xm & "'
and year='" & nf
         & "' and month='" & yf & "'"
n=n+1
    qry.sql=schstr
result.execute
schstr="update qxj set " & lx &"='" & n
         & "' where qxj_xm=" & "'" & xm & "'
and year='" & nf
         & "' and month='" & yf & "'"
qry.sql=schstr
result.execute
p=ts-n
schstr="update qxj set qxj_sc='" & p & "'
        where qxj_xm=" & "'" & xm & "'
and year='" & nf & "'
        and month='" & yf & "'"
qry.sql=schstr
result.execute
Next  
End If
     End If  
End Sub
 

---- 以上程序完成了数据的写入工作,下面利用SQL 语句读出数据,并且把数据输入表格中,使数据合理的换行,按表格的形式输出。首先按要求绘制表格,如下图的出勤统计表,在需要进行统计的指定表格中加入域,在读取数据时应用ODBCResultSet 的GetValue方法取得数据库中相应字段的值,并在每次取到数据后在数据后加上 chr(10)使数据自动换行,在利用NOTES的NotesUIDocument 对象的fieldsettext方法为相应的域付值。请注意调整表单中表的宽度,使数据有足够的空间。如下图(略)所示员工的姓名应足够容纳三个字方可。

---- 在统计表单中,加入“统计”操作 ,并下列代码输入(代码中有重复的地方已省略)

Sub Click(Source As Button)
     Dim workspace As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
     Set uidoc = workspace.CurrentDocument
     Dim con As New ODBCConnection
     Dim qry As New ODBCQuery
     Dim result As New ODBCResultSet
     Dim firstName As String
     Dim lastName As String
     Dim msg As String
     Set qry.Connection = con
     Set result.Query = qry
     con.silentmode=True
     nf=uidoc.fieldgettext("nf")
     yf=uidoc.fieldgettext("yf")
     If  con.ConnectTo("gwgl","sa","")
Then‘连接到数据库
qry.SQL = "SELECT * FROM qxj where year='"
        & nf & "'and month='" & yf & "'"
‘按下图表中用户输入的年份和月份取得的数据
        result.Execute
If result.IsResultSetAvailable Then
Do
result.NextRow
qxj_xm = result.GetValue("qxj_xm")
st=st & Chr(10) & qxj_xm
Call uidoc.fieldsettext("xm_1",st)
tq = result.GetValue("探亲")
t= t & Chr(10) & tq
Call uidoc.fieldsettext("tq",t)
b = result.GetValue("病")
bing= bing & Chr(10) & b
Call uidoc.fieldsettext("bing",bing)
……………..
Loop Until result.IsEndOfData

Call uidoc.save
result.Close(DB_CLOSE)
Else
Messagebox “对不起,不能连接到数据库!!"
Exit Sub
End If
con.Disconnect
     Else
Messagebox "不能连接到数据源!!"
        ‘网络不通或其他原因不能
连接到数据库给出提示
Exit Sub
     End If
End Sub

发表于 2003/4/17 10:02:12 | 显示全部楼层
不错!好东东!收藏!
发表于 2003/4/18 14:39:48 | 显示全部楼层
好东东喔
发表于 2003/4/18 14:57:10 | 显示全部楼层
却是不错啊!谢谢楼主!
 楼主| 发表于 2003/4/18 18:01:09 | 显示全部楼层
谢谢大家的支持,让我们共建美好未来!
发表于 2003/7/24 08:36:09 | 显示全部楼层
这怎么叫动态生成表格呢?我想看看如何在表单中画表格?!!!看看效果图,能否将效果图上传上来!!
发表于 2003/7/24 10:34:52 | 显示全部楼层
good,收藏先!thanks/鼓掌
发表于 2003/11/17 10:47:56 | 显示全部楼层
谢谢!/鼓掌
发表于 2003/11/28 11:12:48 | 显示全部楼层
好东西
发表于 2004/2/10 11:21:49 | 显示全部楼层
不错,但这不是动态生成表格啊,象vb,vc中能动态生成控件数组吗,好象r5.0至少没有这个功能
发表于 2004/2/11 17:17:15 | 显示全部楼层
好!!定!
发表于 2004/2/11 17:18:19 | 显示全部楼层
不过有些看不懂!!
发表于 2004/3/1 15:11:16 | 显示全部楼层
发表于 2004/3/4 00:54:46 | 显示全部楼层
好东东,.谢谢了先!
发表于 2004/3/11 17:57:40 | 显示全部楼层
好东东!支持!
发表于 2004/4/7 14:01:30 | 显示全部楼层
速度如何保证
发表于 2004/4/9 11:47:12 | 显示全部楼层
初学者,感谢大虾指教!!!!!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 17:17 , Processed in 0.024876 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表