VB编程中的一些经验

原创 2002年03月22日 17:37:00

VB编程中的一些经验

1. 假设VB中有如下的变量声明:
 dim s1, s2 as string
则s1是一个variant型变量,而s2是一个string型变量
如果想要声明两个string变量s1和s2
应该用:
 dim s1 as string, s2 as string

2. VB中的对象是自动回收的,类似java
在一个过程中
sub Foo()
 dim obj as new Object
 .... 'do something with obj
end sub
过程结束的时候没有必要 set obj = nothing
因为当离开该过程的时候,局部变量obj消失,因此对Object对象实例的引用也就消失(除非在过程内部有其他的全局变量引用了该对象的实例),所以对象实例会自动释放

但是对于模块级的对象变量,new了一个实例后用完了必须set obj = nothing来释放该实例

3. 对对象变量赋值应该用 set obj = AnOtherObj 这种方式,相当于让obj指向AnOtherObj所指向的对象。VB中的对象变量实质上是一个指向对象实例的指针,这点和java,pascal相同,和C++中不同

4. VB中字符串的内部存储格式是Unicode,它可以自动转化为ANSI字符(单字节字符)或者 DBCS 字符(双字节字符)。例如
  dim s1 as string, s2 as string
  s1 = "中文"
  s2 = left(s1, 1)
 
  则得到的实际上是  s2 = "中"
  因为VB会自动将s1内部unicode的"中"字单作一个DBCS字符取出来传给s2
 
  因此处理双字节字符的时候特别要注意,很容易产生数组溢出错误

  VB中的常用字符串处理函数,例如Asc, Left, Mid...都会自动判断处理的字符串中的每个字符是单字节还是双字节(因为字符串在内部以Unicode存储,所以这一点很容易做到),然后自动转化为ANSI字符或DBCS字符。

 
5. 字符串的比较应该是用 strCmp 函数,而不是简单的用 = 号
   StrComp(string1, string2[, compare])

其中参数compare的取值含义如下:
 常量                 值         含义
 vbUseCompareOption   -1      根据Option Compare 语句的设定进行字符串比较
 vbBinaryCompare      0       进行二进制比较,也就是将string1和string2中的unicode字符看作数组进行字典序比较
 vbTextCompare        1       进行文本比较
 vbDatabaseCompare    2       这个选项只适用于Microsoft Access,根据数据库的设定进行比较


对于英文字符串进行 vbTextCompare 比较时,不区分字母大小写,例如: "a" 与 "A" 相等;
对于中文或其他双字节字符串进行 vbTextCompare 比较时,不区分全角字符和半角字符,例如 "A", "A", "a", "a" 都相等;

6. VB中字符串处理的函数有三种版本:
 (1) ANSI和DBCS版本,一般的字符串函数(例如Mid(), Left(), ... )都是该版本,该版本的函数可以自动识别ANSI字符和DBCS字符,而且无论是ANSI字符还是DBCS字符都当作一个字符处理(虽然一个DBCS字符是两个字节,但还是当作一个字符处理)

 (2) 二进制版本,这个版本的函数是在第一类函数的名称后面加上B, 例如 MidB(), LeftB()……;这个版本的函数将字符串当作字节数组处理,例如 s = "abc", k = LenB(s) , 则 k=6,因为字符串在VB内部以unicode存储,而一个unicode字符占两个字节,所以s实际上占用了2*3=6个字节的空间,于是LenB(s)返回6

 (3) Unicode版本,这个版本的函数是在第一类函数名称后面加上W,例如AscW, ChrW;这个版本的函数将字符串当作unicode处理。

 函数                    功能描述
 Asc              Returns the ANSI or DBCS character code for the first character of a string.
 AscB             Returns the value of the first byte in the given string containing binary data.
 AscW             Returns the Unicode character code for the first character of a string.
 Chr              Returns a string containing a specific ANSI or DBCS character code.
 ChrB             Returns a binary string containing a specific byte.
 ChrW             Returns a string containing a specific Unicode character code.
 Input            Returns a specified number of ANSI or DBCS characters from a file.
 InputB           Returns a specified number of bytes from a file.
 InStr            Returns the first occurrence of one string within another.
 InStrB           Returns the first occurrence of a byte in a binary string.
 Left,Right      Returns a specified number of characters from the right or left sides of a string.
 LeftB, RightB    Returns a specified number of bytes from the left or right side of a binary string.
 Len              Returns the length of the string in number of characters.
 LenB             Returns the length of the string in number of bytes.
 Mid              Returns a specified number of characters from a string.
 MidB             Returns the specified number of bytes from a binary string.


