Category Archive: Visual Basic 6.0

Oct 02

解决用 VB 中用 ADO 访问 Access 数据库时 SQL 查询处理 Null 值的问题

程序的环境是 VB6 + ADO + Access,在用 SQL 语句查询时,希望把两个字段合并成一个字段,但其中一个字段 Null 值直接导致两个字段合并后也变成了 Null 值。之前只能用 VB 中的 IsNull 分别处理两个字段的值,前段时间想尝试用 SQL 语句直接解决,确一直未能成功, 差点放弃之际找到了答案,总结如下: 目的: 实现 Select ( 字段1 +  字段2 ) As A 问题: 字段2 如果为空值 (Null),则 不论字段1 的值是否为空,A 的值为空值 (Null) 解决: 1、在 Access 中,可使用 Nz(字段, 为空时的值) 来处理 2、在 VB6 + ADO + Access 中,则使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理

Sep 11

解决 ADO 打开 RecordSet 的 80004005 错误

整整折腾了一天,终于搞定了 ADO 的 80004005 错误,特写出来做个分享。 错误描述: 在程序中使用 ADO 对象连接 Access 数据库进行查询时,Recordset 的 Open 方法 Select 查询报错,显示为 Run-time error ‘-2147467259(80004005)’: Method ‘Open’ of object ‘_Recordset’ failed 换用 Command 的 Execute 方法同样报错。 检查 Select 语句未发现错误,在 MDB 文件中测试 Select 语句一切正常,程序中其他使用同样方法的语句都运行正常,联机帮助没有相关问题说明。 错误解决: 在网上搜索了半天,有说是权限、连接设置等问题的,但对我的问题均没有帮助。最后在一个论坛的一条回复中注意到提问者自己修改了某个字段的名称后问题解决,突然想到是不是 ADO 对象有保留的关键字。我的 Select 语句涉及到 PositionID 和 Position 两个字段,将 Position 字段改名为 PositionName 后,问题解决。 结论: ADO 对象中有一些关键字,如果在 Select …

Continue reading »

Sep 03

如何在 VB6 中用代码按下 Toolbar 上的按钮

可用所需要按下按钮的名字和索引即可。如 Toolbar 控件的名字为 Toolbar1,需要按下的按钮的名字(Caption)属性为Test,索引(Index)属性是1,代码如下: 1. 用名字 ‘执行按下按钮对应的语句 Call Toolbar1_ButtonClick(Toolbar1.Buttons(“Test”)) ‘让按钮显示为按下状态 Toolbar1.Buttons(“Test”).Value = tbrPressed 2.用索引 Call Toolbar1_ButtonClick(Toolbar1.Buttons(1)) Toolbar1.Buttons(1).Value = tbrPressed

Feb 19

VarType 和 TypeName 函数

今天用 Visual Basic 6.0 ( SP6 ) 开发自动生成报表的模块 ( DAO 访问 ACCESS ) 时遇到一个问题,要把从数据库中读取的时间格式化成报表要求的格式,但因为数据库中的时间有日期和字符串两种类型,所以我想先获取数据的类型,再分别做相 应的调整。 首先想到的是用 TypeName 函数来返回数据类型,可奇怪的是,用 TypeName 得到的结果竟然全是 Field 类型,完全无法区分。本来想只好令想办法了,没想到改用 VarType 函数一试,竟然就得到了正确的结果,奇怪中! 在网上暂时没有搜到相关的资料,只知道 TypeName 和 VarType 在某些特定条件下会得到不同的结果,先记下一笔,回头再分析。

Aug 26

Unload 控件出现 Run-time error ’365′

“根据不同的选项,自动调整程序界面的布局。”——自己觉得是个不错的想法,但是辛辛苦苦写完代码,运行时却出错了! 程序的大致设想是通过 ComboBox 控件选择不同的工作项目,用 Label 控件显示出该工作项目的主要工作流程。用 Load 和 Unload 语句动态增减 Label 控件数组。大致语句如下: … Dim mintProjectIndex as Integer Private Sub cmbProject_Click() Dim lngCount as Long Dim i as integer lngCount = lblProcess.UBound If mintProjectIndex <> cmbProject.ListIndex Then For i = 1 to lngCount Unload lblProcess(i) Next End If End Sub … 运行,错误就出现了:Run-time error ’365′ Unable to …

Continue reading »

Oct 06

Visual Basic 6: 使用 ImageList 时遇到的两个问题

总是想让自己的软件看起来更漂亮一些,于是用 ListView 取代了 MsFlexGrid,为的就是可以在列表时显示图标,可是没想到一上来就遇到了两个问题。 问题一: ImageList must be initialized before it can be used 记住,如果想要在 ListView 或者 TreeView 中显示图标,一定要搭配 ImageList 使用,并且必须在设计时,在 ListView 或者 TreeView 的属性中设置想关联的 ImageList。如果忘了做这个步骤,就会出现 ImageList must be intialized before it can be used 的错误提示。 问题二: Invalid key 在向 ImageList 添加图片时,我本想使用 ID 来作为 图片的 Key 值,但一编译系统就提示 Invalid key 错误,查阅资料后才知道,不能使用纯数字的字符串来作为 Key 值,这样只要稍微变通一下,比如加上一个字母,即可解决问题。