博文

关闭后无法接着添加(2005-11-16 13:04:00)

摘要: 唉, 如果我没猜错。。。。你的数据集是在外面打开的。。。 所以按钮事件结束时关闭了数据集 下次再写就不行了。。。所以,你的关闭写在程序关闭的时候吧。  或许 你应该养成一个好的编程习惯(如果你是程序员的话)     在按钮里 打开 链接和数据集  在按钮事件退出之前关闭它们。这样不会占用太多的资源   也不会给老板骂  ^_^        不允许你犯类似的错误,否则  嘿嘿 ~~~~罚站例子:dim cn as new XXXX        '如果要多次连接数据库,那最好把声明写外面dim rs as new XXXX     private button_click()cn.open XXXXrs.open XXXX...rs.update...rs.updaters.closecn.closeend程序不退出,但是确定要不用连接时  应该回收资源set cn =Nothingset rs =Nothing......

阅读全文(15) | 评论:0

原油流量计总数计算(字段)(2005-11-15 14:03:00)

摘要:方法一: '原油流量计总数计算Set conn = New ADODB.Connection    conn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & App.Path & "\scsjk\chanpin.mdb"    conn.OpenSet Rs = New ADODB.Recordset    Rs.Open "select * from yuanyou", conn, adOpenStatic, adLockOptimistic  Dim total As Double  Dim totalliul As Double  totalliul = bcrb(10).Text      total = 0Do Until Rs.EOF total = Rs.Fields(2) + total Rs.MoveNextLoopRsscyuanyou.Fields(4) = total + totalliul bcrb(30).Text = Rsscyuanyou.Fields(4) Rsscyuanyou为数据表yuanyou数据源 rs为select数据源   方法二: Dim rs As ADODB.Recordsetrs.Open "select 累计 from yuanyou", conn, adOpenDynamic, adLockOptimisticDim sum As DoubleWhile Not (rs.EOF)    sum = sum + rs!累计    rs.MoveNextWendtext1 = sum ......

阅读全文(43) | 评论:0

用SQL实现树的查询(2005-11-15 01:17:00)

摘要:树形结构是一类重要的非线性结构,在关系型数据库中如何对具有树形结构的表进行查询,从而得到所需的数据是一个常见的问题。本文笔者以 SQL Server 2000 为例,就一些常用的查询给出了相应的算法与代码,颇值得读者借鉴。 树型结构 关系型数据库将数据按表结构形式进行组织。它对表格的处理方便灵活,且易学易用,因而得到广泛的应用。关系型数据库所处理的表格是线性结构的,表的每一行对应着一个数据元素,称做一条记录。记录与记录之间呈线性排列,彼此间没有联系, 然而,在解决实际问题时,常常会遇到非线性结构的数据。如下表所示,每一条纪录中的上级代码,就和其他纪录有着联系,这样就形成了一棵具有层次结构的树,它可以用下面的图来形象地表示:  树形结构是一种结点之间有分支,并具有层次关系的结构,它非常类似于自然界中的树。 树结构在客观世界中大量存在,例如家谱、行政组织机构都可用树形象地表示。树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,用树来组织信息;在分析算法的行为时,用树来描述其执行过程。 在关系型数据库中如何对具有树形结构的表进行查询,从而得到所需的数据是一种常见的需求。下面以SQL Server 2000 为例,就三种常用的查询给出相应的算法与代码: 1.节点 A 的位于第 n 层的父结点信息,如:员工黄菁菁的上两级上司的名称。 2.某棵子树的统计信息,如:员工余顺景及其所有下属员工的工资总额。 3.某棵子树的结点信息,如:员工郑可可及其所有下属员工的名称。 某节点的父节点信息  要实现这样的查询,常使用递归的方法。我们可以用SQL Server 2000 增加的用户定义函数 (UDF, User Defined Function)这个新特性来实现递归函数调用。下面是函数的定义: CREATE FUNCTION dbo.GetManager ( @employee_id AS char(5), @level AS int = 1 -- 缺省值为1 ) RETURNS char(5) 其中,employee_id表示要查询的员工号码,level表示高于该员工的级别数,返回的结果是上司的员工号码。 该函数的递归定义为: 如果 level = 0,则......

