我用vb script写了一个函数

samuelpan 2004-04-17 09:23:07
我用vb script写了一个函数,存为vbs文件。

请问我如何在Sql语句中将一些参数传送给这个vbs文件,并且执行这个vbs文件。

然后在Sql语句中能得到vbs是否执行成功的信息。
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2004-04-17
  • 打赏
  • 举报
回复
建议,将你上面这段用VB做一个DLL封装起来,然后在SQL中调用你这个DLL来发邮件,而不是用Notes.NotesSession对象.

这样好调试一点,SQL中调用外部DLL,还是不太方便,所以能简就简
samuelpan 2004-04-17
  • 打赏
  • 举报
回复
提供完整代码,一直在研究如果用sql语句完成这些功能

'发送mail到notes mail

Call SendNotesMail( "this is a test subject" , "C:\xxx.vbs" , "samuelpan","my message" , True)

Sub SendNotesMail(Subject , Attachment , Recipient , BodyText , SaveIt )
'Set up the objects required for Automation into lotus notes

Dim Maildb 'The mail database
Dim UserName 'The current users notes name
Dim MailDbName 'THe current users notes mail database name
Dim MailDoc 'The mail document itself
Dim AttachME 'The attachment richtextfile object
Dim Session 'The notes session
Dim EmbedObj 'The embedded object (Attachment)


Set Session = CreateObject("Notes.NotesSession")

UserName = Session.UserName
MailDbName = Left(UserName, 1) & Right(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"

'打开mail数据库
Set Maildb = Session.GETDATABASE("", MailDbName)

If Maildb.ISOPEN = True Then
'已经打开,不进行操作
Else
Maildb.OPENMAIL
End If

'设置mail信息
Set MailDoc = Maildb.CREATEDOCUMENT
MailDoc.Form = "Memo"
MailDoc.sendto = Recipient
MailDoc.Subject = Subject
MailDoc.Body = BodyText
MailDoc.SAVEMESSAGEONSEND = SaveIt

If Attachment <> "" Then
Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment, "Attachment")

End If

MailDoc.SEND 0, Recipient

'清除
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj = Nothing
End Sub
zjcxc 2004-04-17
  • 打赏
  • 举报
回复
--大致上你的那个应该是这样的调用方法

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@str varchar(1000),@re int

exec @err=sp_oacreate 'Notes.NotesSession',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'GETDATABASE',null,'','MailDbName' --不知道你这个MailDbName是什么?
if @err<>0 goto lberr

exec @err=sp_oagetproperty @obj,'ISOPEN',@re out
if @err<>0 goto lberr

if @re=1
begin
.....
end
else
begin
exec @err=sp_oamethod @obj,'OPENMAIL',null
if @err<>0 goto lberr
end

exec @err=sp_oadestroy @obj
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述

zjcxc 2004-04-17
  • 打赏
  • 举报
回复
--你好个对象我不熟,给一个调用ADO.recordset的给你参考:

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@str varchar(1000)
set @str='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XZKH_NEW;Data Source=zj'

exec @err=sp_oacreate 'adodb.recordset',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,'地区资料',@str
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'getrows'
if @err<>0 goto lberr

exec @err=sp_oadestroy @obj
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
samuelpan 2004-04-17
  • 打赏
  • 举报
回复
sql调用dll文件时,我处理过一些,但下面的情况我处理不了:


Set Session = CreateObject("Notes.NotesSession")
--此Session的属性和方法我会调用

--下面这些语句写成Sql不会写,试着写过好像行不通
Set Maildb = Session.GETDATABASE("", MailDbName)
If Maildb.ISOPEN = True Then

Else
Maildb.OPENMAIL
End If
zjcxc 2004-04-17
  • 打赏
  • 举报
回复
--另一种方式,你用VB来写DLL,(VBS好像写不出DLL),然后在SQL中调用:

--SQL Server的存储过程调用Com组件


/*--下面的部分在VB中完成

首先我们先用VB 作一个最简单的组件

工程名称: testSQLCOM
类名: TestMath

'函数,计算两个整数相加的结果
Public Function AddMe(a As Long, b As Long) As Long
AddMe = a + b
End Function

编译生成后,我们就可以在 Sql Server 中对这个 Com 组件进行调用了
--*/

/*--下面是SQL中对上面DLL的调用--*/

--定义用到的变量
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@re int

--创建调用实例
exec @err=sp_OACreate 'testSQLCOM.TestMath', @obj out
if @err<>0 goto lberr --如果创建失败,则进行错误处理

--调用DLL中的函数
exec @err=sp_OAMethod @obj,'AddMe',@re out,100,200
if @err<>0 goto lberr --如果调用错误,则进行错误处理

print '返回的结果是:' + str(@re)

--完成后释放
exec sp_OADestroy @obj

return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
zjcxc 2004-04-17
  • 打赏
  • 举报
回复
SQL中无调用VBS的功能,你只能在VBS中调用SQL
了缘 2004-04-17
  • 打赏
  • 举报
回复
up

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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