VBScript

来自站长百科
(重定向自VBscript
跳转至: 导航、​ 搜索

VBScript是一种脚本语言,可以用于微软 IE 浏览器客户端脚本和微软 IIS (Internet Information Service) 的服务器端脚本。

VBScript 是微软编程语言 Visual Basic 家族中的一个成员。如果你熟悉微软的 Visual Basic 或者 Visual Basic for Applications,你会很快就熟悉 VBScript。

VBScript与Basic语言有密切关系。如果你熟悉BASIC,你将会发现VBScript很容易学习和使用。VBScript是Microsoft Visual Basic的简化版本。

VBScript是一种脚本语言。这意味着这种语言比BASIC语言的成熟版本容易使用又难于使用。编制简单的程序时,脚本语言是容易使用的。脚本语言的句法比较简单。但是,简单的句法也使开发大的应用程序变得很困难。

你可以在HTML文件中直接嵌入VBScript脚本。这使你能够扩展HTML,使它不仅仅是一种页面格式语言。带有VBScript脚本的网页在每次下载到浏览器时都可以是不同的,而且可以对用户的操作作出反应。

VBScript 是Active Sever Pages的缺省语言。你也可以在ASP网页中使用其它脚本语言,如Jscript(将在第九章中讨论),Perl,或者REXX(由IBM UK实验室的Michael Cowlishaw所创的一种语言)。但是,本书中所有的ASP例子程序都使用VBScript。

VBScript应用领域[ ]

  • Windows操作系统

  VBScript可以被用来自动地完成重复性的[[Windows]]操作系统任务。在Windows操作系统中,VBScript可以在Windows Script Host的范围内运行。Windows操作系统可以自动辨认和执行*.VBS和*.WSF两种文件格式,此外 Internet Explorer可以执行HTA和CHM文件格式。VBS和WSF文件完全是文字式的,它们只能通过少数几种对话窗口与用户通讯。HTA和CHM文件使用HTML格式,它们的程序码可以象HTML一样被编辑和检查。在WSF、HTA和CHM文件中VBScript和JavaScript的程序码可以任意混合。HTA文件实际上是加有VBS、JavaScript成分的HTML文件。CHM文件是一种在线帮助,用户可以使用专门的编辑程序将HTML程序编辑为CHM。

  • 网页浏览器

  网页中的VBS可以用来指挥客户方的网页浏览器(浏览器执行VBS程序)。VBS与JavaScript在这一方面是竞争者,它们可以用来实现动态HTML,甚至可以将整个程序结合到网页中来。至今为止VBS在客户方面未能占优势,因为它只获得Microsoft Internet Explorer的支持(Mozilla Suite可以通过装置一个外挂来支持VBS)。而JavaScript则受到所有网页浏览器的支持。在Internet Explorer中VBS和JavaScript使用同样的权限,它们只能有限地使用Windows操作系统中的对象。

  • 网页服务器

  在网页服务器方面VBS是微软的Active Server Pages的一部分,它与JavaServer Pages和PHP是竞争对手。在这里VBS的程序码直接嵌入到HTML页内,这样的网页以ASP结尾。网页服务器Internet信息服务执行ASP页内的程序部分并将其结果转化为HTML传递给网页浏览器供用户使用。这样服务器可以进行数据库闻讯并将其结果放到HTML网页中。


VBScript优缺点[ ]

VBscript优点:

  • 由于VBScript由网页浏览器解释执行,不需要增大服务器的负担。
  • 易学。
  • 在所有2000 / 98SE以后的Windows版本都可直接使用。
  • 可以使用其它程序和可使用的物件(尤其Microsoft Office)。

VBscript缺点:

  • 现在VBS无法作为电子邮件的附件了。Microsoft Outlook拒绝接受VBS为附件,收信人无法直接使用VBS附件。
  • VBS的各种编辑程器不受欢迎。
  • 操作系统没有任何特别的保护设施。VBS程序与其它JS、EXE、BAT或CMD程序一样对待。操作系统没有监察恶意功能的能力。


VBScript和VB的对比[ ]

不能为变量定义类型

在VB中,为变量定义类型使用Dim变量名As类型 但是在VBScript中这样写是错误的。只能使用Dim变量名,解释器会自动根据赋值的类型定义变量类型。

不能使用条件编译

在VB中,可以使用#If…Then、#ElseIf…Then、#Else、#End If、#Const… = …等语句定义编译时使用的语句 而由于VBScript不需要编译即可直接执行,所以并不需要条件编译语句。


VBScript安全性[ ]

微软决定Outlook和Outlook Express中的HTML邮件可以使用VBScript后出现了许多利用Windows Script Host和ActiveX的功能的电脑病毒。这些病毒之所以能够传播开来也是因为一开始这些系统功能完全未受保护。虽然VBScript和JavaScript使用同样的使用操作系统的功能的安全措施,今天呼唤这些功能被看作不符合标准。

一般很难保护VBScript的程序码不被用户看到。


VBScript 数据类型[ ]

VBscript 只有一种数据类型,称为 Variant。Variant 是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为 Variant 是 VBscript 中唯一的数据类型,所以它也是 VBscript 中所有函数的返回值的数据类型。


Variant 子类型[ ]

除简单数字或字符串以外,Variant 可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。从 Boolean 值到浮点数,数值信息是多种多样的。Variant 包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进 Variant 中,而 Variant 也会按照最适用于其包含的数据的方式进行操作。


子类型描述[ ]

  • Empty 未初始化的 Variant。对于数值变量,值为 0;对于字符串变量,值为零长度字符串 ("")。
  • Null 不包含任何有效数据的 Variant。
  • Boolean 包含 True 或 False。
  • Byte 包含 0 到 255 之间的整数。
  • Integer 包含 -32,768 到 32,767 之间的整数。
  • Currency -922,337,203,685,477.5808 到 922,337,203,685,477.5807。
  • Long 包含 -2,147,483,648 到 2,147,483,647 之间的整数。
  • Single 包含单精度浮点数,负数范围从 -3.402823E38 到 -1.401298E-45,正数范围从 1.401298E-45 到 3.402823E38。
  • Double 包含双精度浮点数,负数范围从 -1.79769313486232E308 到 -4.94065645841247E-324,正数范围从 4.94065645841247E-324 到 1.79769313486232E308。
  • Date (Time) 包含表示日期的数字,日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。
  • String 包含变长字符串,最大长度可为 20 亿个字符。
  • Object 包含对象。
  • Error 包含错误号。


编译器错误代码[ ]

  • Microsoft VBScript 编译器错误 错误 缺少语句
  • ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E14)-->sql语句出错(字段名错误,或数据类型不匹配)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E07)-->sql语句出错(要插入或更新的字段的类型与变量数据类型不匹配)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E57)-->sql语句出错(要插入或更新的数据溢出)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E10)-->sql语句出错(update字段名或要更新的数据类型错误)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80004005)-->sql语句出错(要插入或更新的字段的数值不能为空值)
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80004005) -->打开数据库出错,没有在指定目录发现数据库
  • MicrosoftOLEDBPRoviderforODBCDrivers(0x80040E37)-->没有发现表
  • MicrosoftVBscript运行时错误(0x800A000D)-->错误引用rs变量(rs对像已关闭或未定义)
  • MicrosoftVBscript运行时错误(0x800A01C2)-->vbscript脚本错误(vbscript语句出错)
  • MicrosoftVBscript运行时错误(0x800A0006)-->vbscript脚本错误(溢出错误)
  • MicrosoftVBscript编译器错误(0x800A040E)-->缺少loop
  • MicrosoftVBscript编译器错误(0x800A03EA)-->缺少if或endif
  • MicrosoftVBscript编译器错误(0x800A03EE)--> 语句未结束(缺少")")
  • MicrosoftVBscript编译器错误(0x800A03F6)-->if语句出错(缺少endif)
  • MicrosoftVBscript运行时错误(0x800A005B)-->缺少set
  • MicrosoftVBscript运行时错误(0x800A0005)-->变量未定义
  • MicrosoftVBscript编译器错误(0x800A03F9)-->if语句缺少then
  • MicrosoftVBscript编译器错误(0x800A0411)-->dim语句定义错误
  • MicrosoftVBscript编译器错误(0x800A0408)-->sql语句错误(?????????????????)
  • Microsoft VBScript 运行时错误 (0x800A01B6)错误原因:set rs=server.create......你少了 set
  • ADODB.Recordset(0x800A0BB9)-->sql语句出错(sql语句或conn语句未定义或对一个rs属性进行赋值时发生错误)
  • ADODB.Recordset(0x800A0CC1)-->rs对像出错(rs对像本身不存在或错误地引用了一个不存在的字段名)
  • ADODB.Recordset(0x800A0BCD)-->rs对像出错(记录集中没有记录却对记录集进行操作)
  • ADODB.Recordset(0x800A0E78)-->rs对像出错(记录集不存在,缺少rs.open语句)
  • ADODB.Recordset(0x800A0CC1) -->rs对像出错(引用了一个不存在的字段名)
  • ADODB.Recordset(0x800A0E7D)-->conn定义错误
  • ADODB.Recordset(0x800A0CB3)-->数据库以只读方式打开,无法更新数据