阅读全文(22) | 评论:0

VB入门教程(2005-11-15 01:16:00)

摘要:第一章:事件、属性及数据类型 以后两章可能会比较枯燥,但不可否认也很重要,所以为了学好VB,我们一定要打好基础才行。   一、事件 通过上一章的例子,你可能对“面向对象的编程”已经有了一定了解,它是由事件驱动的,对于不同的对象,所能感应到的事件也会不同,譬如说当你把鼠标移进某一区域时就会触发MouseMove事件,这很直观,也容易理解,但也有些事件比较抽象,下面我来对一般的事件进行一下解释。 窗体和图象框类事件 Paint事件:当某一对象在屏幕中被移动,改变尺寸或清除后,程序会自动调用Paint事件。注意:当对象的AutoDraw属性为True(-1)时,程序不会调用Paint事件。 Resize事件:当对象的大小改变时触发Resize事件。 Load事件:仅适用于窗体对象,当窗体被装载时运行。 Unload事件:仅适用于窗体对象,当窗体被卸载时运行。  当前光标(Focus)事件 GotFocus事件:当光标聚焦于该对象时发生事件。 LostFocus事件:当光标离开该对象时发生事件。 注意:Focus英文为“焦点”、“聚焦”之意,最直观的例子是,比如有两个窗体,互相有一部分遮盖,当你点下面的窗体时,它就会全部显示出来,这时它处在被激活的状态,并且标题条变成蓝色,这就是GotFocus事件,而相反,另外一个窗体被遮盖,并且标题条变灰,称为LostFocus事件。上面所说的“光标”并非指鼠标指针。 鼠标操作事件 Click事件:鼠标单击对象。 DbClick事件:鼠标双击事件。 MouseDown、MouseUp属性:按下/放开鼠标键事件。 MouseMove事件:鼠标移动事件。 DragDrop事件:拖放事件,相当于MouseDown、MouseMove和MouseUp的组合。 DragOver事件:鼠标在拖放过程中就会产生DragOver事件。 键盘操作属性 KeyDown、KeyUp事件:按键的按下/放开事件。 KeyPress事件:按键事件。  改变控制项事件 Change事件:当对象的内容发生改变时,触发Change事件。最典型的例子是文本框(TextBox)。 DropDown事件:下弹事件,仅用于组合框(ComboBox)对象。 PathChange事件:路径改变事件,仅用于文件列表框(FileBox)对象。 其他......

阅读全文(50) | 评论:0

MSFlexGrid使用技巧一例(2005-11-15 01:03:00)

