VBScript脚本语言讲义(刘小林)

时间:2022-03-15 21:28:57

先感谢本文的原作者 刘小林老师

TypeName及VarType函数介绍,示例程序如下:

可用 VarType 函数来返回某个数据的 Variant 子类型,如下面的代码:

DimstrInput,strVarType,strTypeName

strInput="helloworld"

MsgBoxstrInput

strVarType=VarType(strInput)

MsgBox"VarType:"&strVarType

strTypeName=TypeName(strInput)                                                                                                                                                                                                                                                                                                

MsgBox"TypeName:"&strTypeName

 

VarType值类型

常数           值   描述

Empty  0  Empty(未初始化)

Null         1  Null(无有效数据)

Integer  2  整数

Long         3  长整数

Single  4  单精度浮点数

Double  5  双精度浮点数

Currency  6  货币

Date         7  日期

String  8  字符串

Object  9  Automation 对象

Error  10  错误

Boolean  11  Boolean

Variant  12  Variant(只和变量数组一起使用)

DataObject  13  数据访问对象

Byte         17  字节

Array  8192  数组

 

问题:如下三段语句,结果分别是什么?

Dim VarTypeCheck

VarTypeCheck =VarType(300)

MsgBoxVarTypeCheck

 

VarTypeCheck =VarType(#10/19/62#) 

MsgBoxVarTypeCheck

 

VarTypeCheck = TypeName("VBScript")

MsgBox VarTypeCheck

 

Option Explicit 声明,如果变量没有定义就使用要报错:

OptionExplicit

DimMyDate

MyDate= " October 19, 1962"

IfIsDate(MyDate) then

MyShortDate = CDate(MyDate)

Endif

MsgBoxMyShortDate

变量的作用域与存活期:

DimstrMain

CallChangeValue

 

SubChangeValue()

DimstrSub

strMain="helloworld!"

MsgBox"strMain InSub:"&strMain

strSub="helloliuxiaolin"

MsgBox"strSub InSub:"&strSub

EndSub

MsgBox"strMain in Main:"&strMain

MsgBox"strSub in Main:"&strSub

数组的定义:

Dim数组名(n)实际上数据会有n+1个元素,下标从0到n

DimMyArray(10),i

Fori=0 To 10

    MyArray(i)=i

    MsgBox MyArray(i)

Next

MsgBox"min is "&LBound(MyArray)  '返回数组的最小可用下标

MsgBox"max is "&UBound(MyArray)  '返回数组的最大可用下标

利用Redim重新定义数据的大小,加上preserve关键字保存原来数组的内容:

DimMyFamily()

ReDimMyFamily(1)

MyFamily(0)="0"

MyFamily(1)="1"

ReDimMyFamily(2)

'ReDimPreserve MyFamily(2)

MyFamily(2)="2"

Dimi

Fori=0 To 2

  MsgBox MyFamily(i)

Next

在字符串中回车换行的方法:chr(13)&chr(10) / vbCr&vbLf/ vbCrLf / vbNewLine

Dimstr,str1,str2,str3,str4

str="howare you fine,thank you!"

str1="howare you"&chr(13)&chr(10)&"fine,thank you!"

str2="howare you"&vbCr&vbLf&"fine,thank you!"

str3="howare you"&vbCrLf&"fine,thank you!"

str4="howare you"&vbNewLine&"fine,thank you!"

MsgBoxstr

MsgBox"str1:"&str1

MsgBox"str2:"&str2

MsgBox"str3:"&str3

MsgBox"str4:"&str4

 

Chr用法:

Dimstr

str=chr(34)& "Hello" & chr(34)

MsgBoxstr

 

代码

字符

代码

字符

代码

字符

代码

字符

0

 

32

[空格]

64

@

96

`

1

 

33

!

65

A

97

a

2

 

34

"

66

B

98

b

3

 

35

#

67

C

99

c

4

 

36

$

68

D

100

d

5

 

37

%

69

E

101

e

6

 

38

&

70

F

102

f

7

 

39

'

71

G

103

g

8

**

40

(

72

H

104

h

9

**

41

)

73

I

105

i

10

**

42

*

74

J

106

j

11

 

43

+

75

K

107

k

12

 

44

,

76

L

108

l

13

**

45

-

77

M

109

m

14

 

46

.

78

N

110

n

15

47

/

79

O

111

o

16

48

0

80

P

112

p

17

49

1

81

Q

113

q

18

50

2

82

R

114

r

19

51

3

83

S

115

s

20

52

4

84

T

116

t

21

53

5

85

U

117

u

22

54

6

86

V

118

v

23

55

7

87

W

119

w

24

56

8

88

X

120

x

25

57

9

89

Y

121

y

26

58

:

90

Z

122

z

27

59

;

91

[

123

{

28

60

92

\

124

|

29

61

=

93

]

125

}

30

-

62

94

^

126

~

31

 

63

?

95

_

127

Const常量

Const a=1

a=2

IF…THEN…ELSEIF…ELSE…ENDIF语句:

DimHouse,Car

House=Null

Car=null

IfIsNull(House) Or IsNull(Car) Then

   MsgBox "现在我们还不成熟,还是再等等吧!"

Else

   MsgBox "OK,我嫁给你!"

EndIf

课堂练习:找出3个整数中的最大数并输出,三个整数存在三个变量intA,intB,intC中

 

 

 

 

 

 

 

DimintA,intB,intC,max

intA=8

intB=5

intC=3

IfintA>=ntB Then

     max=intA

else

max= intB

EndIf

Ifmax>=intC Then

   MsgBox max

Else

   MsgBox intC

EndIf

 

 

 

Dim intA,intB,intC,temp

intA=CInt(InputBox("请输入整数A:"))

intB=CInt(InputBox("请输入整数B:"))

intC=CInt(InputBox("请输入整数C:"))

If intA>=intB Then

  temp =intA

else

temp =intB

End If

If temp >=intC Then

  MsgBox temp

Else

  MsgBox intC

End If

Select…case…caseelse…End Select语句:

Dimstr

str=InputBox("请输入你要说的话!")

SelectCase str

         Case "hello"

                   MsgBox "hello"

         Case "how are you"

                   MsgBox "fine,thank you"

         Case Else

                   MsgBox "thanks"

EndSelect

 

         Case后接的表达式可以是任意字符,如:case 1,也可以是多个表达式,如:case 5,6,7,但是vbs中不支持给出case后的范围的格式

 

课堂练习:输入一个字符,判断字符类型:大写、小写、数字、其他。给出相应的提示信息。

 

 

 

 

 

 

 

 

 

Option Explicit

Dim strValue

 

strValue = InputBox ("请输入一个字符:")

strValue = CInt(Asc(strValue))

MsgBox strValue

 

If strValue>=65 And strValue<=90 Then

         strValue=1

ElseIf strValue>=97 And strValue<=122Then

         strValue=2

ElseIf strValue>=48 And strValue<=57Then

         strValue=3

End if

        

Select Case strValue

         Case1

                   MsgBox"您输入的是大写字母!"

         Case2

                   MsgBox"您输入的是小写字母!"

         Case3

                   MsgBox"您输入的是数字!"

         CaseElse

                   MsgBox"您输入的是特殊字符"

End Select

Do…Loop循环语句的使用:

推荐使用while循环

'即使不符合条件也会做一次

DimintAge

intAge=0

Do

intAge=intAge+1

MsgBoxCStr(intAge)

LoopWhile intAge<=5

 

'不符合条件时,则一次也不做

intAge=0

DoWhile intAge<=5

intAge=intAge+1

MsgBoxCStr(intAge)

Loop

 

'达到条件时就不再进入循环了。而while语句在达到条件时也要再进入循环一次

DimintAge

intAge=0

DoUntil intAge=5

    intAge=intAge+1

    MsgBox intAge

Loop

 

intAge=0

Do

    intAge=intAge+1

    MsgBox intAge

LoopUntil intAge=5

 

'Do循环支持Exit Do语句

DimintAge

intAge=0

DoUntil intAge=5

    intAge=intAge+1

    MsgBox intAge

         If intAge=3 Then

           Exit Do

         End If

Loop

While…Wend循环语句的使用:

不建议使用,因为没有退出循环的语句

DimintAge

intAge=0

WhileintAge<5

    intAge=intAge+1

    MsgBox intAge

Wend

For…Next循环语句的使用:

Dimi

Fori=1 To 5

    MsgBox i

Next

 

Fori=1 To 5 Step 2

    MsgBox i

Next

 

Fori=5 To 1 Step -1

    MsgBox i

Next

 

练习:接收用户输入的5个数字,然后倒序输出出来

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dim intMyArray(4),i

For i=0 To 4

         intMyArray(i)=InputBox("请输入第"&CStr(i)&"个数字")

Next

For i=4 To 0 Step -1

   MsgBox "您输入的第"&CStr(i)&"个数字是:"&CStr(intMyArray(i))

Next

For each…Next循环语句的使用:

如果生命还有三天,你准备怎么安排呢?

DimcountDownDay

countDownDay=Array("看日出","骑自行车","聊天")

ForEach element In countDownDay

         MsgBox element

Next

With…End With语句的使用:

SystemUtil.Run"E:\WINDOWS\system32\calc.exe"

WithWindow("计算器")

         .WinButton("1").Click

         .WinButton("+").Click

         .WinButton("2").Click

         .WinButton("=").Click

         .Close

Endwith

Sub与Function的用法:

DimstrCall

strCall=InputBox("请输入你想说的话:")

'ShoutstrCall

CallShout(strCall)

SubShout(ByVal strEcho)

         MsgBox strEcho&"!"

EndSub

 

Dimstr

str=InputBox("请输入你想说的话:")

MsgBoxAnswer(str)

 

FunctionAnswer(ByVal strAsk)

Select Case strAsk

Case"我爱你"

Answer="我也爱你"

Case"我恨你"

Answer="冤冤相报何时了"

CaseElse

Answer="下次再聊"

End Select

EndFunction

函数的返回值:

格式为:函数名=返回值

Function add(x,y)

       add=x+y

       MsgBoxadd

End Function

a=add (1,2)

MsgBox a

       注意与c和tcl中return的区别

参数的值传递ByVal与地址传递ByRef :

ByVal 与 ByRef(默认值)
这两个是子过程的参数传递时,指定参数按什么传递的
ByVal(按值传递)
ByRef(按地址传递)
具体这样来理解:
过程中的参数列表,我们称形参
调用过程时的参数列表,我们称实参
 
在调用时,我们要将实参的值传递给形参,这样过程才能拿这些数据参与计算并实现一些功能
那么在传递的过程中,就存在这两种传递方式
传值时(ByVal),是先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的
传址时(ByRef),是直接将实参的地址传递给形参,这样,形参与实参就共用一个地址,所以,形参内容的改变,也直接改变了实参的内容
 
通过上面的分析,你只要记得:
按值传递时(ByVal),形参的改变不会影响到实参
按址传递时(ByRef),形参的改变,会影响到实参

 

Dim str

str="hello world!"

Call strEcho(str)

MsgBox str

Sub strEcho(ByVal str)

   str=str&"!!!!!"

End Sub

 

Dim str

str="hello world!"

Call strEcho(str)

MsgBox str

Sub strEcho(ByRef str)

   str=str&"!!!!!"

End Sub

 

 

Dim msg

msg = "喂,你好吗?"

MsgBox msg

Answer msg

MsgBox msg

 

'Sub Answer(ByVal sentense)

'       sentense= "我很好!你呢?"

'End Sub

 

Sub Answer(ByRef sentense)

       sentense = "我很好!你呢?"

End Sub

过程的调用

在调用过程时,不必使用 Call 关键字。使用Call 语法调用内部函数或使用用户自定义函数,函数返回值都会被放弃。

变量命名规则:

1、匈牙利命名法:

    变量的前面加类型前缀,约定俗成字母写1个或者3个。

例如:iCount  strUserName blnCall

2、骆驼命名法:

变量以词组来组成,并且单词的首字母大写,其余小写。

例如:strLoginName  strPassword

3、帕斯卡命名法:

类似骆驼命名法,区别在于首单词的首字母必须大写,而骆驼命名法则小写。

例如:StrLoginName  StrPassword

综上,希望大家写程序命名好。例如:iRowsCount  iColumnsCount  psz_filename

VBScript编码规范:                                                        

参考其他开发语言编码规范:结构性规范,SQL语句规范…(参见自动化测试编码规范)

VBScript的常用函数:

Len 函数:返回字符串中的字符数也就是字符串长度,或者是存储变量所需的字节数

Left 函数:返回指定数目的从字符串的左边算起的字符

Mid 函数:从字符串中返回指定数目的字符,字符串的第一个起始位置是1

Right 函数:从字符串右边返回指定数目的字符

InStr 函数:返回某字符串在另一字符串中第一次出现的位置

LTrim、RTrim 和 Trim 函数:返回不带前导空格 (LTrim)、后续空格 (RTrim) 或前导与后续空格 (Trim) 的字符串副本

LCase 函数:返回字符串的小写形式

UCase 函数:返回字符串的大写形式

Replace 函数:返回字符串,其中指定数目的某子字符串被替换为另一个子字符串

Split 函数:返回基于 0 的一维数组,其中包含指定数目的子字符串

Chr 函数:返回与指定的ASCII 字符代码相对应的字符

Cstr函数:VB中的函数,取出字符串(用Cstr)

CInt或CLng函数:VB中的函数,返回字符串内的数字(用CInt或CLng)

CBool 函数:返回表达式,此表达式已转换为Boolean 子类型的 Variant

CByte 函数:返回表达式,此表达式已被转换为Byte 子类型的 Variant

CDate 函数:返回表达式,此表达式已被转换为Date 子类型的 Variant

CDbl 函数:返回表达式,此表达式已被转换为Double 子类型的 Variant

CInt 函数:返回表达式,此表达式已被转换为Integer 子类型的 Variant

CLng 函数:返回表达式,此表达式已被转换为Long 子类型的 Variant

CSng 函数:返回表达式,该表达式已被转换为Single 子类型的 Variant

CStr 函数:返回表达式,该表达式已被转换为String 子类型的 Variant

IsArray 函数:返回 Boolean 值指明某变量是否为数组

IsDate 函数:返回 Boolean 值指明某表达式是否可以转换为日期

IsEmpty 函数:返回 Boolean 值指明变量是否已初始化

IsNumeric函数:返回 Boolean 值指明表达式的值是否为数字

IsNull 函数:返回 Boolean 值,指明表达式是否不包含任何有效数据 (Null)

IsObject 函数:返回 Boolean 值指明表达式是否引用了有效的 Automation 对象

VarType 函数:返回指示变量子类型的值

TypeName 函数:返回一个字符串,提供有关变量的Variant 子类型信息

Rnd 函数和 Randomize 语句:

先利用Randomize初始化随机数生成器,Randomize作用是使产生的随机数不重复,然后再调用Rnd函数返回随机数:

要产生指定范围的随机整数,请使用以下公式:

Int((upperbound - lowerbound + 1) * Rnd +lowerbound)

这里, upperbound是此范围的上界,而lowerbound 是此范围内的下界。

显示出1-6整数中的随机数:

MsgBox Int(6*Rnd+1)

 

练习:用户输入5个词语,并用逗号隔开,读入这5个词语后进行随机显示5次。

 

 

 

 

 

 

 

 

 

 

 

DimstrInput,strArray

strInput=InputBox("pleaseinput 5 words!")

strArray=Split(strInput,",")

'Randomize         ‘注意这里有这句话和没有这句话的区别

Dimi,j

Fori=0 To 4

         j=Int(5*Rnd)

         MsgBox strArray(j)

Next

Err对象:

Err 对象是一个具有全局范围的内部对象:不必在您的代码中创建它的实例。Err的属性被一个错误的生成器设置:Visual Basic,自动对象,或 VBScript 程序。

Err 对象的默认属性是 number。Err.Number 含有一个整数,且可由 Automation 对象使用以返回 SCODE。

当发生运行时错误时,Err 的属性由标识错误的唯一信息以及可用于处理它的信息填充。要在代码中生成运行时错误,请用 Raise 方法。

Err 对象属性被重新设置为零或零长度字符串 ("")。Clear 方法可被用于显式地重新设置 Err。

下面的示例说明了 Err 对象的用法:

 On Error Resume Next

Err.Raise 6 '产生溢出错误。

 MsgBox  "Error# " & CStr(Err.Number) & " " & Err.Description

 Err.Clear '清除错误。

 

在错误处理后,使用 Clear 显式地清除 Err 对象。此操作是必须的,例如使用 On Error Resume Next 延迟错误处理时。在任何时候执行下列语句,VBScript 自动调用 Clear 方法:

 

练习:写一个计算余数函数,该函数在计算出现错误时,输出错误号和错误描述,计算正确时,输出计算结果

 

 

 

 

 

 

 

 

 

 

 

On ErrorResume Next

 

Dim a,b,c

 

a=CInt(InputBox("请输入被除数:"))

b=CInt(InputBox("请输入除数:"))

c=a Mod b

 

If Errthen

       MsgBox "Error # " &CStr(Err.Number) & " " & Err.Description

       Err.Clear '清除错误。

Else

       MsgBox c

End if

On Error 语句

On Error Resume Next 会使程序按照产生错误的语句之后的语句继续执行,或是按照最近一次所调用的过程(该过程含有On Error Resume Next 语句)中的语句继续运行。这个语句可以不顾运行时错误,继续执行程序,之后您可以在过程内部建立错误处理例程。在调用另一个过程时,On Error Resume Next语句变为非活动的。所以,如果希望在例程中进行内部错误处理,则应在每一个调用的例程中执行On Error Resume Next 语句。如果您已启用 On Error Resume Next 错误处理程序,则可使用 On Error GoTo 0禁用错误处理程序。

 

 

练习:用VBS实现冒泡排序,输入10个数,按从小到大的顺序排好。

 

练习:用VBS实现用户名和密码的输入验证,先输入用户名再输入密码:用户名必须是4~10位的字符,否则提示用户名为空、少于4位或多于10位。密码必须是Mercury(不区分大小写),如果输入为空则提示用户输入密码,如果连续三次未输入正确密码则提示用户重新登录,然后退出。

 

写一个函数,实现将大写字符转换成小写字符,将小写字符转换成大写字符

 

 

 

 

 

 

 

 

 

 

 

DimintArray(9),i,j,t

Fori=0 To 9

         intArray(i)= CInt(InputBox("请输入第"&CStr(i+1)&"个数:"))

Next

 

Fori=0 To 8

         For j=0 To 8-i

                   If intArray(j)> intArray(j+1)Then

                            t=intArray(j)

                            intArray(j)=intArray(j+1)

                            intArray(j+1)=t

                   End If

         Next

Next

DimstrResult

Fori=0 To 9

         strResult=strResult&""&intArray(i)

Next

MsgBoxstrResult

 

 

 

DimiCount,strUser,strPwd,iLen

iCount=0

Do

iCount=iCount+1

strUser=InputBox("请输入用户名","用户名")

iLen=Len(strUser)

Select Case iLen

Case0

              MsgBox "输入的用户名为空",48

Case1,2,3

              MsgBox "输入的用户名不足3位",48

Case4,5,6,7,8,9,10

              Exit Do

CaseElse

              MsgBox "用户名超过10位",48

End Select

Loop

 

iCount=0

Do

If iCount=3 Then

     Msgbox "连续输入3次密码错误,请重新登录",48

     Exit Do

End If

iCount=iCount+1

strPwd=InputBox("请输入密码","密码")

strPwd=UCase(Trim(strPwd))

IfstrPwd="MERCURY" Then

     MsgBox "恭喜您,密码正确",64

     Exit Do

Else

     MsgBox "密码错误,请重新输入",48

End If

Loop

CreateObject函数:创建并返回对 Automation 对象的引用

Automation对象就是与其他应用程序交互的中介

Set myObj =CreateObject("WScript.Shell")

Set myObj =CreateObject("Excel.Application")

Set myObj =CreateObject("Scripting.FileSystemObject")

Set myObj =CreateObject("Scripting.Dictionary")

Set myObj =CreateObject("ADODB.Connection")

Set myObj =CreateObject("ADODB.Recordset")

Set myObj = CreateObject("ADODB.Command")

Set myObj =CreateObject("Microsoft.XMLDOM")

文本文件读写:

AtEndOfLine和AtEndOfStream的区别:前者遇到空行就返回true,后者到达文件的末尾才返回true。

OptionExplicit

ConstForReading=1,ForWriting=2,ForAppending=8

Dimfso,fil,msg

'创建一个文件系统对象(FileSystem Object)

Setfso = CreateObject("Scripting.FileSystemObject")

'创建一个文件对象,通过fso对象来打开指定的文件

Setfil = fso.OpenTextFile("C:\f.txt",ForReading)

'读取文件内容

'MsgBox fil.ReadAll  ' 一次性全部读取

'判断是否到了文件的最后面

DoWhile Not fil.AtEndOfStream  ‘注意和AtEndOfLine的区别

         ' 只要没到最后,就读取一行,同时把游标向下移动一行

         msg = msg & vbNewLine &fil.ReadLine

Loop

MsgBoxmsg

'关闭这个文件

fil.Close

'释放这个文件对象

Setfil = Nothing

'释放这个文件系统对象

Setfso = Nothing

课堂练习:写一个函数,实现向log.txt文件中插入记录的功能

 

 

 

 

 

 

Option Explicit

ConstForReading=1,ForWriting=2,ForAppending=8

Dim fso,fil,msg

' 创建一个文件系统对象(File System Object)

Set fso =CreateObject("Scripting.FileSystemObject")

' 创建一个文件对象,通过fso对象来打开指定的文件

Set fil =fso.OpenTextFile("C:\log.txt",ForAppending)

fil.WriteLine "hello"

fil.Close

' 释放这个文件对象

Set fil = Nothing

' 释放这个文件系统对象

Set fso = Nothing

 

课堂练习:将上面计算余数的函数结果和错误记录方式改为调用记录结果的函数

 

 

 

 

 

 

 

 

 

Option Explicit

On Error Resume Next

 

Dim a,b,c

 

a=InputBox ("请输入被除数:")

b=InputBox("请输入除数:")

c=a Mod b

 

If Err then

       WriteLog"Error # " & CStr(Err.Number) & " " &Err.Description

       Err.Clear'清除错误。

Else

       WriteLoga&"与"&"b的余数为:"&c

End If

 

Function WriteLog(Content)

       ConstForReading=1,ForWriting=2,ForAppending=8

       Dimfso,fil,msg

       '创建一个文件系统对象(FileSystem Object)

       Setfso = CreateObject("Scripting.FileSystemObject")

       '创建一个文件对象,通过fso对象来打开指定的文件

       Setfil = fso.OpenTextFile("C:\log.txt",ForAppending)

       fil.WriteLineNow & " " & Content

       fil.Close

       '释放这个文件对象

       Setfil = Nothing

       '释放这个文件系统对象

       Setfso = Nothing

End function

Excel文件读写:

Excel对象模型:

Application对象

WorkBook对象

WorkSheet对象

UsedRange对象:Rows属性,Columns属性

Cells对象:Rows属性,Columns属性

练习:打开calc.xls文件,读取内容

 

 

 

 

OptionExplicit

DimexcelApp,excelWorkBook,excelWorkSheet

DimiRowsCount,iColumnsCount,iLoop,jLoop,msg

' 创建Excel应用程序对象

SetexcelApp = CreateObject("Excel.Application")

' 默认的Excel应用程序是隐藏的,这里强行显示给用户看

excelApp.Visible= True

 

' 创建工作簿对象,并打开它

SetexcelWorkBook = excelApp.Workbooks.Open("E:\WORK\课程PPT\01 QTP\发给学员\calc.xls")

' 创建工作表对象,并指定工作表

SetexcelWorkSheet = excelWorkBook.Worksheets("calcsheet")

'获取已用区域的行数

iRowsCount =excelWorkSheet.UsedRange.Rows.Count

' 获取已用区域的列数

iColumnsCount =excelWorkSheet.UsedRange.Columns.Count

' 循环读取该区域内的数据

For iLoop=1 To iRowsCount

         ForjLoop=1 To iColumnsCount

                   msg= msg & vbTab & excelWorkSheet.Cells(iLoop,jLoop)

         Next

         msg= msg & vbNewLine

Next

MsgBox msg

' 保存Excel工作簿

excelWorkBook.Save

' 关闭Excel工作簿

excelWorkBook.Close

' 退出Excel应用程序

excelApp.Quit

' 释放Excel所有对象

Set excelWorkSheet = Nothing

Set excelWorkBook = Nothing

Set excelApp = Nothing

 

XML文件读写:

ReadXML

Sub ReadXML()

       Dim xmlDoc, xmlRoot, rootChildItem, msg

       Set xmlDoc = CreateObject("Microsoft.XMLDOM")

       xmlDoc.Load " E:\WORK\课程PPT\01 QTP\发给学员\calc.xml"

       If xmlDoc.parseError.errorCode <> 0 Then

           MsgBox "XMLloaded failed. The reason is :" & xmlDoc.parseError.reason

           Exit Sub

       End If

       Set xmlRoot = xmlDoc.documentElement

       If Not xmlRoot.hasChildNodes Then

Exit Sub

       End If

       For Each rootChildItem In xmlRoot.childNodes

           If rootChildItem.nodeName= "TestResult" Then

               msg = msg &rootChildItem.firstchild.nodeValue & vbNewLine

           End If

       Next

       MsgBox msg

End Sub

 

数据库读写:

新建一个文本文件(获取数据库连接参数),然后把后缀改成udl(use data link),双击启动该文件。

 

首先选择要连接的数据库类型:

Access数据库:

Oracle数据库:

SQL Server数据库:

选择要连接的数据库,并进行“测试连接”

操作成功后,再将该文件的后缀改会成txt,然后打开,可以看到文件内记录了连接数据库的参数。

 

按照以下示例,能够读取表中的任意数据:

Dim Cnn,Rst,strCnn,Msg, Sqlstr

strCnn=" Provider=MSDASQL.1;PersistSecurity Info=False;Data Source=calc"

SetCnn=CreateObject("ADODB.Connection")

Cnn.OpenstrCnn

SetRst=CreateObject("ADODB.RecordSet")

Sqlstr="select* from calc order by TestNumber1 asc"

Rst.OpenSqlstr,Cnn

Rst.MoveFirst

DoWhile Not Rst.EOF

  Msg=Msg&vbTab&Rst.Fields("TestNumber1")&vbTab&Rst.Fields("TestNumber2")&vbTab&Rst.Fields("TestResult")&vbNewLine

       Rst.MoveNext

Loop

Rst.Close

Cnn.Close

SetRst=Nothing

SetCnn=Nothing

MsgBoxMsg

 

 

Dim Cnn,strCnn,Cmd,Msg,Sqlstr

strCnn=" Provider=MSDASQL.1;Persist SecurityInfo=False;Data Source=calc "

Set Cnn=CreateObject("ADODB.Connection")

Cnn.Open strCnn

'Set Rst=CreateObject("ADODB.RecordSet")

Set Cmd=CreateObject("ADODB.Command")

Cmd.ActiveConnection = Cnn

Sqlstr="update calc set TestNumber1= 78901where TestNumber1= 78900"                                                                                                                                                           

Cmd.CommandText = Sqlstr

Cmd.Execute

Cnn.Close

Set Cmd=Nothing

Set Cnn=Nothing

练习:写一个函数,实现往ACCESS数据库calc表中插入记录的功能 (参数为TestNumber1,TestNumber2,TestResult内容)

 

 

 

 

 

 

 

InsertLog 1,2,3

 

Sub InsertLog(TestNumber1,TestNumber2, TestResult)

 

       DimCnn,strCnn,Cmd,Sqlstr

strCnn=" Provider=MSDASQL.1;Persist SecurityInfo=False;Data Source=calc "

       SetCnn=CreateObject("ADODB.Connection")

       Cnn.OpenstrCnn

       'SetRst=CreateObject("ADODB.RecordSet")

       SetCmd=CreateObject("ADODB.Command")

       Cmd.ActiveConnection= Cnn

       Sqlstr="INSERT INTO calc ( TestNumber1, Testnumber2, TestResult ) VALUES (“&TestNumber1 &”, “& TestNumber2 &”, '”& TestResult &”')"

       Cmd.CommandText= Sqlstr

       Cmd.Execute

       Cnn.Close

       SetRst=Nothing

       SetCnn=Nothing

 

End Sub

 

 

WSH:

Option Explicit

 

Dim oShell

Set oShell = CreateObject("WSCript.shell") 创建一个WSH对象

oShell.run "cmd /K CD C:\ & javaCounter" /K表示将这些命令一起执行

Set oShell = Nothing

 

比如直接在命令行模式下输入以下内容:

cmd /k cd \ & dir

 

 

Option Explicit

 

Dim oShell

Set oShell = CreateObject("WSCript.shell") '创建一个WSH对象

oShell.run "calc.exe"

Set oShell = Nothing