VB實現動態調用含DateTime類型存儲過程
前言
VB對數據庫的編程有多種方法,如:ODBC API編程、RDO(遠程數據對象)、DAO(數據訪問對象)、ADO(ActiveX 數據對象)方法編程實現方便、快捷,但靈活性稍差。由于存儲過程具有實現數據封裝、隱藏以及代碼的預編譯、減少網絡負載、維護方便等優點,所以被許多RDMBS和編程工具做支持。VB中的各類數據對象均都提供對存儲過程的支持。所以要靈活掌握調用存儲過程這一技術是十分必要。現在將VB中實現動態調用含DateTime類型的存儲過程介紹給讀者,讓您很快掌握和運用這個方法,解決你身邊的問題。
一、 簡述SQL Server 2000 日期時間類型(含dateTime類型字段)
該類型是由有效的日期或時間組成;年-月-日 小時:分:秒.千分之秒。其格式:
請見圖示1
在現階段開發設計ERP系統項目中,尤其在創建數據庫表結構時,均要考慮到DateTime字段的應用,它能記載信息發生時間段的信息,能充分反映該區間數據變化;除特殊情況下(如:網吧、游戲吧等需記錄小時、分、秒)之外,一般要考慮到日期范圍即:[年、月、日]。
二、 我們以ADO為例來說明其實現步驟
現在動態調用含有DateTime字段的存儲過程,以幫助理解和掌握調用存儲過方法:
1>、使用Northwind的MS SQL中的例子庫(此例子SQL Server2000自帶)
2>、在VB中生成一個新工程,工程添加一個窗體,三個Command(1,2,3)按鈕,一個ListView控件,兩個日期DTpicker控件,兩個標簽Label控件,一個文本TextBox控件。
請見圖示2
3>、編程的設計思路
基于SQL Server數據庫表結構定義DateTime類型的特點,我們采取截取有效日期部分,實現對這個含有DateTime字段的存儲過程動態調用,具體步驟如下:
①.定義:Dim Dt10,DT20 as Variant
②.采集動態日期賦值于以上兩個變量中
具備以上條件,可快捷、方便地獲取動態日期區間內數據表的結果集。
下面就嚴格執行調用存儲過程語法格式就可以了。請詳見VB的代碼。
4>、VB的程序代碼實現動態調用的三種方法
①. 窗體變量的設置
②. [基本格式]存儲過程的調用
③. [簡捷格式]存儲過程的調用
④. [調用數據集的格式]執行存儲過程
⑤. 將結果集裝入到ListView控件中
⑥.工程引用和連接SQL Server數據庫
結束語
現已將VB中實現動態調用含DateTime類型的存儲過程介紹完畢,為您提供了解決調用存儲過程又一途徑,愿您在掌握SQL Server 2000數據庫調用存儲過程這一技術中,暢通無阻,馬到成功。
本程序的環境是Win2000中文網絡版;SQL Server 2000專業版;中文VB6.0。
VB對數據庫的編程有多種方法,如:ODBC API編程、RDO(遠程數據對象)、DAO(數據訪問對象)、ADO(ActiveX 數據對象)方法編程實現方便、快捷,但靈活性稍差。由于存儲過程具有實現數據封裝、隱藏以及代碼的預編譯、減少網絡負載、維護方便等優點,所以被許多RDMBS和編程工具做支持。VB中的各類數據對象均都提供對存儲過程的支持。所以要靈活掌握調用存儲過程這一技術是十分必要。現在將VB中實現動態調用含DateTime類型的存儲過程介紹給讀者,讓您很快掌握和運用這個方法,解決你身邊的問題。
一、 簡述SQL Server 2000 日期時間類型(含dateTime類型字段)
該類型是由有效的日期或時間組成;年-月-日 小時:分:秒.千分之秒。其格式:
請見圖示1
在現階段開發設計ERP系統項目中,尤其在創建數據庫表結構時,均要考慮到DateTime字段的應用,它能記載信息發生時間段的信息,能充分反映該區間數據變化;除特殊情況下(如:網吧、游戲吧等需記錄小時、分、秒)之外,一般要考慮到日期范圍即:[年、月、日]。
二、 我們以ADO為例來說明其實現步驟
現在動態調用含有DateTime字段的存儲過程,以幫助理解和掌握調用存儲過方法:
1>、使用Northwind的MS SQL中的例子庫(此例子SQL Server2000自帶)
| Create procedure "Employee Sales by Country" @Beginning_Date DateTime, @Ending_Date DateTime AS SELECT Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount FROM Employees INNER JOIN (Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID) ON Employees.EmployeeID = Orders.EmployeeID WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date GO |
2>、在VB中生成一個新工程,工程添加一個窗體,三個Command(1,2,3)按鈕,一個ListView控件,兩個日期DTpicker控件,兩個標簽Label控件,一個文本TextBox控件。
請見圖示2
3>、編程的設計思路
基于SQL Server數據庫表結構定義DateTime類型的特點,我們采取截取有效日期部分,實現對這個含有DateTime字段的存儲過程動態調用,具體步驟如下:
①.定義:Dim Dt10,DT20 as Variant
②.采集動態日期賦值于以上兩個變量中
| DT10 = Format(Trim(DT1.Value), "yyyy-mm-dd") DT20 = Format(Trim(DT2.Value), "yyyy-mm-dd") |
具備以上條件,可快捷、方便地獲取動態日期區間內數據表的結果集。
下面就嚴格執行調用存儲過程語法格式就可以了。請詳見VB的代碼。
4>、VB的程序代碼實現動態調用的三種方法
①. 窗體變量的設置
| Option Explicit Dim CNN1 As ADODB.Connection '連接 Dim RS As ADODB.Recordset '結果集 Dim StrCnn As String '連接字符串 Dim DT10, DT20 As Variant '日期變量 Dim i As Integer '字段的計數 |
②. [基本格式]存儲過程的調用
| Private Sub Command1_Click() '以[基本方式]調用(1)存儲過程 On Error Resume Next Dim Cmd As ADODB.Command '命令 Dim Par As ADODB.Parameter '參數 '聲明并初始化一個ADO 的Connection對象 DT10 = Format(Trim(DT1.Value), "yyyy-mm-dd") '起始日期賦值 DT20 = Format(Trim(DT2.Value), "yyyy-mm-dd") '截止日期賦值 Set Cmd = New ADODB.Command '指定cmd的當前連接CNN1 Cmd.ActiveConnection = CNN1 '指定該cmd 的當前活動連接 '設置要執行的是存儲過程"[Employee Sales by Country] " Cmd.CommandType = adCmdStoredProc '表明cmd 為存儲過程 Cmd.CommandText = "[Employee Sales by Country] " '調用存儲過程名稱 Set Par = Cmd.CreateParameter("Beginning_Date", adDBDate, adParamInput, , DT10) Cmd.Parameters.Append Par Set Par= Cmd.CreateParameter("Ending_Date", adDBDate, adParamInput, , DT20) Cmd.Parameters.Append Par Set RS = Cmd.Execute() '在Listview控件中顯示RstByQuery記錄集有效行 If DT10 < DT20 Then '調用網格的條件 If RS.Fields.Count > 0 Then '確認字段的列數 i = RS.Fields.Count Listrec RS, LV RS.Close End If End If End Sub |
③. [簡捷格式]存儲過程的調用
| Private Sub Command2_Click() '以[簡捷方式]調用(2)存儲過程 On Error Resume Next DT10 = Format(Trim(DT1.Value), "yyyy-mm-dd") DT20 = Format(Trim(DT2.Value), "yyyy-mm-dd") Set RS = CNN1.Execute("[Employee Sales by Country] '" & DT10 & "' ,'" & DT20 & "'") If DT10 < DT20 Then '在Listview控件中顯示RS記錄集有效行 If RS.Fields.Count > 0 Then i = RS.Fields.Count Listrec RS, LV RS.Close End If End If End Sub |
④. [調用數據集的格式]執行存儲過程
| Private Sub Command3_Click() '以執行[結果集方式]調用(3)存儲過程 On Error Resume Next Dim Sql1 As String DT10 = Format(Trim(DT1.Value), "yyyy-mm-dd") DT20 = Format(Trim(DT2.Value), "yyyy-mm-dd") Set RS = New Recordset '對字段進行中文提示的處理 Sql1 = "SELECT Employees.Country as '國別', Employees.LastName as '姓名', Employees.FirstName as '曾用名', Orders.ShippedDate as '日期' , Orders.OrderID as '序號', [Order Subtotals].Subtotal AS '銷售合計' FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON Orders.OrderID = [Order Subtotals].OrderID) ON Employees.EmployeeID = Orders.EmployeeID WHERE Orders.ShippedDate Between '" & DT10 & "' AND '" & DT20 & "'" If Len(Sql1) > 0 Then RS.Open Sql1, CNN1, adOpenStatic, adLockOptimistic '在Listview控件中顯示RstByQuery記錄集有效行 If RS.Fields.Count > 0 Then i = RS.Fields.Count Listrec RS, LV RS.Close End If End If End Sub |
⑤. 將結果集裝入到ListView控件中
| Sub Listrec(ByRef RS As Recordset, ByRef LV As ListView) Dim head As ColumnHeader Dim Item As ListItem Dim K, P, Q As Integer K = 0 '初始化listview的某些屬性 LV.ToolTipText = "" LV.View = lvwReport LV.GridLines = True LV.LabelEdit = lvwManual LV.ListItems.Clear LV.ColumnHeaders.Clear For i = 0 To RS.Fields.Count - 1 '由于item.text不接受null ,故預先于空串作連接 Set head = LV.ColumnHeaders.Add head.Text = RS.Fields(i).Name Next While Not RS.EOF Set Item = LV.ListItems.Add Item.Text = "" & RS.Fields(0).Value For i = 1 To RS.Fields.Count - 1 Item.SubItems(i) = "" & RS.Fields(i).Value Next K = K + 1 RS.MoveNext Wend Text1.Text = "" Text1.Text = CStr(K) LV.ToolTipText = "有效記錄條數:" + CStr(K) End Sub |
⑥.工程引用和連接SQL Server數據庫
| * 本文使用ADO,需要引用”Microsoft ActiveX data Objects 2.6 Library”對象。 * 連接SQL Server 2000數據庫 Private Sub Form_Load() '在窗體的LOAD事件中加入如下代碼: Set CNN1 = New ADODB.Connection '使用Connection對象的StrCnn屬性,直接指定連接的SQL Server數據庫 StrCnn="Provider=SQLOLEDB;DataSource=NO1;UserID=sa;pwd=;Initial Catalog=Northwind" CNN1.Open StrCnn '打開連接 |
結束語
現已將VB中實現動態調用含DateTime類型的存儲過程介紹完畢,為您提供了解決調用存儲過程又一途徑,愿您在掌握SQL Server 2000數據庫調用存儲過程這一技術中,暢通無阻,馬到成功。
本程序的環境是Win2000中文網絡版;SQL Server 2000專業版;中文VB6.0。