关于作者

用户名:大魔头
笔名:666.NET
地区: 深圳
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



IT信息

访问统计:
文章个数:23
评论个数:16
留言条数:1




Powered by BlogDriver 2.1

魔鬼的天空

 

文章

浅谈Observer Pattern(观察者模式)及其在C#中的实现
摘要:我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低耦合”,设计可重用的对象才是我们追求的。在设计过程中,我们经常会接触到一种情况:一个对象的行为引发其它多个对象相应的行为。这时我们便可以通过观察者模式的设计思想来设计对象模型。 查看全文

- 作者: 大魔头 2005年10月31日, 星期一 15:52  回复(0) |  引用(0) 加入博采

ASP.NET系统用户权限设计与实现
摘要:ASP.NET系统用户权限设计与实现 来源:天极网 查看全文

- 作者: 大魔头 2005年08月2日, 星期二 23:27  回复(0) |  引用(0) 加入博采

WEB打印代码大全
摘要:ASP开发必备:WEB打印代码大全这篇文章主要介绍了如何使用ASP控制Web的各种打印效果,它能够控制纵打、横打和页面边距等。 查看全文

- 作者: 大魔头 2005年07月21日, 星期四 00:12  回复(0) |  引用(0) 加入博采

关于用户角色权限的一点想法(2)
摘要:Group与Operator是多对多的关系 查看全文

- 作者: 大魔头 2005年07月18日, 星期一 00:37  回复(1) |  引用(0) 加入博采

关于用户角色权限的一点想法(1) 选择自 biggie 的 Blog
摘要:权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实际情况和具体架构,在维护性、灵活性、完整性等N多个方案之间比较权衡,选择符合的方案。 查看全文

- 作者: 大魔头 2005年07月18日, 星期一 00:34  回复(0) |  引用(0) 加入博采

如何把ASP编写成DLL
 服务器端组件

首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.

当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到 〈% %>标签之间的代码,并且执行它(也可以是〈script runat=server>〈/script>之间的代码).如果这个ASP程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.

想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立Dynamic Linked Libraries (DLL 文件),它能在IIS上直接运行(如果有asp文件来请求的话).

系统和软件的要求

你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB5的环境下开发的.

我们开始吧