语法错误[ ]

  如果 VBscript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误。

  错误通常在执行程序前,编译程序时产生。 以下是53个语法错误:

  错误编号 描述

  十进制 十六进制 说明

  1001 800A03E9 内存不足

  1002 800A03EA 语法错误

  1003 800A03EB 缺少“:”

  1005 800A03ED 需要 '('

  1006 800A03EE 需要 ')'

  1007 800A03EF 缺少“]”

  1010 800A03F2 需要标识符

  1011 800A03F3 需要 '='

  1012 800A03F4 需要 'If'

  1013 800A03F5 需要 'To'

  1014 800A03F6 需要 'End'

  1015 800A03F7 需要 'Function'

  1016 800A03F8 需要 'Sub'

  1017 800A03F9 需要 'Then'

  1018 800A03FA 需要 'Wend'

  1019 800A03FB 需要 'Loop'

  1020 800A03FC 需要 'Next'

  1021 800A03FD 需要 'Case'

  1022 800A03FE 需要 'Select'

  1023 800A03FF 需要表达式

  1024 800A0400 需要语句

  1025 800A0401 需要语句的结束

  1026 800A0402 需要整数常数

  1027 800A0403 需要 'While' 或 'Until'

  1028 800A0404 需要 'While,'、 'Until,' 或语句未结束

  1029 800A0405 需要 'With'

  1030 800A0406 标识符太长

  1031 800A0407 无效的数

  1032 800A0408 无效的字符

  1033 800A0409 未结束的串常量

  1034 800A040A 未结束的注释

  1037 800A040D 无效使用关键字 'Me'

  1038 800A040E 'loop' 没有 'do'

  1039 800A040F 无效 'exit' 语句

  1040 800A0410 无效 'for' 循环控制变量

  1041 800A0411 名称重定义

  1042 800A0412 必须为行的第一个语句

  1043 800A0413 不能赋给非Byval参数

  1044 800A0414 调用 Sub 时不能使用圆括号

  1045 800A0415 需要文字常数

  1046 800A0416 需要 'In'

  1047 800A0417 需要 'Class'

  1048 800A0418 必须在一个类的内部定义

  1049 800A0419 在属性声明中需要 Let , Set 或 Get

  1050 800A041A 需要 'PRoperty'

  1051 800A041B 参数数目必须与属性说明一致

  1052 800A041C 在类中不能有多个缺省的属性/方法

  1053 800A041D 类初始化或终止不能带参数

  1054 800A041E PRoperty Let 或 Set 至少应该有一个参数

  1055 800A041F 不需要的 'Next'

  1056 800A0420 只能在 ‘PRoperty’ 或 ’Function’ 或 ’Sub’ 上指定 ’Default’

  1057 800A0421 说明 'Default' 必须同时说明 'Public' "

  1058 800A0422 只能在 PRoperty Get 中指定 'Default'


