龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

用类来编写数据库程序

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
类模块使VB编程更为简洁。通过封装技术将复杂的代码同程序的其它部分分隔开,并通过方法和属性同程序的其它部分对话。对于类的种种好处,相信大家都非常清楚了。本文主要介绍类
类模块使VB编程更为简洁。通过封装技术将复杂的代码同程序的其它部分分隔开,并通过方法和属性同程序的其它部分对话。对于类的种种好处,相信大家都非常清楚了。本文主要介绍类在数据库编程方面的应用。
  
  通过类模块的封装,你可以只需要书写一次那些冗长繁人的SQL查询语句,并能方便地同他人分享你的代码。本文向你介绍如何利用类模块创建SQL查询对象。本文用到Northwind数据库。数据访问技术用的是DAO。
  
  工程目的
  本工程的目的是要建立一个查询,该查询将从Northwind数据库中返回Beverage供应商的信息。这些信息包括哪种饮料是由哪些供应商供应的。看上去很简单,但你得对三个表进行操作,这三个表分别是Suppliers,Categories和Products,因此你需要写一串很长的SQL查询语句,所以你只希望写一次就够了。
  设计类模块
  首先确认你已添加了对MicrosoftDAO3.5ObjectLibrary的引用。接下来在工程中添加一个类模块。将该类模块重命名为ClsSQL。让我们先为这个类创建两个新的公共属性,代码如下:
  
  PublicCompanyNameAsString'Objectproperty
  PublicCategoryNameAsString'Objectproperty
  
  添加一个公用变量,名为strMsg。该变量用来保存对象返回给用户的信息。
  PublicCompanyNameAsString'Objectproperty
  PublicCategoryNameAsString'Objectproperty
  
  PublicstrMsgAsString
  
  现在为这个类编写RunQuery方法。
  SubRunQuery()
  
  DimstrSQLAsString
  DimdbAsDatabase
  DimqdfTempAsQueryDef
  DimrsResultsAsRecordset
  
  'ConstructtheSQLstring
  strSQL="SELECTDISTINCTROWSuppliers.CompanyName,"&"Products.ProductNameFROMSuppliersINNERJOIN"&"(CategoriesINNERJOINProductsONCategories.CategoryID="&"Products.CategoryID)"&"ONSuppliers.SupplierID=Products.SupplierID"&"WHERE(((Suppliers.CompanyName)='"&CompanyName&"')AND"&"((Categories.CategoryName)='"&CategoryName&"'))"
  
  Setdb=OpenDatabase("C:MSOfficeAccessSamplesNorthwind.mdb")
  
  SetqdfTemp=db.CreateQueryDef("")
  qdfTemp.SQL=strSQL
  
  SetrsResults=qdfTemp.OpenRecordset(dbOpenSnapshot)
  rsResults.MoveFirst
  
  'Enumeratetherecordset
  WithrsResults
  DoWhileNot.EOF
  Debug.Print.Fields(0);"";.Fields(1)
  strMsg=strMsg&.Fields(1)&vbCrLf
  .MoveNext
  Loop
  EndWith
  
  rsResults.Close
  qdfTemp.Close
  
  EndSub
  
  现在让我们来简单地分析一下上面的代码。在上面的代码中数据库的路径是用的绝对路径。如果Northwind数据库的路径同你机器上的不同,你需要修改这个路径,以便程序能找到这个数据库。
  SQL代码是在Access中建立好然后粘贴到程序中来的。这样做不仅免去你书写代码的麻烦,而且还不容易出错。在粘贴完之后,将原来在SQL代码中的"BigfootBreweries"和"Beverages"用公共变量CompanyName和CategoryName替换掉。
  
  在定义了QueryDef之后,程序枚举记录集。记录集的信息不仅在立即窗口中显示出来,同时被写入strMsg变量中。
  
  在结束对类模块的编码之前,我们还需要对类模块的Terminate事件编写代码。将下面的代码放到该事件中。
  
  PrivateSubClass_Terminate()
  
  MsgBoxstrMsg,Title:="BeverageResultsfor"&CompanyName,buttons:=vbExclamation
  
  EndSub
  
  
  现在我们已结束了对类模块的编程。接下来在窗体中添加一个命令按钮。将该命令按钮的Caption属性设置为&RunQuery。将下面的代码放在命令按钮的鼠标单击事件中。
  PrivateSubCommand1_Click()
  
  DimobjSQLAsClsSQL
  
  'Settheobjectvariable
  SetobjSQL=NewClsSQL
  
  'Setpropertiesofthenewobject
  WithobjSQL
  .CompanyName="BigfootBreweries"
  .CategoryName="Beverages"
  EndWith
  
  'Retrievetheproperties
  Debug.PrintobjSQL.CompanyName
  Debug.PrintobjSQL.CategoryName
  
  'Callamethodoftheobject
  objSQL.RunQuery
  
  'Destroytheobject
  SetobjSQL=Nothing
  
  EndSub
  
  
  在上面的语句中,我们首先定义了一个对象变量,接下来将这个对象变量初始化为我们刚建立的类的一个实例。我们也可以用下面这一条语句来实现。
  DimobjSQLAsNewClsSQL
  
  紧接着我们设置该对象的属性。CompanyName="BigfootBreweries"和CategoryName="Beverages",将这两个值在立即窗口中显示出来。这样做仅仅为了验证而已。然后调用对象的RunQuery方法。
  objSQL.RunQuery
  
  最后释放该对象,触发对象的Terminate事件,弹出消息框,显示查询结果。
  MsgBoxstrMsg,Title:="BeverageResultsfor"&CompanyName,buttons:=
  vbExclamation
  
  结论
  现在你已对用类模块进行数据库编程的好处有了初步的认识。当然你也可以用标准模块来实现同样的功能。但是用标准模块远不如用类模块简洁。用类模块,你可以为每个查询初始化一个新的对象,而复杂的SQL代码则被封装在类中。用标准模块,你必须将控制权交给模块。最后,类模块更易于移植。->

精彩图集

赞助商链接