启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名(class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有Microsoft Active Server Pages Object Library,它在我们的程序非常有用.从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口从中选择Microsoft Active Server Pages Object Library.

给工程和类命名

现在我们来根据自己的爱好来为project1和class1来命名吧!给它们命名也是很重要的,我们以后会用这个工程名和类名来创建这个组件的实例!后面详细介绍.

如何改名,我就不想多说了!
我们的工程名改为Exmaple,类名为Helloword

怎样使用工程和类

现在我们有了我们自己的工程(Example1)和类名(HelloWorld).以后我们就会在ASP代码中使用它们的名字来引用这个组件.在ASP中我们就这样引用,如下:

Set ObjReference = Server.CreateObject("ProjectName.ClassName")

对于我们工程的引用就是:
Set ObjReference = Server.CreateObject("Example1.HelloWorld")
现在我们就能用ObjReference来调用我们在组件中所创建的函数,子程序.下面我们会来写一个SayHello的子程序, 我们执行它的代码如下:

〈%
Set ObjReference = Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

为了在Helloword类中使用ASP的方法,你必须在此类中写一个OnStartPage
子函数.如下:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
End Sub

现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看下面的代码:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyApplication = MyScriptingContext.Application
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub

以后我们就能用在VB中用MyApplication 来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在 OnStartPage之前来申明这些变量:

Private MyScriptingContext As ScriptingContext
Private MyApplication As Application
Private MyRequest As Request
Private MyResponse As Response
Private MyServer As Server
Private MySession As Session

使用ASP的对象
我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据.现在我们在我们的VB中实现这个功能,代码如下:

用ASP中实现:
〈%
MyTempVariable = Request.Form("userName")
Response.Write ("you entered "& MyTempVariable & "as your user name")
%>

在VB中实现:

MyTempVariable = MyRequest.Form("userName")
MyResponse.Write ("you entered "& MyTempVariable & "as your user name")

通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这个名字可以随便来取,你甚至可以就取Response.
另一件我们得注意

- 作者: 大魔头 2005年05月15日, 星期日 03:12  回复(0) |  引用(0) 加入博采

XMLHTTP对象及其方法
MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。

创建XMLHTTP对象的语句如下:
Set objXML = CreateObject("Msxml2.XMLHTTP") 或
Set objXML = CreateObject("Microsoft.XMLHTTP")
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
对象创建后调用Open方法对Request对象进行初始化,语法格式为:
poster.open http-method, url, async, userID, password
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:#160;
http-method: HTTP的通信方式,比如GET或是 POST
url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序
async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID 用户ID,用于服务器身份验证
password 用户密码,用于服务器身份验证
XMLHTTP对象的Send方法
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:
poster.send XML-data
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
客户机处理响应信息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的:
● responseTxt:将返回消息作为文本字符串;
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
● responseStream:将返回消息视为Stream对象。
 

下面的xml文件是动态生成的最后用xmlHTTP传送出去,这是一个在客户端JavaScript脚本里的内容,当然你也可以写在服务器,但是要相应的改一些东西:(仅供大家参考,了解它的用法)
var xmlDoc=new ActiveXObject("MSXML2.DOMDocument");
flag=xmlDoc.loadXML("");

  newNode =xmlDoc.createElement("编码")
  MarkNode=xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartMark")
  newNode.text=StartMark;
  MarkNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndMark")
  newNode.text=EndMark;
  MarkNode.appendChild(newNode)
 
  newNode =xmlDoc.createElement("日期")
  DateNode=xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartDate");
  newNode.text=StartDate;
  DateNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndDate")
  newNode.text=EndDate;
  DateNode.appendChild(newNode);
 
  newNode =xmlDoc.createElement("数量")
  SLNode =xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartSL")
  newNode.text=StartShuL
  SLNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndSL");
  newNode.text=EndShuL
  SLNode.appendChild(newNode);
 
  newNode =xmlDoc.createElement("单价")
  DJNode =xmlDoc.documentElement.appendChild(newNode)
  newNode =xmlDoc.createElement("StartDJ")
  newNode.text=StartDanJ;
  DJNode.appendChild(newNode);
  newNode =xmlDoc.createElement("EndDJ")
  newNode.text=EndDanJ;
  DJNode.appendChild(newNode);
 
  newNode =xmlDoc.createElement("金额")
  JENode =xmlDoc.documentElement.appendChild(newNode)
  newNode =xmlDoc.createElement("StartJE")
  newNode.text=StartJinE
  JENode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndJE")
  newNode.text=EndJinE
  JENode.appendChild(newNode)
 
  newNode =xmlDoc.createElement("仓库代码")
  newNode.text=CK;
  xmlDoc.documentElement.appendChild(newNode)
 
  newNode =xmlDoc.createElement("票号")
  newNode.text=RKPH;
  xmlDoc.documentElement.appendChild(newNode)
 
  newNode =xmlDoc.createElement("单位代码")
  newNode.text=CorpName;
  xmlDoc.documentElement.appendChild(newNode)
 
  newNode =xmlDoc.createElement("BiaoShi")
  newNode.text=Biaoshi
  xmlDoc.documentElement.appendChild(newNode)
 
  newNode =xmlDoc.createElement("FindCate")
  newNode.text=FindCate
  xmlDoc.documentElement.appendChild(newNode)
 
  var xh =new ActiveXObject("MSXML2.XMLHTTP")
  xh.open("POST","Find.asp",false)
  xh.setRequestHeader("Content-Type","text/xml")
  xh.setRequestHeader("Content-Type","gb2312")
  xh.send(xmlDoc);
我的每一个newNode的text值是一个变量,也就是我客户端form 中input的值,

转自:动态网制作指南 www.knowsky.com

- 作者: 大魔头 2005年04月20日, 星期三 23:08  回复(0) |  引用(0) 加入博采

VB编程的七个优良习惯
VB编程的八个优良习惯
 



1、"&"替换"+"
2、变量命名大小写,语句错落有秩,源代码维护方面
3、请养成以下的"对象命名约定"良好习惯
4、在简单的选择条件情况下,使用IIf()函数
5、尽量使用Debug.Print进行调试
6、在复对某一对象的属性进行修改时,尽量使用With....End With
7、MsgBox中尽量使用消息图标,这样程序比较有规范
8、在可能的情况下使用枚举


1、"&"替换"+"
在很多人的编程语言中,用"+"来连接字符串,这样容易导致歧义。良好的习惯是用"&"来连接字符串.

不正确:
Dim sMessage As String
sMessage = "1" + "2"

正确:
Dim sMessage As String
sMessage = "1" & "2"

注意:"&"的后面有个空格

2、变量命名大小写,语句错落有秩,源代码维护方面

下面大家比较一下以下两段代码:

读懂难度很大的代码:

Dim SNAME As String
Dim NTURN As Integer

If NTURN = 0 Then
If SNAME = "vbeden" Then
Do While NTURN < 4
NTURN = NTURN + 1
Loop
End If
End If

容易读懂的代码:

Dim sName As String
Dim nTurn As Integer

If nTurn = 0 Then
   If sName = "vbeden" Then
      Do While nTurn < 4
          nTurn = nTurn + 1
      Loop
   End If
End If

[返回索引]

3、请养成以下的"对象命名约定"良好习惯

推荐使用的控件前缀

控件类型 前缀 例子
3D Panel  pnl pnlGroup
ADO Data ado adoBiblio
Animated button ani aniMailBox
Check box chk chkReadOnly
Combo box, drop-down list box cbo cboEnglish
Command button cmd cmdExit
Common dialog  dlg dlgFileOpen
Communications  com comFax
Control (当特定类型未知时,在过程中所使用的) ctr ctrCurrent
Data dat datBiblio
Data-bound combo box dbcbo dbcboLanguage
Data-bound grid dbgrd dbgrdQueryResult
Data-bound list box dblst dblstJobType
Data combo dbc dbcAuthor
Data grid dgd dgdTitles
Data list dbl dblPublisher
Data repeater drp drpLocation
Date picker dtp dtpPublished
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Flat scroll bar fsb fsbMove
Form frm frmEntry
Frame fra fraLanguage
Gauge gau gauStatus
Graph gra graRevenue
Grid grd grdPrices
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Image combo imgcbo imgcboProduct
ImageList ils ilsAllIcons
Label lbl lblHelpMessage
Lightweight check box lwchk lwchkArchive
Lightweight combo box lwcbo lwcboGerman
Lightweight command button lwcmd lwcmdRemove
Lightweight frame lwfra lwfraSaveOptions
Lightweight horizontal scroll bar lwhsb lwhsbVolume
Lightweight list box lwlst lwlstCostCenters
Lightweight option button lwopt lwoptIncomeLevel
Lightweight text box lwtxt lwoptStreet
Lightweight vertical scroll bar lwvsb lwvsbYear
Line lin linVertical
List box lst lstPolicyCodes
ListView lvw lvwHeadings
MAPI message mpm mpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Menu mnu mnuFileOpen
Month view mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab  mst mstFirst
OLE container ole oleWorksheet
Option button opt optGender
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data rd rdTitles
RichTextBox rtf rtfReport
Shape shp shpCircle
Slider sld sldScale
Spin spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOptions
Text box txt txtLastName
Timer tmr tmrAlarm
Toolbar tlb tlbActions
TreeView tre treOrganization
UpDown upd updDirection
Vertical scroll bar vsb vsbRate

--------------------------------------------------------------------------------
推荐使用的数据访问对象 (DAO) 的前缀
用下列前缀来指示数据访问对象
数据库对象 前缀 例子
Container con conReports
Database db dbAccounts
DBEngine dbe dbeJet
Document doc docSalesReport
Field fld fldAddress
Group grp grpFinance
Index ix idxAge
Parameter prm prmJobCode
QueryDef  qry qrySalesByRegion
Recordset rec recForecast
Relation rel relEmployeeDept
TableDef tbd tbdCustomers
User usr usrNew
Workspace wsp wspMine

--------------------------------------------------------------------------------

应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。下表列出了一些例子。

推荐使用的菜单前缀
菜单标题序列 菜单处理器名称
File Open mnuFileOpen
File Send Email mnuFileSendEmail
File Send Fax  mnuFileSendFax
Format Character mnuFormatCharacter
Help Contents mnuHelpContents

当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的"属性"窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。

为其它控件选择前缀

对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。

常量和变量命名约定
除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了 Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。

变量应该总是被定义在尽可能小的范围内。全局 (Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。

Visual Basic 中的变量可以有下列范围

范围 声明位置 可见位置
过程级 过程,子过程或函数过程中的 ‘Private' 在声明它的过程中
模块级 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private' 窗体或代码模块中的每一个过程
全局 代码模块(.bas)的声明部分中的 ‘Public' 应用程序中的每一处

在 Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如 Public.bas。

较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。

除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用 ByVal 将参数传递给 Sub 过程及 function 过程,除非明显地需要改变已传递的参数值。

随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。

变量范围前缀

范围 前缀 例子
全局 g gstrUserName
模块级 m mblnCalcInProgress
本地到过程 无 dblVelocity

如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。

注意: 一致性是卓有成效地使用这种技术的关键;Visual Basic 中的语法检查器不会捕捉以 "p." 开头的模块级变量。

常量
常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准 Visual Basic 常量不包含数据类型和范围信息,但是象 i、s、g 和 m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:

mintUserListMax   '对用户列表的最大限制
                  '(整数值,本地到模块)
gstrNewLine       '新行字符
                  '(字符串,应用程序全局使用)

变量
明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在"选项"对话框的"编辑器"标签中,复选"要求变量声明"选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。

应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。

用下列前缀来指明一个变量的数据类型。

变量数据类型

数据类型 前缀 例子
String (字符串类型) str strFName
Integer (短整数类型) int intQuantity
Long (长整数类型) lng lngDistance
Single (单精度浮点数类型) sng sngAverage
Double (双精度浮点数类型) dbl dblTolerance
Boolean (布尔类型) bln blnFound
Byte (字节类型) byt bytRasterData
Date (日期类型) dte dteNow
Currency (货币计算与定点计算类型) cur curRevenue
Object (对象类型) obj objCurrent
Variant (变体类型) vnt vntCheckSum

描述变量和过程名

变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。

对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。

当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。

用户定义的类型
在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。

[返回索引]

4、在简单的选择条件情况下,使用IIf()函数

罗索的代码:
If nNum = 0 Then
  sName = "sancy"
Else
  sName = "Xu"
End If

简单的代码:
sName=IIf(nNum=0,"sancy","Xu")

5、尽量使用Debug.Print进行调试

在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.

通常:
MsgBox nName

应该:
Debug.Print nName

6、在重复对某一对象的属性进行修改时,尽量使用With....End With

通常:
Form1.Height = 5000
Form1.Width = 6000
Form1.Caption = "This is MyLabel"

应该:
With Form1
  .Height = 5000
  .Width = 6000
  .Caption = "This is MyLabel"
End With
这种结构程序执行效率比较高,特别在循环语句里。

7、MsgBox中尽量使用消息图标,这样程序比较有规范

一般来说

vbInformation 用来提示确认或成功操作的消息

vbExclamation 用来提示警告的消息

vbCritical 用来提示危机情况的消息

vbQuestion 用来提示询问的消息

[返回索引]

8、在可能的情况下使用枚举

枚举的格式为
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum

Enum 语句包含下面部分:

部分 描述
Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public。
Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
name 必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
membername 必需的。用于指定该 Enum 类型的组成元素名称的合法 Visual Basic 标识符。
constantexpression 可选的。元素的值(为 Long 类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个 membername),或者比其直接前驱的值大 1。

说明
所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:

Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum

Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。

不能在 With 块中使用 Enum 类型作为目标。

Enum 语句示例
下面的示例演示用 Enum 语句定义一个命名常数的集合。在本例中是一些可以选择的颜色常数用于设计数据库的数据输入窗体。

Public Enum InterfaceColors
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFBF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
End Enum

好处是加快编程速度

- 作者: 大魔头 2005年02月15日, 星期二 02:57  回复(0) |  引用(0) 加入博采

WINDOWSXPsP2验证码不能正常显示的解决方法
 关于WINDOWSXPsP2验证码不能正常显示的解决方法

注意:补丁打好之后你需要重新打开浏览器才能有效!



原因之一:
  如果您使用的是Windows XP SP2*作系统,由于我们提供的验证码图片格式为.xbm,而Windows XP SP2*作系统默认状态下不提供对该图片格式的支持,要解决问题,可用文本文件编辑如下内容(蓝色部分)到一个文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security]
"BlockXBM"=dword:00000000

  之后将该文件保存为扩展名为.reg的注册表文件,再进行导入即可解决问题。
原因之二:
  经过我们的测试,某些情况下,一些个人防火墙软件可能阻止验证码图片的显示,我们的验证码是通过一个ASP程序来显示.xbm图片,可能某些个人防火墙软件还没有聪明到足以区分正常程序和病毒。建议您在登录的时候先关闭防火墙,然后登录之后再开启防火墙。

原因之三:
  在浏览器的设置里面"禁止显示图片"请在浏览器设置里面"显示图片"打对勾,如下图:

- 作者: 大魔头 2005年01月30日, 星期日 22:45  回复(0) |  引用(0) 加入博采

asp调用存储过程
作者:YeahTech 来源:Yeah!!网络学院 加入时间:2004-11-3

第一种方法是不利用command对象,直接用recordset对象
第二种方法是利用command对象
1.调用存储过程的一般方法
先假设在sql server中有一存储过程dt_users:
CREATE PROCEDURE [dbo].[dt_users]
AS
select * from users
return
GO
第一种方法是不利用command对象,直接用recordset对象
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 这样就可
第二种方法是利用command对象
set comm=server.createobject("adodb.command")
comm.commantype=4
set comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2.给存储过程传递参数
如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!
比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:
参数keyword为关键字,choose是选择查询的方法。
CREATE PROCEDURE [dbo].[dt_bbs]
@keyword varchar(20)=null,
@choose int=null
as
if @choose=1
select * from bbs where name like @keyword
else
select * from bbs where subject like @keyword
return
go
这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序
用第一种方法:
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&keyword&"',"&choose&""
rs.open sql,conn,1,1
用第二种方法:
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
set comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open comm,,1,1

3.进一步讨论
比较上面我所说的两种在asp种调用存储过程的方法,
第一种方法需要对象少,但recordset对象支持的属性少了很多,比如说:rs.recordcount,rs.pagecount,rs.absolutepage这些属性
都不支持,所以用第一种方法就有局限,比如说要分页显示纪录时,就必须要用到第二种方法。
我们用sql server中的存储过程目的是为了加快速度,但一个存储过程中sql语句有很多时,它的优势特别明显。如果sql语句不是很多,
而我们用第二种方法就必须多创建一个command对象,可能还会减慢速度!所以我们要均衡各方面的利益来使用存储过程。
不过我觉得不过速度怎样,使用存储过程可以使程序更加模块化,便于修改,和调试(可以直接在sql server下调试,而不用在ie下看asp
的结果)。
(出处:Viphot)

- 作者: 大魔头 2004年11月18日, 星期四 00:29  回复(2) |  引用(0) 加入博采