十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
关于用户控件的使用,点虐 与v6环境下是有那么小小的区别。v6环境下的用户控件编写后可以直接使用,而在点虐 环境下,则需要先生成控件库(dll,应用程序扩展格式),然后再将这个控件库导入到点虐 编程环境的工具箱上方可使用。其具体方法如下(以VS 2010,Visual Basic点虐 为例):1、新建项目-Visual Basic-Windows-Windows 窗体控件库-键入控件库名称(默认为Usercontrol1)确定;2、设计你的用户控件,完成后按“F7”进行编译;3、在该解决方案目录下找到控件库扩展(默认为UserControl1.dll),确认项目已经生成。在上三项为控件库DLL的生成方式,下面是调用方式:4、新建项目-Visual Basic-Windows-Windows 窗体应用程序-确定;5、打开工具箱,以任意一个控件上点击右键-选择项-点虐 framework组件-浏览-定位到生成的控件库扩展-确定;6、在工具箱中找到新添加的用户控件,将其拖至窗体中进行设计。经测,在点虐 环境下编译的用户控件是通用的。也就是说使用Visual Basic点虐 编写的用户控件,也可以在C#工程里使用,反之亦然。这充分体现了点虐 语言的交互性,在我看来,点虐 下各种语言能力相当,它们都是作为一种中间语言,编译出中间代码。所以,在点虐 环境下,采用混合编程也未尝不是一样提高效率的一种可选的方式。
在楚雄州等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作按需开发,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,外贸网站制作,楚雄州网站建设费用合理。
数据库与文本文件返回数据的方法不同.如果把文本文件比作一个Textbox 的话,那么数据库更像是一个ListBox.使用文本文件时我们需要从整个Textbox中取出有用的信息,并进行处理,而Listbox则可以根据需要返回特定的某一项.
由于VB本身并不带有可以访问数据库的类,所以我们需要引用一个包含能访问数据库的类来使用数据库.这里我们采用ADODB,相比DAO和能访问数据库的API来说,它比DAO更灵活,更强大;而比起API,它更简单易用,更适合初学者.而Access数据库比起SQL,也相对简单了很多,且能够满足中小型应用程序的需要,所以我们在使用数据库时,选择了Access.
就像使用文本文件来存储数据一样,我们需要先设计好数据结构,只不过在设计Access数据库的结构时,我们需要用到其它的程序来进行详细的规划.建议采用的程序是office中的Access或VB自带的VISDATA.
当数据库设计好了以后,我们可以开始"数据库编程"了.
首先,我们需要引用ADO.具体的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Data Object *.* Library",这里的"*.*"是指的时ADO的版本号,一般来说,应用程序或ActiveX控件都具有向下兼容性,所以我们尽可能选择比较新的版本.以确保程序在能识别旧版本Access的同时,也能识别较新版本的Access.
然后我们需要在程序中创建一个对象.就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,我们才能够访问数据库.常用的对象有两个,Connection和Recordset.
创建这两个对象的具体方法是:
1.在引用后,使用New关键字,如
Private Conn As New ADODB.Connection
Private Reco As New ADODB.Recordset
2.在没引用时,用CreateObject创建对象:
Dim Conn,Reco
Set Conn = CreateObject("ADODB.Connection")
Set Reco = CreateObject("ADODB.Recordset")
创建了对象之后,下一步我们要做的就是打开数据库了.
先看下面的代码,可以成功的打开数据库.
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Main.mdb"
这句代码打开了D盘中的Main.mdb这个数据库.
Connection.Open方法的第一个参数是连接代码,它将传递给系统的数据库引擎.前半部分"Provider=Microsoft.Jet.OLEDB.4.0",它表示了数据库的类型.不同的数据库可能会不同.后半句"Source=d:\main.mdb"它表示了数据库所在的绝对路径.
打开数据库之后,还要打开表.假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码.那么看以下代码.
1.想返回"Users"中,[用户名]为"去年烟花"的[密码]
Recordset.open "Select 密码 From Users Where 用户名='去年烟花'",Connection,1,1
之后我们就可以把用户输入的密码进行比较,看是否允许登录.
If Recordset.eof and Recordset.bof then
Msgbox "用户不存在!",16
Else
If PassWord =Recordset("密码").value then
msgbox "登录成功!",64
Else
msgbox "密码错误!",32
End If
End If
Recordset.Close
2.假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来
Recordset.open "Select * From Users",Connection,1,1
这时,表已经被打开,我们就用以下代码把它显示出来.
Do whlie Not Recordset.eof
Print "用户名: " Recordset("用户名").value "密码: " Recordset("密码").value
Recordset.MoveNext
Loop
Recordset.Close
由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有.第一个参数是SQL语句.
Select [字段名] From 表名 [Where 条件]
这里的条件可以省略.且字段名也可以用"*"来代替所有字段.
需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中.因为(1)里并没有打开[用户名]字段,所以这一句Recordset("密码")就没有值存在,还有可能出错.
后面的条件,可以用"="、""、""等运算符.比如 "Where ID 32".(这里假设[ID]为数字型.)
这是打开的部分.第二个很重要的部分就是查询记录.
数据库它并不是把所有记录全部放到一个变量中备用的.而是以"当前记录"的形式来返回一个值.所以我们想从中找到有用的信息,就必须要对信息进行定位/筛选.
定位:
移动到下一条 Recordset.MoveNext
移动到上一条 Recordset.MovePrevious
移动到最后一条 Recordset.MoveLast
移动到第一条 Recordset.MoveFrist
移动到某一条 Recordset.Move Number
筛选:
Recordset.Find "条件"
如:[用方法(2)打开表之后]
Private Sub Command1_Click()
Recordset.Find "用户名=" "text1.text"
If Recordset.Eof True Then
Msgbox "该用户的密码是:" Recordset("密码").value,64
Else
Msgbox "未找到该用户的资料!",16
End If
End Sub
MoveNext 只有当Eof不为True时,才可用,否则发生错误.而MovePrevious刚是Bof不为True时....
而只要Eof 和 Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用.
Find 方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的.当在已打开的记录集中,找不到该记录时,Eof为True.找到则当前的值就是符合条件的记录.
第三个部分就是添加/修改记录.
修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了.
比如:[(修改密码)按方法(1)打开表之后]
Recordset("密码").value = "123456"
Recordset.Updata
需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效.
而添加记录则可以用以下代码来实现:
Recordset.addnew
Recordset("用户名").value = "Admin"
Recordset("密码").value = "Admin"
Recordset.Updata
这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法.
到这里就差不多了,最后说一下上面提到的几个方法.
Recordset.Open SQL语句,数据源,游标类型,打开方法
SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据
数据源就是一个打开之后的Connection对象.
去他妈的游标类型,填1就可以了 [偷笑ing]
打开方法对应了几个常数,具体哪几个可以从对象浏览器里看.
对应数值的意义:
1 只读 2 独占 3 可写 4 自已可写,别人可读
Connection.open 连接代码,服务器用户名,密码
这里的连接代码就不在多说了,服务器用户名,密码只有在连接远程数据库时才用到.
Visual Basic通用报表设计小结
本文对vb设计报表的方法作了一个小结,大家都知道,在VB平台下制作报表大致有两种选择:使用VB自带的Data Report控件和借助第三方软件。其中第三方软件比较著名的就是MS Excel和Seagate公司的CrystalReporter,以下就这三个方案进行详细的讨论。
1. Data Report控件
1.1 Data Report控件使用方法
由于是VB自带的控件,所以使用相对比较方便。使用方法是:首先在"工程"菜单下面选择"添加Data report"选项,这样Data Report控件就选入到了应用程序。
使用Data report的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。要使用数据绑定就必须要指定数据源,这里的数据源不是数据控件而是数据环境(Data Environment),选择"工程"菜单下面选择"添加Data Environment"选项就可以将数据环境添加进应用程序中。数据环境有两个重要的属性:Connection 和Command属性,前者是连接指定的数据库,后者连接指定的数据表,一旦这两者都设置成功之后,就可以把数据环境作为数据源了。只需要把Data report的DataSource属性设置为前面的数据环境对象以及把DataMember设置为数据环境对象的Command对象即可。
1.2 Data Report控件界面元素
完成了Data report控件的数据绑定工作之后就可以直接控制报表的制作与显示了。这里首先熟悉一下Data report控件的显示界面:
Data report控件一共有5个区组成,分别是报表头、页面头、细节区、页面注脚和报表注脚。报表头和报表注脚是用分别用于整个报表的最上部和最下部,它们将出现于整个报表的每一页,可以放置一些报表名称,时间之类的固定文本;页面头和页面注脚只能出现在当前页的最上部和最下部,也就是说它只能出现在当前页中,不出现在其他页面中,可以放置随页面变化的一些量比如页码等;而细节区就是用来进行实际显示的区域,它是我们最为关心的区域,通过在此区域内放置显示控件可以控制报表的实际显示输出。这里介绍一下放置文本框控件的使用方法,其实在绑定情况下只需要设置其DataMember和Datafield即可,前者用来指定数据表,可以设置为前面数据环境对象的Command对象,后者是指定数据段,即绑定的数据库的指定字段。这样不需要编写任何代码就可以实现报表的显示工作。
1.3 Data Report控件的打印功能
对于报表的打印可以直接使用Data report自带的打印功能,即可以实现简易的报表打印。不过为了实现比较复杂的打印功能,也可以通过程序控制的方法来进行。这里只是给出一个实现思路:首先需要制作一个按钮控件来显示"打印设置"的窗口,通过这个窗口用户可以设置打印的相关的参数,然后在实现打印的子模块中使用VB内嵌的printer对象来实现真实的打印,该对象能够对打印的当前位置进行定位,而且对打印的字体等参数进行控制,所以结合"打印设置"窗口可以实现类似于word里面的打印功能。
2.MS Excel
说起报表设计应用程序,无意微软的Excel是一支独秀,MS Excel就是用来进行表格和报表设计用的应用程序,它具有优秀的方格控制和宏代码定制功能。所以如果在设计自己的应用程序的时候能够结合到Excel的话,那么你的应用程序就应该是相当的完善了,因为无论是编辑还是打印功能,Excel都提供了很完美的解决方案,所以你的应用程序所要做的事情就是实现程序和Excel通讯即可。
事实上,可以使用VBscript可以将VB与Excel两者连接起来。以下就简要介绍在VB下开发基于Excel的编程思路。
在VB中处理Excel的对象大致分为五个:Application对象、WorkBook对象、WorkSheet对象、Range对象以及Cell对象。它们的功能分别如下:
Application---------用来指代整个应用程序。
WorkBook----------表示工作簿对象
WorkSheet---------表示工作表对象,注意,一个工作簿可以包含多个工作表,它们就类似于多文档中的框架窗口和里面的单个视图一样。
Range-------------表示工作表中的某个区域范围对象,特殊情况下也可以只代表一个Cell。
Cell---------------表示特定工作表的一个单元格对象。这个对象的使用频率是最高的。
清楚了以上的五个对象的应用范围,那么使用它们就很简单了,不过在使用这些对象之前,首先需要对它们进行声明。方法是在"工程"的"引用"对话框之下选择"Microsoft Excel9.0 Object Library",这样就将整个Excel对象库就引入到程序中来了。
下面举一个示例,其实现的功能是打开一个工作簿。
Function OpenBook(strFilePath As String) As Boolean
' This procedure checks to see if the workbook
' specified in the strFilePath argument is open.
' If it is open, the workbook is activated. If it is
' not open, the procedure opens it.
Dim wkbCurrent As Excel.Workbook
Dim strBookName As String
On Error GoTo OpenBook_Err
' Determine the name portion of the strFilePath argument.
strBookName = NameFromPath(strFilePath)
If Len(strBookName) = 0 Then Exit Function
If Workbooks.Count 0 Then
For Each wkbCurrent In Workbooks
If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then
wkbCurrent.Activate
Exit Function
End If
Next wkbCurrent
End If
Workbooks.Open strBookName
OpenBook = True
OpenBook_End:
Exit Function
OpenBook_Err:
OpenBook = False
Resume OpenBook_End
End Function
3.Crystal Reporter(水晶报表)
做为一个优秀的报表软件,水晶报表是实际应用中最多的方案。在这一节里主要介绍一下水晶报表的定制和显示,打印功能的实现。
首先要区分Crystal Reports插件程序和Crystal Reports控件。前者主要用来创建报表模板,后者主要是用来在程序中显示和打印报表,这两者的分工决定了它们程序中的功能的不同。
其中Crystal Reports的插件程序可以从Seagate公司的官方网站上下载最新的测试版本。
3.1 Crystal Reports插件程序的使用
选择"外接程序"菜单的"报表设计器"选项,则VB将执行Crystal Reports Pro插件应用程序。在Crystal Reports Pro里选择"新建报表"图标,可以选择8标准模板和一个自定义的模板来开始报表工程。
整个水晶报表的使用跟第一节的Data Report的使用很类似。首先需要给报表选择数据源,(即数据库),然后就可以在报表中添加、删除、修改字段以及为记录分组,可以利用水晶报表创建很多具有自定义风格的报表。由于本身Crystal Reports插件程序就是一个功能强大的报表设计软件,这里就不能一一的讲解了,有兴趣可以参考程序自带的帮助文档。
3.2 Crystal Reports控件的背景知识
Crystal Reports Pro还提供一个报表生成模块,该模块可以连接到并访问VB应用程序,VB程序员不需花费大量时间写自己的代码就可再应用程序中添加复杂的报表生成及输出功能。
Crystal Reports引擎是一个动态链接库,它可以使应用程序访问并具有同Crystal Reports 一样强大的报表输出功能。应用程序是通过Crystal Reports ActiveX控件来访问引擎。再编译时应用程序同报表引擎链接,以给应用程序添加了生成报表的功能。
当程序使用Crystal Reports ActiveX控件时,可以通过再设计时设置Crystal对象属性或者再运行时改变对象属性,来建立应用程序和Crystal Reports之间的连接。通过Crystal控件的属性可以指定:
响应应用程序某个事件的输出报表的名字。
报表的目标位置(预览窗口、磁盘文件或者电子邮件等)。
想要打印的份数(如果报表提交给打印机的话)。
输出文件的信息。
预览窗口的大小及位置信息(如果报表在预览窗口中显示时)。
选择公式信息(如果在报表中限制记录的话)。
排序信息。
其他相关的属性。
这里要注意一点的是,Crystal控件必须在由Crystal Reports Pro创建的报表中使用,而试图在VB应用程序里引用之前,必须首先创建报表。
3.3 Crystal Reports控件的使用
了解了Crystal Reports控件的功能,那么就可以使用它了。首先通过"工程"的"部件"选项里面选择"Crystal Reports Control",那么VB的工具箱里面就添加了Crystal Reports控件了。
注意,对于Crystal Reports控件的最重要的属性就是ReportFileName了,把它设置为前面已经在Crystal Reports Pro里定制好的报表模板的文件路径。那么只需要调用控件的PrintReport方法就可以将报表显示出来了。
相对于Data Report控件来说,Crystal Reports控件的功能更加的完善,报表预览,打印,编辑修改等功能都很完善,所以在实际的报表应用设计方案中,使用Crystal Reports的相对较多。然而Crystal Reports控件也有它的局限性,即它不能在运行时创建自定义的窗口。可以使用控件的数据绑定属性来创建数据绑定报表,但是报表本身的格式都是由Crystal Reports控件内部进行处理的。一般说来,Crystal Reports控件不提供在程序中对报表字段级的访问。这一缺陷可以通过设计出足够多的报表来弥补。
4.其他方法
除了通过上述的三种方法来实现报表设计以外,当然也可以直接利用Win32 API来进行直接进行设计,这种方式是最为灵活也是最为繁琐的方式,因为所有的编辑、修改、打印等功能都是由程序控制,所以一般情况下不会使用这样的方式来处理,这里就不介绍了。
5.小结
报表设计是程序员经常要遇到的问题,本文主要介绍目前主流的报表设计方案,由于所涉及到的知识点比较多,限于篇幅,在这里只是作了简要的介绍,希望可以起到抛砖引玉的作用。
比如WebBrowser1 ,它必须引用部件MicroSoft Internet Controls
部件列表是能看见,但是确认引用时,会提示文件未找到
在我亲自遇到的原因就是,我使用了XX安全上网助手,IE浏览器是“委托”它保护,所以它修改注册表内容,把路径指向一个不存在的地点。让其他病毒、木马找不到这个文件做破坏的动作。
但是也发生了,你自己的程序要引用的时候,也是找不到这个文件。
你引用时候,留意底下提示的路径+文件值,那是从注册表提取的,分析那个路径,去系统全盘查找一下真正的文件放在哪儿,再进入注册表相对位置修改即可。
(但是很快的,会被保护它的进程发现,又改回了新的不实际的路径)