access2007VBA代码求教

access2007VBA代码求教,第1张

解析如下:

Public Function KillMe() As Boolean

Dim mPath As String

On Error GoTo InIDE

如果发生错误,则跳转到inIDE。但由于inIDE后紧跟End Function,也就是说发生错误结束函 数。

mPath = CurrentProject.Name

将您正在 *** 作的对象(即您的access数据库)的名称赋予变量mPath。实际上这句有些多余,因为下面几句随即将路径赋予了mPath。

If Right$(CurrentProject.Path, 1) = "\" Then

mPath = CurrentProject.Path

Else

mPath = CurrentProject.Path &"\"

End If

上面的假如语块,保证路径后面有反斜杠(即\)。

Open mPath &"Demon.bat" For Output As #1

以顺序输出(Output表示顺序输出,如果再有文件写入,将写在该文件内容之后)的方法将……\Demon.bat 文件输出到文件号为1的缓存区;如果不存在这个文件,则在这个路径下新建一个Demon.bat 文件,并且也输出到文件号为1的缓存区,当然此时文件内容为空。我感觉电脑里本身不存在……\Demon.bat这个批处理文件(后缀bat市批处理文件,它是一个可执行的文件),否则它直接给出绝对路径而不会用mPath变量了。

Print #1, ":Repeat" &vbCrLf &_

"del """ &mPath &CurrentProject.Name &"" &vbCrLf &"" _

"if exist """ &mPath &CurrentProject.Name &""" goto Repeat " &vbCrLf &_

"del %0"

Print #1, 内容,就是将后面的内容写入文件号1的缓存区,实际上就是将内容写入Demon.bat这个文件。具体内容是:(vbCrLf表示回车换行)

【 :Repeat

del (路径)\您的access数据库

if exist"(路径)\您的access数据库" goto Repeat

del %0】

具体的批处理代码意思好久没用了有些模糊了,上面【】内基本意思是:删除你的access数据库,如果数据库一直存在没被删除,则返回:Repeat语句,继续删除,直至删除。

Close #1

关闭文件号1的缓存区,实际上就是保存了Demon.bat内容。

Shell mPath &"Demon.bat", vbHide

Shell表示 以异步方式(我们平时代码是一步一步执行的,这行代码没执行完是不会执行下一行代码的,但异步方式,你执行……\Demon.bat的代码,其后的代码继续执行,结合你前面的代码内容,就是一方面执行Demon.bat代码,同时继续执行Application.Quit acQuitSaveNone这句代码)执行……\Demon.bat文件,并且以隐藏状态方式执行(你看不到Demon.bat文件的DOS窗口)。现在我们就会明白为什么【】里要用到if exist……这句了?由于两段代码同时运行,你的access数据库有可能更迟运行完(就是还没卸载完),一个打开的程序(没卸载完就还处于打开状态)是不能被删除的,通过goto Repeat反复等待,一旦卸载完即删除。

InIDE:

End Function

纵观整个代码,总体的意思是:当你关闭你的access数据库时,整个数据库莫名其妙悄无声息的被删除了。你看看函数的名称Killme(即"删除本身"),Kill me杀死自己,体现了编程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、灵异,如果用户不知情,程序莫名其妙没了,还以为发生了灵异事件了。

它的意义是:

1、消极意义:把这些代码植入别人的程序,那就坑爹了。

2、积极意义:(1)如果某些文字、图片等等你只想让别人看一次,你可以植入这些代码,这样别人在access程序里看一次后,就不可能再看第二次了,电影里常常有这些画面。(2)可以在这个代码内加上触发内容,比如在你的例子中加入假如:

Private Sub Form_Unload(Cancel As Integer)

if date()=#2013-10-01# then

KillMe

end if

Application.Quit acQuitSaveNone

End Sub

这样,当系统日期到达2103年10月1日是就会发生自行删除事件了,假如你有一个花了大心思做的access软件,让别人试用,到10月1日前要他付费,如果不付费你不用对他的数据库 *** 作,它就会自行删除了,保证了版权。

有点忘了,两层游标嵌套应该能实现

班 数学成绩

A 90 10 90 90 90 90....

B 81 82 80 83 82 88....

C 91 91 91 92 93 91...

如下:

create procedure test

as

begin

declare @credit int,@str varchar(4000),@cla varchar(10),@ma varchar(5)

declare cr1 cursor for select distinct class from 学生表

print "班数学成绩"

select @cla=''

open cr1

fetch cr1 into @cla

while @@fetch_status=0

begin

select @str=@cla+' '

select @ma=''

declare cr2 cursor for select math from 学生表 where class=@cla

open cr2

fetch cr2 into @ma

while @@fetch_status=0

begin

select @str=@str+' '+@ma

select @ma=''

fetch cr2 into @ma

end

close cr2

DEALLOCATE cr2

print @str

select @cla=''

fetch cr1 into @cla

end

close cr1

DEALLOCATE cr1

end

go

exec test


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9529255.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存