请问如何删除文档 (从sql中读进来的数据)

never_ever 2002-01-17 11:35:42
一个代理从sql数据库中抓员工的信息,然后存在notes中。每一个员工是一份文档。
可以更新资料和增加新的员工资料。主键为EmployeeId.
现在问题是,假如一个员工离职,他的信息就在sql database中不存在了。那么我如何在notes中判断并删除这一个员工的文档呢?
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
never_ever 2002-01-18
  • 打赏
  • 举报
回复
自己解决问题。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim Sview As NotesView
Dim Sdoc As notesDocument
Dim j As Integer
Dim k As Integer
k=0

Set Sview = db.GetView("EmployeeInfo1")
Set Sdoc = view.GetDocumentByKey("EmployeeId" )
ItemValue= Ubound(Bdoc.Item)-Lbound(Bdoc.Item)

For j=0 To ItemValue

'get the value of employeeId from the existed document

EmployeeId= Sdoc.GetItemValue(EmployeeId)

'look up this employee's information in the SQL database

Set db = session.CurrentDatabase
If Not con.ConnectTo("NotesTest","hr","hr") Then
Messagebox "Could not connect to NotesTest",, _
"Error connecting"
Exit Sub
End If

Set qry.Connection = con
Set result.Query = qry
qry.SQL = "SELECT employee_id FROM NotesTestTable where employee_id = EmployeeId ORDER BY employee_id"
result.Execute

If result.IsValueNull(employee_id) Then

'delete the employee's document in Notes.
Bdoc.remove(True)
k=k+1

'if k >= 30, then send a reminding email to system admin


End If

'jump to next document


Next


End Sub
虎头是我 2002-01-18
  • 打赏
  • 举报
回复
既然这样,你可以在SQL里创建一个离开员工TABLE,
再用这个表的关键字去铲除NOTES中数据,这样只要搜索1遍就可以了
@dbcolumn好象只能搜索,不能删除,而且我从不用它处理ODBC,不好用
never_ever 2002-01-18
  • 打赏
  • 举报
回复
"删除的SQL语句"
不是要删除sql table里面的东西拉.
我现在的解决方法是这样的:
做一个循环,从notes里面的第一个文档到最后面一个文档,每一次得到一个employee id.
在sql语句中,用这个id去搜索资料,如果资料存在, do nothing.
如果没有这笔资料,删除这一份文档.
程序怎么写啊?
never_ever 2002-01-18
  • 打赏
  • 举报
回复
最终完全版 (经过调试的 )

Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim Sview As NotesView
Dim nextdoc As notesDocument

Dim j As Integer
Dim k As Integer
k=0

Set db = session.CurrentDatabase
Set Sview = db.GetView("EmployeeInfo1")

If Not con.ConnectTo("NotesTest","hr","hr") Then
Messagebox "Could not connect to NotesTest",, _
"Error connecting"
Exit Sub
End If

Set doc = Sview.GetFirstDocument

While Not (doc Is Nothing )
Set nextdoc= Sview.getnextdocument(doc)
EmployeeId = doc.EmployeeId(0)

'look up this employee's information in the SQL database

Set qry.Connection = con
Set result.Query = qry
qry.SQL = "SELECT * FROM NotesTestTable where employee_id ='"& EmployeeId & " ' "

result.Execute

testValue= result.GetValue(1)
If (testValue= False) And (doc.form(0) = "Employee Information") Then

'if this employee's information does not exist, then delete the employee's document in Notes.
Call doc.Remove(True)
k=k+1
'if k >= 30, then send a reminding email to system admin

End If
Set doc= nextdoc

Wend
End Sub
虎头是我 2002-01-17
  • 打赏
  • 举报
回复
算法是;
1、先删除全部NOTES文档
2、在从ODBC上读取数据,添加到NOTES中
这样,既可以更新,添加,又可以删除NOTES数据
当然这样做,实际上是以SQL数据为核心,如果数据是以SQL和NOTES中最新数据为主,不能这样做
never_ever 2002-01-17
  • 打赏
  • 举报
回复
不是,没有用decs。
我是通过odbc连的。我想问在我这种情况下怎么处理呀?
虎头是我 2002-01-17
  • 打赏
  • 举报
回复
你可以设置DECS,无须编程,即可保持两个不同数据库的之间的数据同步
具体设置请查看联机帮助
calcaw 2002-01-17
  • 打赏
  • 举报
回复
1、在Notes中创建一个删除按钮
2、当删除Notes文档的时候,通过ODBCConnection、ODBCQuery、ODBCResultSet类连接到SQL server,然后写删除的SQL语句,然后执行……

3、别忘了先连ODBC

never_ever 2002-01-17
  • 打赏
  • 举报
回复
我已经有一个代理了.就是可以create,update, add new information.是用LotusScript写的.
我的思路是这样.
然后另外再建一个agent,专门用来删除sql中已经没有了的记录.
因为只与EmployeeId有关,所以这个代理可不可以用公式写.用@DbColumn, 是不是要好一些?
never_ever 2002-01-17
  • 打赏
  • 举报
回复
是这样的,我们不能直接access 到HR的database。所以是用一个过滤了数据的table。
离职的员工不会在这个table里面出现。

先循环搜索NOTES数据库中的所有文档
获得每个文档的关键字,再用这个关键字去匹配SQL数据库,
如果没有发现记录,则删除NOTES文档,”
具体程序应该怎么写啊?
给点提示,或者说是例子好吗?
虎头是我 2002-01-17
  • 打赏
  • 举报
回复
基本的算法是,先循环搜索NOTES数据库中的所有文档
获得每个文档的关键字,再用这个关键字去匹配SQL数据库,
如果没有发现记录,则删除NOTES文档,
这样做,将要循环N * N次,速度慢,而且烦琐

不知道你的SQL数据库是如何删除的,如果是不要的数据
可以在SQL数据库中,新建一个标示字段,ISDEL,表示此记录被删除
然后在更新NOTES数据库,这样好象更好一点

而且,需求上说,辞职的员工,也不应该删除呀,留着备份,
never_ever 2002-01-17
  • 打赏
  • 举报
回复
自动的,写在lotusScript里面.
shgciom 2002-01-17
  • 打赏
  • 举报
回复
想实现自动删除还是手动删除?
never_ever 2002-01-17
  • 打赏
  • 举报
回复
"可不可以这样:
将你的sql数据库中的主键EmployeeId与存放此主码对应的notes文档的unid对应起来,这样删除的时
候直接通过unid找到该文档然后删除 "

这样的方法可以吗?具体应该怎么做呢.

never_ever 2002-01-17
  • 打赏
  • 举报
回复
我已经有update和add的功能了。
现在就想要delete的。
还有,我想知道思路,也想知道具体的代码怎么写(因为我只有几天的写notes程序的经验,不要笑话我呀)。
查了一下帮助,有一个remove的function。不过没有详细的例子。

536

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