7. VB程序代码中的以下标识符不能含有双字节字符:
Public procedure names  公共过程名称
Public variables 公共变量
Public constants 公共常量
Project name (as specified in the Project Properties dialog box) 工程名称(在工程属性对话框中的名字) [PS: VB中文版中的工程名称可以是中文,比较奇怪的说]
Class names (Name property of a class module, a user control, a property page, or a user document)  类名(类模块、用户控件模块,属性页,用户文档的name属性)


换句话说,其他的标识符都可以用中文,例如:
Private Sub cmdTest_Click()
   Dim 中文变量 As String
   中文变量 = "你好! hello!"
   MsgBox 中文变量
End Sub

这样的代码也是合法的 :-)

一些数据库优化方面的经验

用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存 “inert into user values(1...
  • lixiaoming000
  • lixiaoming000
  • 2013年10月29日 15:29
  • 1199

SQL数据库优化经验

一、人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统D...
  • emailqjc
  • emailqjc
  • 2009年08月05日 11:34
  • 6059

SQL数据库优化方面的经验

1、用PreparedStatement一般来说比用Statement性能高,一个sql发给服务器去执行,涉及步骤:语法检查,语义分析,编译,缓存。 2、有外键约束会影响插入和删除性能,如果程序能够保...
  • daodaipsrensheng
  • daodaipsrensheng
  • 2016年08月29日 10:42
  • 5530

EXCEL在VB中的编程概念全解

...
  • nxhujiee
  • nxhujiee
  • 2010年11月22日 22:51
  • 2530

Andrew Ng 机器学习 机器学习的动机与应用

机器学习定义 在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域 对于一个计算机程序来说,给它一个任务T 一个性能测量方法P 如果在经验E的影响下 P对T的测量结果得到了改进   ...
  • u010094934
  • u010094934
  • 2017年03月14日 22:10
  • 281

VB socket编程入门

利用Winsock控件实现局域网通信   对于局域网用户中的编程爱好者来说,如果能自己编一个局域网通信程序,那么这一切将是多么美妙!可是,如果要从头开始完全由自己来编写一段用于通信的程序,必须对相...
  • lxnkobe
  • lxnkobe
  • 2011年09月27日 21:41
  • 6768

符合1-2年android工作经验,开发中的难点及相关优化

1.sqlite升级步骤:     1.自己写一个类继承自SqliteOpenHelper     2.会实现SqliteOpenHelper的两个方法 onCreate与onUpgrad...
  • u010623588
  • u010623588
  • 2016年04月06日 22:22
  • 1435

[心得]互联网公司招聘要求中的技术整理

身在互联网类公司,对于互联网公司的技术要求比较清楚。为造福想进互联网行业的小弟小妹们,特整理出来。软件测试 分知识密集型和劳动密集型。 像一些app的测试,黑盒测试,写白盒测例,跟踪缺陷一般属于劳...
  • cmrsautomation
  • cmrsautomation
  • 2016年10月01日 15:26
  • 1173

VB编程的一些心得

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:22
  • 107

基于VB的COM编程入门教程

  ...
  • ark1111
  • ark1111
  • 2006年10月18日 16:22
  • 2314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB编程中的一些经验
举报原因:
原因补充:

(最多只允许输入30个字)