运行时错误[ ]

  如果 VBScript 脚本执行系统无法实施的操作,则会产生 VBScript 运行时错误。只有在运行脚本、为变量表达式赋值或分配内存时,才会产生 VBScript 运行时错误。 以下是65个运行时错误:

  错误编号 描述

  十进制 十六进制 说明

  5 800A0005 无效过程调用或参数

  6 800A0006 溢出

  7 800A0007 内存不足

  9 800A0009 下标越界

  10 800A000A 该数组为定长的或临时被锁定

  11 800A000B 被零除

  13 800A000D 类型不匹配

  14 800A000E 字符串空间溢出

  17 800A0011 无法执行请求的操作

  28 800A001C 堆栈溢出

  35 800A0023 未定义 Sub 或 Function

  48 800A0030 加载 DLL 错误

  51 800A0033 内部错误

  52 800A0034 坏文件名或数

  53 800A0035 文件未找到

  54 800A0036 坏文件模式

  55 800A0037 文件已经打开

  57 800A0039 设备I/O错误

  58 800A003A 文件已经存在

  61 800A003D 磁盘空间已满

  62 800A003E 输入超出文件尾

  67 800A0043 文件太多

  68 800A0044 设备不可用

  70 800A0046 权限禁用

  71 800A0047 磁盘未准备好

  74 800A004A 不能用不同的驱动器重新命名

  75 800A004B 路径/文件访问错误

  76 800A004C 路径未找到

  91 800A005B 未设置对象变量

  92 800A005C For 循环未初始化

  94 800A005E 非法使用 Null

  322 800A0142 不能建立所需临时文件

  424 800A01A8 需要对象

  429 800A01AD ActiveX 部件无法创建对象

  430 800A01AE 类不支持自动化

  432 800A01B0 在自动化操作中未找到文件名或类名

  438 800A01B6 对象不支持该属性或方法

  440 800A01B8 Automation错误

  445 800A01BD 对象不支持此操作

  446 800A01BE 对象不支持指定的参数

  447 800A01BF 对象不支持当前的区域设置

  448 800A01C0 未找到命名参数

  449 800A01C1 参数不可选

  450 800A01C2 错误的参数个数或无效的参数属性值

  451 800A01C3 对象不是一个集合

  453 800A01C5 指定的dll函数未找到

  455 800A01C7 代码源锁错误

  457 800A01C9 这个键已经是本集合的一个元素关联

  458 800A01CA 变量使用了一个 VBScript 中不支持的自动化(Automation)类型

  462 800A01CE 远程服务器不存在或不能访问

  481 800A01E1 无效图片

  500 800A01F4 变量未定义

  501 800A01F5 违法的分配

  502 800A01F6 脚本对象不安全

  503 800A01F7 对象不能安全初始化

  504 800A01F8 对象不能安全创建

  505 800A01F9 无效的或不合格的引用

  506 800A01FA 类未被定义

  507 800A01FB 发生异常

  5016 800A1398 需要正则表达式对象

  5017 800A1399 正则表达式中的语法错误

  5018 800A139A 错误的数量词

  5019 800A139B 在正则表达式中需要 ']'

  5020 800A139C 在正则表达式中需要 ')'

  5021 800A139D 字符集越界

  32811 800A802B 元素未找到


相关条目[ ]

参考来源[ ]