这个TSQL脚本是用来备份数据库成thotel20110129这样的文件
declare
@disk
nvarchar
(
100
)
set
@disk
=
N
'
E:\cshisdatabackup\thotel
'
+
convert
(
nvarchar
(
12
),
getdate
(),
112
)
print
@disk
BACKUP
DATABASE
[
Thotel
]
TO
DISK
=
@disk
WITH
INIT , NOUNLOAD , NAME
=
N
'
Thotel 备份
'
, NOSKIP , STATS
=
10
, DESCRIPTION
=
N
'
cshis备份
'
, NOFORMAT
不知道什么原因,直接在事务里添加,执行时总是出现问题,也没法调试,只好把下面的几个命令放在操作系统的“计划任务”中
这个bat命令用来备份数据库文件thotel20110129到thotel20110129.7Z(注释:这里调用的是7za.exe——7zip的单文件命令行版,如果需要支持rar的解压,需要到7zip安装目录提取7z.exe和7z.dll,这样就可以支持多种格式的压缩包解压)
另外,获取当前目录使用cd /d %~dp0命令
rem 对了,发现使用notepad++或者scite编辑bat文件时,产生的文件其中回车键和windows的不兼容,导致bat运行失败,好久才发现,也许有什么地方可以设置吧:scite的配置文件:SciTEGlobal.properties中修改eol.mode=CRLF
rem 前尘光明 20110129 保存文件的格式为:文件名+20110129的形式
rem 这是使用7z,将当天的文件打包成7z(注:在这个软件里,7z格式和zip相比的压缩率更高)
rem -t7z是设置格式为7Z,-m用来设置压缩率,-mx=9表示最大压缩率
rem 需要在bat目录放一个7za.exe文件(7z的命令行版本)
rem %date:~0,4%%date:~5,2%%date:~8,2%,这是截取bat中的日期格式20110129的形式
@echo off
set backpath=E:\cshisdatabackup\
set d=%date:~0,4%%date:~5,2%%date:~8,2%
"%~dp07za.exe" a -t7z -mx=9 %backpath%thotel%d%.7z %backpath%thotel%d%
用这个vbs来清理多余的备份文件:
'
用来删除对应目录下的数据库备份文件(带日期格式的如:thotel20110129)
'
前尘光明 20110129
dim
fso,fpath,fp,fils,notremovefiles,fileExArr,fiex
fpath
=
"
E:\主服中软数据备份\
"
fileExArr
=
Array
(
"
thotel
"
)
'
支持的备份名前缀,如需要多个前缀,这里添加
keepbackDays
=
9
'
保存九天
numf
=
Array
(
"
01
"
,
"
02
"
,
"
03
"
,
"
04
"
,
"
05
"
,
"
06
"
,
"
07
"
,
"
08
"
,
"
09
"
)
Function
fNum(num)
If
num
<
10
then
fNum
=
numf(num
-
1
)
else
fNum
=
CStr
(num)
End
If
End Function
'
用来获取时间字符串
Function
DateStr(d)
DateStr
=
CStr
(
Year
(d))
+
fNum(
Month
(d))
+
fNum(
Day
(d))
End Function
'
用来生成最近的文件名列表
Function
FilesList(fileExArray,oneday)
FilesList
=
"
|
"
for
each
fiex in fileExArray
for
i
=
0
to
keepbackDays
FilesList
=
FilesList
+
UCase
(fiex)
+
DateStr(oneday
-
i)
+
"
|
"
next
next
End Function
'
'查看是否含有 备份名前缀,用来避免删除其他文件
Function
IfContainsfileEx(fileExArra,filename1)
for
each
fiexa in fileExArra
if
InStr
(
UCase
(filename1),
UCase
(fiexa))
>
0
then
'
匹配时都使用大写,以免不能识别
IfContainsfileEx
=
true
else
IfContainsfileEx
=
false
end
if
Next
End Function
set
fso
=
CreateObject
(
"
Scripting.FileSystemObject
"
)
if
not
fso.FolderExists(fpath)
then
msgbox
fpath
wscript.exit
end
if
notremovefiles
=
UCase
(FilesList(fileExArr,
date
))
'
msgbox notremovefiles
Set
fp
=
fso.GetFolder(fpath)
set
fils
=
fp.Files
for
each
f in fils
fname
=
fso.GetBaseName(f.Path)
'
如果不在保留的清单中,并且文件名含有 备份名前缀的,删除
if
InStr
(notremovefiles,
UCase
("|"+fname+"|"))
=
0
and
IfContainsfileEx(fileExArr,
fname)
then
'
f.Delete true '这个的注释取消后,可以删除文件,小心哦,不会在回收站中出现哦
msgbox
"
这个文件会被删除:
"
+
vbcrlf
+
f.Name
+
vbcrlf
+
fname,
0
,
"
提示
"
end
if
next
set
fso
=
nothing
set
fpath
=
nothing
set
fp
=
nothing
set
fils
=
nothing
set
notremovefiles
=
nothing
set
fileExArr
=
nothing
set
fiex
=
nothing
注释:中软酒店管理系统的中,菜谱的共享操作非常麻烦,需要一个一个菜的设置,后来好不容易使用sql的事件探查器,结合自己操作特殊的数据,比如查找特定菜名,获取到了那个数据表名和sql语句,写出一个语句:update posmenu set shr_flg=1 where trn_cd='207' or trn_cd='221' ,瞬间就把所有207(茶房),221(咖啡厅)的所有菜谱共享:
原来想用autoit程序来捕获checked控件是否checked,结果发现使用controlCommand方法居然获取不到checked状态(因为有些菜品已经checked了),只有找数据库的方法了。。。
源代码下载
补充说明:如果需要备份的时候带时间,也可以实现,数据库中,有hour minute可以获取到小时和分钟
在批处理中,获取时间的代码如下: for /f "tokens=1,2,3 delims== " %%i in (1.txt) do ( set a=%i-%j-%k)
这样获取到的时间%a%就是这种格式23-25-03.40,如果不需要这么多,那么set a=%i——那么%a%就是23(小时),set a=%i-%j——那么%a%就是23-25(小时-分钟)
vbs部分也需要做一些修改。就不再详细叙述了。