现在就来测试前面创建的类。
按F5运行程序;在弹出的属性对话框中,选中"WaitforComponentstoStart"(启动工程时等待创建部件),然后按[OK]按钮;
-align="right">->->->
这时,类就会被激活,其他程序就可使用它的功能。
再次运行VisualBasic另一个实例;
创建一个新的"StandardEXE"工程;
选择"'Project"->"References"菜单;
浏览对话框中可引用的列表项,可以发现一些额外的组件。
选中"Northwind"列表项;
Northwind就是前面创建的ActiveX工程。
单击[OK]按钮;
现在添加一些代码来使用上述工程:
在Form1表单中添加一个命令按钮;为命令按钮添加下列代码:
-> DimTestAsCustomers
SetTest=NewCustomers
MsgBoxTest.CustomerID
SetTest=Nothing->
该代码首先创建一个新的Customers对象,然后显示CustomerID信息,最后将Test对象置为Nothing,并关闭它。
按F5键运行测试程序;
需要说明的是,当运行时出现"invalidreference"错误提示时,肯定哪些地方有问题。这时可按下面步骤重新来一次:
(1)在测试工程中去掉Northwind引用;
(2)重新启动Northwind工程;
(3)在测试工程中添加Northwind引用,再运行!
单击表单中的命令按钮;
这时运行时可能需要几秒钟,毕竟还要做一些如数据库连接等工作。但是,除了一开始的停留外,后面的调用就快得多了。程序将显示包含"ALFKI"的消息对话框。
关闭测试程序。
现在,我们来看看程序背后究竟发生什么。
将插入符移动到MsgBoxTest.CustomerID这条语句上;按F9;
该语句显示为红色,用来标记一个断点。当代码运行时,它会停留在这里。按F8将单步运行此语句,并移动到下一句代码上。
按F5再次运行测试程序;
单击命令按钮;
流程将停留在MsgBox这条命令上。
按F8,慢慢单步执行各条语句;
将会看到系统在两个VisualBasic中来回切换,显示出不同属性的处理过程。
结束后,关闭测试程序。
下面再对前面的工程进行测试。这一次,我们不仅获取CustomerID的值,而且还设置这个值。
将命令按钮的代码改为:
-> DimTestAsCustomers
SetTest=NewCustomers
Test.CustomerID="KARLY"
Test.Update
MsgBoxTest.CustomerID
SetTest=Nothing->
该代码首先设置"CustomerID"字段,然后更新记录集,最后显示出CustomerID属性,其结果应该是设置的"KARLY"。
假如愿意,仍然可以按F9高亮显示"Test.CustomerID="这条语句,然后按F8单步运行来查看其工作情况。
至此,我们已经成功地创建并测试一个简单的基于数据库的类。但是,还没有对customerID的字符串长度作测试,如果其长度超过5个字符,看看会发生什么?
下一步,我们将扩充并改进这个数据库类。
首先添加类的几个特征:其他的属性、一些方法甚至一两个事件。其相应的代码如下:
-> DimWithEventsrsAsRecordset
PublicEventRecordsetMove()
PrivateSubClass_Initialize()
Setrs=NewRecordset
rs.ActiveConnection="Provider=Microsoft."&_"Jet.OLEDB.4.0;DataSource=C:\ProgramFiles\"&_"MicrosoftVisualStudio\VB98\Nwind.mdb;"&_"PersistSecurityInfo=False"
rs.Open"select*fromcustomers",,adOpenKeyset,adLockOptimistic
EndSub
PrivateSubClass_Terminate()
rs.Close
Setrs=Nothing
EndSub
PublicPropertyGetCustomerID()AsString
CustomerID=rs("CustomerID")
EndProperty
PublicPropertyLetCustomerID(NewValueAsString)
'IfthelengthofNewValueisgreaterthanfive
IfLen(NewValue)>5Then
'...thenraiseanerrortotheprogram
'usingthisclass,byrunning
'Err.RaisevbObjectError OurErrorNumber
Err.RaisevbObjectError 1,"CustomerID",_"CustomerIDcanonlybeuptofive"&_"characterslong!"
Else
'...otherwise,changethefieldvalue
rs("CustomerID")=NewValue
EndIf
EndProperty
PublicPropertyGetCompanyName()AsVariant
CompanyName=rs("CompanyName")
EndProperty
PublicPropertyLetCompanyName(ByValNewValueAsVariant)
rs("CompanyName")=NewValue
EndProperty
PublicPropertyGetContactName()AsVariant
ContactName=rs("ContactName")
EndProperty
PublicPropertyLetContactName(ByValNewValueAsVariant)
rs("ContactName")=NewValue
EndProperty
PublicPropertyGetContactTitle()AsVariant
ContactTitle=rs("ContactTitle")
EndProperty
PublicPropertyLetContactTitle(ByValNewValueAsVariant)
rs("ContactTitle")=NewValue
EndProperty
PublicPropertyGetAddress()AsVariant
Address=rs("Address")
EndProperty
PublicPropertyLetAddress(ByValNewValueAsVariant)
rs("Address")=NewValue
EndProperty
PublicPropertyGetCity()AsVariant
City=rs("City")
EndProperty
PublicPropertyLetCity(ByValNewValueAsVariant)
rs("City")=NewValue
EndProperty
PublicPropertyGetRegion()AsVariant
Region=rs("Region")
EndProperty
PublicPropertyLetRegion(ByValNewValueAsVariant)
rs("Region")=NewValue
EndProperty
PublicPropertyGetPostalCode()AsVariant
PostalCode=rs("PostalCode")
EndProperty
PublicPropertyLetPostalCode(ByValNewValueAsVariant)
rs("PostalCode")=NewValue
EndProperty
PublicPropertyGetCountry()AsVariant
Country=rs("Country")
EndProperty
PublicPropertyLetCountry(ByValNewValueAsVariant)
rs("Country")=NewValue
EndProperty
PublicPropertyGetPhone()AsVariant
Phone=rs("Phone")
EndProperty
PublicPropertyLetPhone(ByValNewValueAsVariant)
rs("Phone")=NewValue
EndProperty
PublicPropertyGetFax()AsVariant
Fax=rs("Fax")
EndProperty
PublicPropertyLetFax(ByValNewValueAsVariant)
rs("Fax")=NewValue
EndProperty
PublicSubAddNew()
rs.AddNew
EndSub
PublicSubUpdate()
rs.Update
EndSub
PublicSubCancelUpdate()
Ifrs.EditMode=adEditInProgressOr_rs.EditMode=adEditAddThen
rs.CancelUpdate
EndIf
EndSub
PublicSubMoveNext()
rs.MoveNext
EndSub
PublicSubMovePrevious()
rs.MovePrevious
EndSub
PublicSubMoveFirst()
rs.MoveFirst
EndSub
PublicSubMoveLast()
rs.MoveLast
EndSub
PublicFunctionFindByCustomerID(CustomerIDAsString)AsBoolean
'UsestheFindmethodtolocatecustomers
'withamatchingCustomerID.
'ReturnsTruevalueiscustomer(s)found
DimvarBookmarkAsVariant
rs.MoveFirst
rs.Find("CustomerID='"&CustomerID&"'")
Ifrs.EOF=TrueThen
FindByCustomerID=False
rs.Bookmark=varBookmark
Else
FindByCustomerID=True
EndIf
EndFunction
PublicPropertyGetEOF()AsBoolean
'Exampleofaread-onlyproperty
NoPropertyLetshere
EOF=rs.EOF
EndProperty
PublicPropertyGetBOF()AsBoolean
'Anotherexampleofaread-onlyproperty
BOF=rs.BOF
EndProperty
PrivateSubrs_MoveComplete(ByValadReasonAsADODB.EventReasonEnum,_
ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,_
ByValpRecordsetAsADODB.Recordset)
'ReactstotherecordsetMoveComplete
'method-raiseseventwitheachmove
RaiseEventRecordsetMove
EndSub->
需要说明的是:迄今为止,我们仅仅是在一个类中添加代码。当然,也可以选择"Project"->"AddClass"菜单来向工程添加多个类,而且还可利用"collections"使这些类工作在一起。但是在这里,我们仍然想用一个类来处理一个数据表。
将上述类的代码复制并粘贴到自己的类中,下一节将讨论该程序的编译。
->
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有