学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> VB >> VB实现动态调用含DateTime类型存储过程


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自带)

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。
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还不错,值得研究、研究。
...
游客 发表于2008-4-4 14:03:39
对"VB实现动态调用含DateTime类型存储过程"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 VB实现动态调用含DateTime类型存储过程 相关内容
Google搜索中 VB实现动态调用含DateTime类型存储过程 相关内容
雅虎中 VB实现动态调用含DateTime类型存储过程 相关内容
Sogou搜索中 VB实现动态调用含DateTime类型存储过程 相关内容

相关软件 最新回复帖子:

·VB实现动态调用含DateTime类型存储过程
·AutoCAD造型实例:十字形螺丝刀头
·史上最小 55MB的Win XP现在就能下载
·DW Ultradev打造留言本(一)
·DW Ultradev打造留言本(二)
·AutoCAD初学者如何有效提高绘图速度
·nesox让电子邮件营销原来如此轻松!
·Photoshop通道巧为美女照片做甜美特效
·AutoCAD拉伸命令快速绘制立体五角星
·利用AutoCAD拉伸面命令绘制哑铃


  相关软件 VB实现动态调用含DateTime类型存储过程相关文章
VB+Access设计图书管理系统 如何用Visual Basic编写病毒
用VB6.0在Vista下实现全磨砂玻璃窗口 VB中调用MSN 6.2 API函数
Visual Basic中实现带预览的对话框 VB访问SQL Server数据库技术全揭密
用Visual Basic实现点对点通讯 Visual baisc中Byval与Byref的区别
VB6.0中Dir()函数的使用方法 VB中使用WinSock控件编写网络程序
VB程序中用ADO对象动态创建数据库和表 掌握VB中的ADO数据对象编程
用VB6.0实现网络实时监控系统 Visual Basic6.0事件机制分析
好文回顾:Visual Basic 十年风云 对VB6的后期绑定和前期绑定的一点看法
用VB设计“投票评选”程序的简单方法 用VB备份和恢复SQL Server数据库的方法
利用Visual Basic开发SAP接口程序初探 在VB环境中操作三维模型的实现方法