在使用以前版本的VisualBasic(或簡稱VB)開發應用程序時,程序開發人員通常需要同時打開兩個應用程序——VisualBasic和一個數據庫管理程序(例如Access)。現在,這些本來應該由數據庫設計人員完成的任務已經成為VisualBasic集成環境的一個部分,而且,在設計完成上述任務時,VB6.0提供的一些數據工具在某些方面比數據庫本身提供的工具還要好用得多。例如,我們在使用MicrosoftSQLServer6.5提供的數據庫工具進行數據庫結構設計時,就會發現,要更改某個已經建成的數據庫表結構是一件非常麻煩的事情。但利用VB6.0提供的數據視圖(DataView)卻象使用Access數據庫一樣方便。下面,我就根據自己的應用體會,談談VB6.0的新增數據庫工具的特點及使用方法。本文所舉的例子用到的語言是VB6.0簡體中文企業版,用到的數據庫是MicrosoftSQLServer。
DataView(數據視圖)窗口
DataView窗口是VB6.0工作區的第一個組成元素,就象屬性(Properities)窗口和工具欄一樣,它可以依附在VB6.0的工作區的邊界上。DataView的功能與VB中的可視化數據管理器(VisData)有點相似。可以從工具欄或“視圖”菜單打開DataView。
DataView窗口顯示當前為數據庫建立的所有連接,以及加入到數據庫中的數據環境(DataEnviroment)連接。有了DataView,我們就可以創建並修改表和視圖、數據庫視圖以及存儲過程和觸發器等。這樣,我們在開發應用程序時,就不需要在VB和數據庫管理程序之間來回切換,而是可以隨時利用這個窗口建立應用程序所需的各種數據連接和數據環境,並對數據庫表和查詢等進行創建和修改。同時,還可以使用VB6.0所提供的其他工具,很方便地把浏覽窗口中的數據字段拖到查詢設計器(QueryDesigner)和數據報表設計器(DataReportDesigner)窗口中,從而很容易地建立一個查詢或報表。
下面舉一個新建“MicrosoftSQLServer”數據視圖的例子。在執行下列步驟之前,需要在控制面板中的“32位ODBC數據源”中建立一個與SQLServer數據庫連接的“系統數據源”(SystemDataSources)。假設我們已經建立了一個有關資金管理系統庫的鏈接“DSN_Funds”。
*單擊“視圖”菜單,並選擇“數據視圖窗口”命令;
*在“數據鏈接屬性”(DataLinkProperties)窗口的“提供方”(Provider)標簽中選擇“MicrosoftOLEDBProviderforODBCDrivers”,單擊“繼續”(Next>>)進入“連接”(Connection);
*在“連接”標簽中,使用“指定數據源”(Specifythesourcesofdata)項,再選擇“使用數據源名”(Usedatasourcename),單擊下拉選擇框,並選擇我們已經建立的系統數據源“DSN_Funds”;如果要檢測連接情況,可以單擊“測試連接”(TestConnection),如果出現測試連接成功的提示,說明連接正確。
*按“確定”就完成了一個“數據視圖窗口”的建立。這時,在數據視圖窗口的“數據鏈接”下會出現“DSN_Funds”。
DataEnvironmentDesigner(數據環境設計器)
DataEnvironment是VB6.0提出的一個新概念,也是本文將要介紹的重點。它可以將許多單獨使用的對象和控件組合成一個單獨的環境,建成後的這個數據環境可用來訪問任何數據庫、查詢或加入其中的存儲過程。這樣,我們就不用再擔心程序中有多處地方用到了某個數據庫的引用,只需作一處改動,應用程序中的其他有關地方也會作出相應變動。這就給我們開發應用程序帶來極大的方便。從某種角度看,DataEnvironment的作用相當於一個通用的Data控件,它可以在任何情況下使用,可以連接到所有的數據庫、表以及只含一個查詢或表的對象上,而不僅僅局限於連接到某個查詢或表上。
數據環境設計器為我們提供了一種可以很容易訪問VB工程中數據的方式。在以前的版本中,在設計時使用ActiveXUserConnection設計器創建遠程數據對象(RemoteDataObjects)(RDO)。現在,我們可以在設計時使用數據環境設計器創建ADO對象。數據環境設計器除了支持UserConnection設計器的所有功能外,還支持:1)Connection、Command和MultipleConnection(多連接,即在一個數據環境中訪問多個數據源)對象;2)OLEDB數據源和ODBC數據源。3)拖放功能,即從數據環境設計器中拖動字段和表到一個窗體或數據報表ActiveX(DataReportActiveX)設計器中,在窗體中自動地創建數據綁定控件。4)執行包含在數據環境中、作為編程的運行時方法的command。5)對綁定到窗體中控件的數據環境進行編程訪問。6)關聯Command對象創建一個關系層次結構的能力,或對Command對象分組創建一個分組層次結構的能力,以及創建合計的能力和手工綁定數據識別控件到一個Command對象中的Field對象的能力。7)數據環境擴展性對象模型,該模型允許您創建外接程序。這些外接程序可以通過編程操作VisualBasic工程中的任何DataEnvironment對象。
下面將介紹如何在VB工程中創建一個數據環境對象,以及如何在應用程序中使用數據環境中的對象。
假如我們要創建一個DataEnvironment(數據環境)用來訪問MicrosoftSQLServer中的資金數據庫——DSN_Funds。這個數據環境對象將作為VB工程的一部分被保存到文件中,文件的擴展名為.DSR,該擴展名代表設計工具。
在可以訪問數據環境設計器之前,必須在VisualBasic中引用它。要引用數據環境設計器,請按照以下步驟執行:
*在“工程”菜單中,單擊“引用..."。
*從“引用..."對話框中,選擇“MicrosoftDataEnvironment1.0",然後單擊“確定”。
要添加一個數據環境設計器對象到一個VB工程,請按照以下步驟執行:
*從“新建工程”對話框的“新建”選項卡中,選擇“標准EXE"工程,然後單擊“打開”。
*從“工程”菜單中,選擇“更多ActiveX設計器...”中的“DataEnvironment"。
一旦在VB工程中添加了一個數據環境(DataEnvironment1),數據環境設計器就自動地包括一個新的連接(Connection1)。在設計時,數據環境打開連接並從該連接中獲得元數據,包括數據庫對象名、表結構和過程參數。我們使用下面的步驟來指定數據環境中新建Connection1對象的屬性。
*在VB"屬性”窗口中,可以將缺省的“名稱”更改為一個更有意義的名字。例如,數據源是SQLServerDSN_Funds數據庫,就可以將Connection1更改為“Cnt_DSN_Funds"。
*用鼠標右鍵單擊Connection1對象並選擇“屬性”,以訪問“數據鏈接屬性”對話框。
*進入“數據鏈接屬性”對話框,在“提供方”選項卡中選擇“MicrosoftOLEDBProviderforODBCDrivers”,在“連接”選項卡中指定數據源“DSN_Funds”。
*單擊“確定”。
還有一個更簡便的方法來建立一個新的連接。即從“數據視圖”窗口中將一個連接拖動到數據環境設計器,自動地創建Connection對象。對於在“數據視圖”中已存在的Connection對象,用這種方式創建Connection對象是非常容易和高效的。
設定完Connection1的屬性後,就可以在這個連接對象中創建命令(Command)對象了。Command對象定義了從一個數據庫連接中獲取何種數據的詳細信息。Command對象既可以基於一個數據庫對象(例如:一個表、視圖、存儲過程),也可以基於一個結構化查詢語言(SQL)查詢。
要創建一個Command對象,可以采用以下步驟或方法:
*在數據環境設計器工具欄中單擊“添加命令”。或右鍵單擊一個Connection對象或數據環境設計器,並從快捷方式菜單中選擇“添加命令”。
*一旦一個Command對象被添加,數據環境視圖就顯示新的Command對象。這個對象的缺省名字是“Command"和加在後面的一個數字,例如:Command1。
*指定Command1對象的屬性。即右鍵單擊Connection1對象並選擇“屬性”訪問“Command屬性”對話框。在對話框中,有“通用”、“關聯”、“分組”和“合計”選項卡,分別定義該數據庫來源、連接屬性及關系等,並組織Recordset中包含的數據。而“高級”選項卡則可以改變在運行時獲取或操作數據的方式。
還有一種更為快捷的方法創建Command對象,就是從一個“數據視圖”中拖動一個表、視圖或存儲過程到數據環境設計器自動地創建Command對象。由“數據視圖”中列出的表、視圖或存儲過程來創建Command對象是一種簡單和高效的方法。如果與被放下的Command對象相關聯的Connection在數據環境中不存在,則自動創建一個Connection對象。
在運行時,數據環境對在數據環境設計器中定義的每一個Command和Connection對象創建ADOCommand和Connection對象。如果Command對象被標記為RecordsetReturning(在“CommandProperties"對話框的“高級”選項卡中),那麼也創建一個ADORecordset對象。ADOCommand對象是作為數據環境運行時對象的一個方法被添加的,而ADOConnection和Recordset對象是作為屬性被添加的。
在數據環境中,ADORecordset對象的名字是以“rs"開頭的,以便將它們和它們對應的Command對象區別開來。例如,一個名為“用戶”的Command對象創建一個名為“rs用戶”的Recordset對象。在缺省情況下,Recordset對象是關閉的。當Recordset對象的對應的Command方法執行時,Recordset對象打開。
在運行時,應用程序可以通過兩種方式使用數據環境:
1.作為綁定到窗體控件中數據的一個直接數據源。
假設我們要將數據環境對象中一個“用戶”Command對象的字段“用戶名”綁定到窗體中的一個TextBox空間中去,則需要執行下列步驟:
*先將一個TextBox控件放到VisualBasic窗體中;
*在“屬性”窗口中,單擊Datasource(“數據源”)屬性,並選擇您想綁定到控件的DataEnvironment對象,如“DadaEnvironment1”;
*單擊DataMember屬性,並選擇數據環境中的Command對象“rs用戶”;
*單擊DataField屬性,從綁定到控件的“rs用戶”Command對象中選擇字段“用戶名”。這樣,就完成了綁定工作。
還有一種更快捷、簡便的方法,就是將需要綁定的Command對象拖到窗體中,則窗體就會自動生成這個對象所有字段的標簽(Label)名和數據操作和顯示區(TextBox)。
2.編程訪問數據環境設計器中的對象。
假設要從一個VisualBasic窗體中編程訪問數據環境中的對象“用戶”記錄,則照以下步驟執行(這個示例假定沒有參數與Command對象相關聯。):
*在窗體中建一個Command按鈕。
*假設附加到這個按鈕的代碼是用於將“用戶”表中的記錄向後移動。則在按鈕的Click事件中添加下面的代碼:
DataEnvironment1.rs用戶.MoveNext
從這上面例子可以看出,與一個ADORecordset關聯的所有方法都可以應用於rs用戶,例如添加、更新、刪除和遍歷記錄的方法。
從上面的例子及說明可以看出,VB中的數據環境就象一個大的數據控件一樣,它可以在不同的窗體中引用和操作。這對於我們開發應用程序來說,無疑是提供了一個很好的數據工具。
QueryDesigner(數據查詢設計)
QueryDesigner用來設計查詢,並把設計出來的查詢保存到數據庫中。與編寫普通的SQL代碼相比,使用QueryDesigner的好處是查詢經過數據庫的編譯以後運行速度將加快。這裡,查詢也可以帶參數,用來在運行時填充數據。這種設計思想可以用來創建通用查詢以讀取一個單獨的記錄,而不必為每個可能的ID記錄號單獨准備一個獨立的查詢。
查詢設計器不但包含可視地顯示查詢的圖形窗格,也包含顯示查詢的SQL文本的SQL窗格。可以在圖形化的或SQL窗格中工作,查詢設計器將保持兩種視圖的同步,以使它們總是當前的。另外,查詢設計器能識別Microsoft(R)SQLServer(TM)和Oracle數據庫之間的差別,因此它能生成並識別數據庫特有的SQL命令。如果向查詢中添加一個以上的表,查詢設計器會自動確定這些表如何關聯,並且在查詢中構造合適的聯結命令。我們可以使用查詢設計器的SQLSELECT命令返回數據,也可以創建更新、添加或刪除數據庫中記錄的查詢。還可以執行查詢及處理網格中的記錄集。
打開QueryDesigner的方法很簡單,只要在數據視圖(DataView)中的“數據鏈接”或“數據環境連接”下有一個鏈接或數據環境,就可以找到視圖(View),然後用鼠標右鍵單擊“視圖”,出現一個彈出式菜單,選擇“新建視圖(N)”即可。然後到數據視圖中將查詢涉及到的表(Tables)拖到QueryDesigner中,定義查詢條件和顯示字段即可建立一個新的查詢。這種查詢建立的方法與Access非常相似。
DataReportDesigner(數據報表設計器)
DataReportDesigner是VB6.0眾多新增功能中最有用的一個功能。有了它,我們就可以在VB中創建簡單的報表,而不是尋求第三方的軟件支持了。另外,我們可以在程序中使用代碼來調用剛創建的報表對象。
用過Access報表設計工具的人再使用VB6.0中的DataReportDesigner,就會感覺它功能更加強大,而且使用方便。它支持頁面、報表頭、記錄行以及其他一些常用的功能,如支持不同的圖形和字體等。雖然這種報表設計器不能完全取代第三方報表設計工具,但對於一些常用的報表來說,有了它就可以很方便地在VB中設計了。
報表設計器必須有數據環境(DataEnvironment)的支持才能使用。因為報表設計中的數據來源與數據環境。
報表設計器主要有以下功能特點:
1.對字段的拖放功能——把字段從Microsoft數據環境設計器拖到數據報表設計器。當進行這一操作時,VisualBasic自動地在數據報表上創建一個文本框控件,並設置被放下字段的DataMember和DataField屬性。也可以把一個Command對象從數據環境設計器拖到數據報表設計器。在這種情況下,對於每一個Command對象包含的字段,將在數據報表上創建一個文本框控件;每一文本框的DataMember和DataField屬性將被設置為合適的值。
2.Toolbox控件——數據報表設計器以它自己的一套控件為特色。當數據報表設計器被添加到工程時,控件被自動創建在一個名為DataReport的新“工具箱”選項卡上。多數的控件在功能上與VisualBasic內部控件相同,並且包括Label、Shape、Image、TextBox和Line控件。第六個控件,即Function控件,自動地生成如下四種信息中的一種:Sum、Average、Minimum或Maximum。
3.報表打印及預覽——通過使用Show方法預覽報表。然後生成數據報表並顯示在它自己的窗口內;通過調用PrintReport方法,以編程方式打印一個報表。當數據報表處於預覽方式,用戶也可以通過單擊工具欄上的打印機圖標打印報表。
4.文件導出——使用ExportReport方法導出數據報表信息。導出格式包括HTML和文本。可以創建一個文件模板集合,以同ExportReport方法一起使用。這對於以多種格式(每種都報表類型剪裁)導出報表是很有用的。
5.異步操作——DataReport對象的PrintReport和ExportReport方法是異步操作。使用ProcessingTimeort事件可以監視這些操作的狀態,並取消任何花費時間過長的操作。
要創建一個報表,可以采取以下步驟:
*在“工程”菜單上,單擊“添加DataReport"。如果設計器不在“工程”菜單上,單擊“工程”菜單中的“部件”。再單擊“設計器”選項卡,選擇“DataReport"。
*設置DataReport對象的屬性。在“屬性”窗口上,單擊“數據源”,假如選擇“DSN_Funds"。然後單擊“DataMember"並選擇“用戶”。
*右鍵單擊數據報表設計器,並單擊“檢索結構”。則我們已經向報表設計器添加了一個新的分組。每一個分組都同數據環境中的Command對象有“一對一”對應關系;在這種情況下,新的分組與客戶的Command對象相對應。
*從數據環境設計器,把“所在部門"字段(在“用戶"命令下)拖到分組標頭(用戶_Header)部分。分組標頭部分可以包含“用戶”命令的任何字段,然而,出於演示目的,此時只顯示“用戶”名。
*刪除名為“Label1"的Label控件(rptLabel)。如果不希望Label控件包括在TextBox控件中,可以在數據環境設計器的“選項..."對話框的“字段映射”選項卡上撤消對“DragandDropFieldsCaption"選項的選擇。
*從數據環境設計器中,把“用戶名"、“注冊日期”、“口令”、“權限”字段拖到細節(Orders_Detail)部分。並刪除所有Label控件。細節部分表示最內層的“重復”部分,因而與數據環境層次結構(OrdersCommand對象)中最底層的Command對象相對應。
*重新調整數據環境設計器部分的大小。重新調整細節部分的高度,使它盡可能的矮是很重要的,因為高度將會與為每一個“部門”返回的細節(即“用戶名”、“注冊日期”、“口令”、“權限”)相乘。細節部分的文本框下面或上面的任何多余位置將在最後的報表中導致不必要的空間。
*保存工程。
VisualBasic6.0與以前版本的最大不同之處就是在數據庫功能上有一個更大的提高。這也是微軟公司為加強其在企業開發工具地位上的重要內容。應該說,在開發大中型企業應用軟件上,VisualBasic6.0的確是最強的軟件之一。相信大家在不斷使用過程中會有更深的體會。->