前言
VB对数据库编程有多种思路方法如:ODBCAPI编程、RDO(远程数据对象)、DAO(数据访问对象)、ADO(ActiveX数据对象)思路方法编程实现方便、快捷但灵活性稍差由于存储过程具有实现数据封装、隐藏以及代码预编译、减少网络负载、维护方便等优点所以被许多RDMBS和编程工具做支持VB中各类数据对象均都提供对存储过程支持所以要灵活掌握存储过程这技术是十分必要现在将VB中实现动态含DateTime类型存储过程介绍给读者,让您很快掌握和运用这个思路方法,解决你身边问题
、简述SQLServer2000日期时间类型(含dateTime类型字段)
该类型是由有效日期或时间组成;年-月-日小时:分:秒.千分的秒其格式:
请见图示1
在现阶段开发设计ERP系统项目中尤其在创建数据库表结构时均要考虑到DateTime字段应用它能记载信息发生时间段信息能充分反映该区间数据变化;除特殊情况下(如:网吧、游戏吧等需记录小时、分、秒)的外般要考虑到日期范围即:[年、月、日]
2、我们以ADO为例来介绍说明其实现步骤
现在动态含有DateTime字段存储过程以帮助理解和掌握存储过思路方法:
1>、使用NorthwindMSSQL中例子库(此例子SQLServer2000自带)
Createprocedure"EmployeeSalesbyCountry"
@Beginning_DateDateTime,@Ending_DateDateTimeAS
SELECTEmployees.Country,Employees.LastName,Employees.FirstName,
Orders.ShippedDate,Orders.OrderID,"OrderSubtotals".SubtotalASSaleAmount
FROMEmployeesINNERJOIN
(OrdersINNERJOIN"OrderSubtotals"ONOrders.OrderID="OrderSubtotals".OrderID)
ONEmployees.EmployeeID=Orders.EmployeeID
WHEREOrders.ShippedDateBetween@Beginning_DateAnd@Ending_Date
GO
2>、在VB中生成个新工程工程添加个窗体 3个Command(1,2,3)按钮个ListViewControl控件两个日期DTpickerControl控件两个标签LabelControl控件个文本TextBoxControl控件
请见图示2
3>、编程设计思路
基于SQLServer数据库表结构定义DateTime类型特点我们采取截取有效日期部分实现对这个含有DateTime字段存储过程动态具体步骤如下:
①.定义:DimDt10,DT20asVariant
②.采集动态日期赋值于以上两个变量中
DT10=Format(Trim(DT1.Value),"yyyy-mm-dd")
DT20=Format(Trim(DT2.Value),"yyyy-mm-dd")
具备以上条件可快捷、方便地获取动态日期区间内数据表结果集
下面就严格执行存储过程语法格式就可以了请详见VB代码 4>、VB代码实现动态 3种思路方法
①.窗体变量设置
OptionExplicit
DimCNN1AsADODB.Connection’连接
DimRSAsADODB.Record’结果集
DimStrCnnAsString’连接串
DimDT10,DT20AsVariant’日期变量
DimiAsInteger’字段计数
②.[基本格式]存储过程
PrivateSubCommand1_Click’以[基本方式](1)存储过程
OnErrorResumeNext
DimCmdAsADODB.Command’命令
DimParAsADODB.Parameter’参数
’声明并化个ADOConnection对象
DT10=Format(Trim(DT1.Value),"yyyy-mm-dd")’起始日期赋值
DT20=Format(Trim(DT2.Value),"yyyy-mm-dd")’截止日期赋值
SetCmd=NewADODB.Command’指定cmd当前连接CNN1
Cmd.ActiveConnection=CNN1
’指定该cmd当前活动连接
’设置要执行是存储过程"[EmployeeSalesbyCountry]"
Cmd.CommandType=adCmdStoredProc’表明cmd为存储过程
Cmd.CommandText="[EmployeeSalesbyCountry]"’存储过程名称
SetPar=Cmd.CreateParameter("Beginning_Date",adDBDate,adParamInput,,DT10)
Cmd.Parameters.AppendPar
SetPar=Cmd.CreateParameter("Ending_Date",adDBDate,adParamInput,,DT20)
Cmd.Parameters.AppendPar
SetRS=Cmd.Execute
’在ListviewControl控件中显示RstByQuery记录集有效行
IfDT10<DT20Then’网格条件
IfRS.Fields.Count>0Then’确认字段列数
i=RS.Fields.Count
ListrecRS,LV
RS.Close
EndIf
EndIf
EndSub
③.[简捷格式]存储过程
PrivateSubCommand2_Click’以[简捷方式](2)存储过程
OnErrorResumeNext
DT10=Format(Trim(DT1.Value),"yyyy-mm-dd")
DT20=Format(Trim(DT2.Value),"yyyy-mm-dd")
SetRS=CNN1.Execute("[EmployeeSalesbyCountry]’"&DT10&"’,’"&DT20&"’")
IfDT10<DT20Then
’在ListviewControl控件中显示RS记录集有效行
IfRS.Fields.Count>0Then
i=RS.Fields.Count
ListrecRS,LV
RS.Close
EndIf
EndIf
EndSub
④.[数据集格式]执行存储过程
PrivateSubCommand3_Click’以执行[结果集方式](3)存储过程
OnErrorResumeNext
DimSql1AsString
DT10=Format(Trim(DT1.Value),"yyyy-mm-dd")
DT20=Format(Trim(DT2.Value),"yyyy-mm-dd")
SetRS=NewRecord
’对字段进行中文提示处理
Sql1="SELECTEmployees.Countryas’国别’,Employees.LastNameas’姓名’,Employees.FirstNameas’曾用名’,
Orders.ShippedDateas’日期’,Orders.OrderIDas’序号’,[OrderSubtotals].SubtotalAS’销售合计’FROM
EmployeesINNERJOIN(OrdersINNERJOIN[OrderSubtotals]ONOrders.OrderID=[OrderSubtotals].OrderID)
ONEmployees.EmployeeID=Orders.EmployeeIDWHEREOrders.ShippedDateBetween’"&DT10&"’AND’"&DT20&"’"
IfLen(Sql1)>0Then
RS.OpenSql1,CNN1,adOpenStatic,adLockOptimistic
’在ListviewControl控件中显示RstByQuery记录集有效行
IfRS.Fields.Count>0Then
i=RS.Fields.Count
ListrecRS,LV
RS.Close
EndIf
EndIf
EndSub
⑤.将结果集装入到ListViewControl控件中
SubListrec(ByRefRSAsRecord,ByRefLVAsListView)
DimheadAsColumnHeader
DimItemAsListItem
DimK,P,QAsInteger
K=0
’化listview某些属性
LV.ToolTipText=""
LV.View=lvwReport
LV.GridLines=True
LV.LabelEdit=lvwManual
LV.ListItems.Clear
LV.ColumnHeaders.Clear
Fori=0ToRS.Fields.Count-1
’由于item.text不接受null,故预先于空串作连接
Sethead=LV.ColumnHeaders.Add
head.Text=RS.Fields(i).Name
Next
WhileNotRS.EOF
SetItem=LV.ListItems.Add
Item.Text=""&RS.Fields(0).Value
Fori=1ToRS.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)
EndSub
⑥.工程\\引用和连接SQLServer数据库
*本文使用ADO需要引用”MicrosoftActiveXdataObjects2.6Library”对象
*连接SQLServer2000数据库
PrivateSubForm_Load’在窗体LOAD事件中加入如下代码:
SetCNN1=NewADODB.Connection
’使用Connection对象StrCnn属性,直接指定连接SQLServer数据库
StrCnn="Provider=SQLOLEDB;DataSource=NO1;UserID=sa;pwd=;InitialCatalog=Northwind"
CNN1.OpenStrCnn’打开连接
结束语
现已将VB中实现动态含DateTime类型存储过程介绍完毕为您提供了解决存储过程又途径愿您在掌握SQLServer2000数据库存储过程这技术中畅通无阻马到成功
本环境是Win2000中文网络版;SQLServer2000专业版;中文VB6.0
最新评论