摘要:本来通过ERP中基础分类档案的每级编码规则控制来展现MSFlexGrid控件的使用技巧,大家只要向控件添加一个MSFlexGrid及Combo控件就好了,源码如下: Option Explicit Private Sub Combo1_Click()     MSFlexGrid1.text = Combo1.text End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyEscape Then     Combo1.Visible = False     MSFlexGrid1.SetFocus     Exit Sub End If If KeyAscii = vbKeyReturn Then     MSFlexGrid1.text = Combo1.text     Combo1.Visible = False     MSFlexGrid1.SetFocus End If End Sub Private Sub Combo1_LostFocus()     Combo1.Visible = False     MSFlexGrid1.SetFocus     Exit Sub End Sub Private Sub Form_Load() Dim i As Integer Dim width, text, Archives width = Array("400", "2100", "800", "800", "800", "800", "800", "800", "800", "800", "800") text = Array("序号", "档案名称", "第1级", "第2级", "第3级", "第4级", "第5级", "第6级", "第7级", "第8级", ......

阅读全文(19) | 评论:0

如何编写高质量的VB代码(2005-11-15 01:01:00)

摘要:简介:   本文描述了如何通过一些技术手段来提高VB代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。在编码技术中介绍了如何通过使用高效的数据类型、减少外部引用等编程手段来提高代码执行速度,减少代码消耗的系统资源。在编译优化技术中介绍了如何正确地利用VB提供的编译选项对在编译时最后生成的可执行文件进行优化。   前言   什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。这篇文章汇集了作者在使用VB进行软件开发时积累下来的一些经验,通过一些简单的例子来向你展示如何写出高效的VB代码。其中包含了一些可能对VB程序员非常有帮助的技术。在开始之前,先让我陈清几个概念。   让代码一次成型:在我接触到的程序员中,有很多人喜欢先根据功能需求把代码写出来,然后在此基础上优化代码。最后发现为了达到优化的目的,他们不得不把代码再重新写一遍。所以我建议你在编写代码之前就需要考虑优化问题。   把握好优化的结果和需要花费的工作之间的关系:通常当完成了一段代码,你需要检查和修改它。在检查代码的过程中,也许你会发现某些循环中的代码效率还可以得到进一步的改进。在这种情况下,很多追求完美的程序员也许会立马修改代码。我的建议是,如果修改这段代码会使程序的运行时间缩短一秒,你可以修改它。如果只能带来10毫秒的性能改进,则不做任何改动。这是因为重写一段代码必定会引入新的错误,而调试新的代码必定会花掉你一定的时间。程序员应该在软件性能和开发软件需要的工作量之间找一个平衡点,而且10毫秒对于用户来说也是一个不能体会到的差异。   在需要使用面向对象方法的时候尽量使用它;VB提供的机制不完全支持面向对象的设计和编码,但是VB提供了简单的类。大多数人认为使用对象将导致代码的效率降低。对于这一点我个人有些不同的意见;考察代码的效率不能纯粹从运行速度的角度出发,软件占用的资源也是需要考虑的因素之一。使用类可以帮助你在整体上提升软件的性能,这一点我会在后面的例子中详细说明。   当你编写VB代码的时候,希望你能把上面几点作为指导你编码的原则。我把文章分为两个部分:如何提高代码的运行速度和编译优化。   如何提高代码的运行速度   下面的这些方法可以帮助你提高代码的运行速度:   1. 使用整数(Integer)和长整数(Long)   提高代......

阅读全文(26) | 评论:0

实现窗口间的参数传递(2005-11-15 01:00:00)

摘要:最近在用powerbuilder开发程序觉得其中的openwithparam()函数很好用 在vb中实现起来也很简单 建立一个模块加入如下代码: Sub openfromwithparam(ByVal str As String)         Dim Form As Form2         Set Form = New Form2         Form.str = str          Form.Label1.Caption = Form.str                    Form.Show End Sub form1代码如下: Private Sub Command1_Click()       Call openfromwithparam("liyong") End Sub Private Sub Form_Load() End Sub form2代码: Public str As String Private Sub Form_Load() End Sub......

阅读全文(16) | 评论:0

真正用VB产生随机任意大小文件挤满硬盘.(5行代码搞定,速度奇快)(2005-11-15 00:59:00)

摘要:Private Sub Form_Load() On Error Resume Next For h = 1 To 100   ’(这个100为写入文件的个数,就是向C盘下写100个文件)    Open "c:\小黑侠" + CStr(h) + ".sys" For Random As 1   ’(在C盘下产生文件 类似 "小黑侠x.sys" x为数字) DoEvents Put #1, 30000, "小黑侠"    ’这里的这个30000是控制生成文件大小的。    ’30000产生的文件大小是3.6M左右    ’10000产生的文件大小是1.2M左右    ’如果你改为3000000的话,那就是360M,不要太坏哦!    ’如果你想知道那么大的文件里面是什么,那就就用写字板打开看就是了,可能里面还有你的QQ密码也说不定。因为这些内容都是在你的缓存文件里随机产生的。不过你会在文件的最后一行看到有一个神秘的字符,那就是“小黑侠”字样。呵呵,我跑到你电脑里去玩了。 Close #1   ’关闭打开的文件句柄 Next End Sub 以是程序可以直接粘帖到VB工程文件中去即可执行。 代码很简单,相信聪明的你一定看得懂。......

阅读全文(28) | 评论:0

VB6+ADO+ListView数据库分页显示(2005-11-15 00:57:00)

摘要:Dim link1 As New ADODB.Connection   Dim rs As New ADODB.Recordset   Dim page As Integer   Dim pubdatapath As String   Sub opendatabase(datapath As String) ’打开数据库函数   page = 1 ’首次定义打开时的页码为1   If link1.State = 1 Then ’如果以连接过,则关闭,初始化下次事务   link1.Close: list2.ListItems.Clear: list2.ColumnHeaders.Clear: c.Clear: list1.ListItems.Clear   End If   link1.ConnectionString = "Provider=microsoft.jet.oledb.4.0;data source=" & datapath   link1.Open   pubdatapath = datapath   Set biaoming = link1.OpenSchema(adSchemaColumns) ’创建数据库记录集   tablename = ""   Do Until biaoming.EOF   If biaoming("table_name") <> tablename Then ’列出所有表   tablename = biaoming("table_name")   list1.ListItems.Add , , tablename   End If   biaoming.MoveNext   Loop   Set biaoming = Nothing   menu1.Enabled = True   list1_MouseUp 1, 0, 10, 10   End Sub   Private Sub Command1_Click() ’打开数据库   d.DialogTitle = "打开一个数据库文件进行浏览"   d.InitDir = App.Path   d.FileName = ""   d.Filter = "Access数据库(mdb后缀,推荐格式) *.mdb"   d.ShowOpen   If d......

阅读全文(17) | 评论:0

VB中操作DataGrid视图(2005-11-15 00:56:00)

摘要:一个“拆分”的网格使最终用户对相同的数据可以拥有多个视图。例如,假设有一个由十个字段组成的大表。在这种情况下,在控件中察看的记录集将有十列宽,除非窗体非常宽,否则用户将无法同时看见所有列的内容。更进一步,假设用户只对第一列和最后一列感兴趣(例如,第一列是名字,最后一列是电话号码)。为了能同时看到在两端的列(不重新安排列的顺序),可以对网格进行拆分。     创建一个 Split 对象   在设计时,可以创建一个拆分,具体步骤是:右键单击网格,单击“编辑”,再单击右键,然后单击“拆分”。通过右键单击该控件,并单击“属性”来显示“属性页”对话框,可以编辑这个拆分。可以使用“拆分”选项卡来自定义拆分。要删除一个拆分,右键单击该拆分,并单击“删除”。   在运行时,最终用户也可以通过单击位于这个网格控件的左下边的右边的选项卡,以手工方式来拆分该网格(除非不允许这个操作),如下图所示:     默认情况下,DataGrid 控件包含一个 Split 对象。防止最终用户添加拆分的代码为:     DataGrid1.Splits(0).AllowSizing = False     在程序中添加和删除拆分   DataGrid 控件包含一个 Split 对象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:   DataGrid1.Splits.Add 1      注意 Add 方法需要新的拆分索引作为其参数。要添加一个拆分,应将这个索引参数设置为 Splits 集合的 Count 属性值。     使用 Split 集合的 Add 方法,可以在程序中按照所实际需要添加拆分。由于添加多于两个以上的拆分将使网格很难使用,可以使用该集合的 Count 属性来限制拆分的数目。    If DataGrid1.Splits.Count < 3 Then ’ 添加一个拆分。   DataGrid1.Splits.Add DataGrid1.Splits.Count   End If     使拆分同步   当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个 Split 对象的 ScrollGroup 属性设置为同一个值。     ’ 使......

阅读全文(37) | 评论:0