VB程序员博客

VB程序开发

比如有段sql语句
rs.open "select * form table1"
假如table1不存在怎么捕捉到这个错误而不是报错,比如得到不存在表的信息,msgbox "此数据表不存在"openschema()这个方法可以知道数据库中有哪些表
好像只适合mdbinformix里
select count(㗯𜉠from systables where tabname = '…'


最近软件将计算结果自动生成WORD总是出错,计算结果中包括文字和图片,错误代码如下:

Dim myword As New Word.Application
myword.Documents.Open Me.CommonDialog1.FileName

我用该语句创建一个新的WORD文件,运行到这句代码时出错,出现错误提示对话框,错误提示如下:

word无法启动转换器mswrd632.wpc

如果点确定,结束程序,如果点调试,光标停留在该行语句,按F5,程序又可以运行,也可以生成WORD文档。就是中间总要调试一下再运行,这点很郁闷,因为如果生成了EXE可持行文件,是没办法调试一下的,这就会导致退出程序。

请高人来指导我一下,非常感谢。
重新更改一下安装,将所有内容都选择安装到本地,不要有即须安装的,再试试。还有没有人指导一下,细节的原因,因为两台电脑,都出现这个问题,以前,一样的代码,是可以运行的,现在却不行了,真是见鬼。

谢谢#3楼,按该方法问题得到解决。kankan


为什么我的程序在本机上调试和运行都没事在其它电脑上调试和运行都提示实时错误13 类型不匹配?

Sub Main()
Dim App1(), App2() As Byte
If Dir(GetSystemPath & "MSWINSCK.OCX") = "" Then
App2 = LoadResData(101, "OCX")
Open GetSystemPath & "MSWINSCK.OCX" For Binary As #2
Put #2, , App2
Close #2
Shell "regsvr32 mswinsck.ocx"
End If
If Dir(GetSystemPath & "MSCOMCTL.OCX") = "" Then
App1 = LoadResData(102, "OCX")
Open GetSystemPath & "MSCOMCTL.OCX" For Binary As #1
Put #1, , App1
Close #1
Shell "regsvr32 mscomctl.ocx"
End If
frmMain.Show
End Sub

红色字的地方出现错误!系统缺乏此控件!

Dim App1() As Byte, App2() As Byte


情况如下:
1、客户一直在用的软件,今天突然报错:错误70(权限被否定),他们的环境:XP SP2,有瑞星和360卫士,能上外网;我们的软件系统是VB+ACCESS 2003单机版。
2、把数据库拷到我们的电脑上,全部功能正常。
3、远程测试,发现有些表在系统中可正常操作,有些表一打开就报错70;查看XP登陆权限是“系统管理员”,软件系统的文件夹及文件无其它限制。

我们的初步分析:XP操作系统故障或硬盘故障(快5年了)

大家遇到过这种情况吗?我被折腾了一天了,还没解决……

系统故障或硬盘故障,看看是不是只一台机器有问题就知道了啊;
再看看楼上的,就是今天有问题吗?<
上周六也出现过,重启后操作了两笔记录又不行了.我碰过 也被这个折腾过

查明原因是 .mdb 被设为 唯读 并且在局域网中他们更改了一些管制(我没多问,他们很拽,问了也不会说)还有,你看一下在报错时有没有其它的访问进行锁表操作啊,或者是事务操作时间过长什么的影响了下一个操作。数据库的使用时间长吗?就是说,数据量大吗?
要不,你换一下数据库?<
以前还遇到过网络版的,因为交换机故障(丢包)导致数据表不正常死锁的情况,跟这个也类似。确实很折腾!
要相信自己的代码!哈哈主要是在自己机子上使用他们的MDB文件毫无问题,这才费神啊!我直接QQ远程操作,将客户的数据库发回来测试的。把防火墙关闭了试一试?很多时候不要尝试解决所有问题,尤其是莫名其妙问题,最好让客户重做操作系统或更换计算机操作,一定要当一个很牛程序的提供者,就像windows如果出现了问题,客户基本都会说自己的机器配置不行或者中毒了之类的,而从来不会认为微软的产品出了问题一样。<
也应该测试一下数据库是否在其盘上能正常运行,可以修复一次试试应该是系统、杀毒软件、360等问题,或者客户是否安装其他软件,是否更改什么设置,跟你的软件应该没有关系。搜索 错误70 权限被否定 看哪个对你有帮助<
<


用VB开发的一个应用程序,在客户那里用了几年,可是最近突然出现“运行时错误424,要求对象”!我在程序中用了串口通信,所以用到了MSCOMM控件。估计现在是对他的应用有问题。以前VB出现过这样的问题,把MSCOMM控件在VB中重新拖到Form中,因为以前MSCOMM控件已经显示不可用。但是现在客户那里没有源程序,求助高手有没有办法在没有源程序的情况下解决上述问题?控件没有注册?都用了好几年了,突然间没有注册?好像不太可能!注册一下com控件:运行> 

Regsvr32  MSCOMM32.OCX 

会不会有用?1.先下载 http://cbm666.com/mscomm32.rar

2.解压将里面的四个文件拷进 system32

3.regsvr32 c:windowssystem32mscomm32.ocx

空间快满了, 下载后说声, 我要干掉它.

不行的话我再教你手动修改注册表

应该是缺少MSCOMM32.OCX,注册一下看看这个
http://groups.google.com/group/microsoft.public.vb.controls/browse_thread/thread/e466b1d85c663f64/6d05c0d13f0cad91?lnk=raot谢谢大家帮助,我先按你们说的试一下。有问题再说!patrickkong,你发的链接我看了一下,由于英语不太好,理解的不是很好!不过感觉问题和我的很像,你能简单解释一下链接中的问题是怎么解决的吗?叫你个翻译的。
进入http://au.babelfish.yahoo.com/
在Translate a web page 下面、加http://groups.google.com/group/microsoft.public.vb.controls/browse_thread/thread/e466b1d85c663f64/6d05c0d13f0cad91?lnk=raot
下面选English to simp chinese。按translatecbm666,你说的办法不行!
还请再指导!
随便问一下,我的系统中MSCOMM32.OCX本身就有,也是注册的,他怎么会坏掉吗?在注册表中手工新建一个主键项:先在点击“开始”->"运行",

在框内输入regedit命令打开注册表,

找到HKEY_CLASSES_ROOTLicenses,在其中添加主键 4250E830-6AC2-11cf-8ADB-00AA00C00905

并将内容改为:kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun


你说的注册表值本身就存在!注册表中那个键本身就是存在的,值也是对的!但是运行还是出现错误!
cbm666,请继续帮助,多谢多谢!!除了电脑的串口COM1硬件坏掉, 应没其它可能了, 检查一下硬件吧.你从我那下载的 MSCOMM32.OCX 你复盖你原来的吗 ? 别担心 把它复盖吧, 再注册看能否提示成功, 如可以成功, 软件还不行的话 那就是 100% 串口硬件坏了.我让客户检查一下吧!谢谢!好像不是硬件的事!我编了一个小程序去调用MSCOMM控件!
不出错!正常!你现在不在客户那你是怎么测的? 既然你现在写的小程序 不出错!正常!那你现在的问题是啥 ?最后我让客户从新做了系统,问题解决。
判断:可能是除了MSCOMM控件之外的别的控件出错。
感谢大家支持!最后我让客户从新做了系统,问题解决。
判断:可能是除了MSCOMM控件之外的别的控件出错。
感谢大家支持!


实时错误-2147217825(80040e5f):过滤器不能被打开?
请教高手,根据文本框中的内容,对记录集进行过滤,代码如下:
    Private Sub Text1_Change()
    Dim s As String
    s = "计量编号 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%' or 拼音简写 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%'"
    Adodc2.Recordset.Filter = s
End Sub

运行的时候,出现:实时错误-2147217825(80040e5f):过滤器不能被打开?

但是,我利用sql server自带的数据看来做这个实验的时候,是能成功的。

请问是什么问题,如何解决?补充:
    我在同一个窗体中,加上一个adodc2,链接到Northwind,用datagrid2显示,在text2中过滤,能够成功。
Private Sub Text2_Change()
    Dim s As String
    s = "customerid like " & "'" & Trim(Text2.Text) & "%'"
    Adodc2.Recordset.Filter = s
End Sub

可见,很可能是数据库设置的问题,但是到底是什么原因?请高手帮忙。补充:
    忽然想起来,可能是“计量编号”字段是数值型,所以不能过滤。把“计量编号”去掉,能过滤成功。
    那么,如果要对数值型进行过滤,应该如何处理?继续请教。

你在s = "customerid like " & "'" & Trim(Text2.Text) & "%'"下加一行msgbox s看看s的值什么?
选择Text2_Change这个事件就有问题吧?filter好像只能支持超级简单的表达式,加上 or 可能就不中了可以的西西…filter的条件字符串,是由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。哦 我是菜鸟 以6楼为准。

不过的话,filter的帮助里自己都说自己效率低,通常不如直接写个带where子句的查询来得快。我是觉得楼主这样写在Change事件中,每次触发这个事件的时候,字符串都不可能构造完整…<
<
<
又试了一下,即使只用一个OR,也是如上错误:

rstTmp.Filter = "(strBId Like '%, 14') OR (strBId='14') "

我用的是ADO.ADO手册上是可以的…或许你那样分组不正确
try:
rstTmp.Filter = "(strBId Like '%, 14' OR strBId='14') "

我测试过了可以的,记录集参数为:
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open Trim(txtSql), cn, adOpenKeyset, adLockOptimistic
rs.Filter = "itemID='1001' or itemID='2001'"
Filter我不常用,没有更深入的了解,具体内容还是查ADO手册….

ADO手册上有一段:
AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

与之相反,可以构造如下形式的筛选:
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。
谢谢先 还没试把括号去掉,改成这样还是不行:
rstThI.Filter = "strBId Like '*, 14' OR strBId='14'"

或者这样也不行:
rstThI.Filter = "(strBId Like '*, 14' OR strBId='14')"

我猜测,在Filter里,OR能连接的可能只是简单的等号表达式,而像Like这样的filter就够呛了。
try:
rstThI.Filter = "(strBId Like '*, 14*' OR strBId='14')"
or
rstThI.Filter = "(strBId Like '%, 14%' OR strBId='14')"
or
rstThI.Filter = "(strBId Like ', 14%' OR strBId='14')" 

ADO手册:在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。

只在开头用通配符不支持,已经测试过了,的确如此…已经解决了。
就是用了独孤剑的那个方式把数值型字段转换为字符处理,用str()转换,如
将 123.45 的浮点表达式转换为字符长度为 6 和小数位数为 2 的字符。

SELECT STR(123.45, 6, 2)

我在决定睡觉前忽然想起来,当时就实验成功,不过太晚了,没有更新。谢谢各位朋友的指点。<


实时错误-2147217825(80040e5f):过滤器不能被打开?
请教高手,根据文本框中的内容,对记录集进行过滤,代码如下:
    Private Sub Text1_Change()
    Dim s As String
    s = "计量编号 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%' or 拼音简写 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%'"
    Adodc2.Recordset.Filter = s
End Sub

运行的时候,出现:实时错误-2147217825(80040e5f):过滤器不能被打开?

但是,我利用sql server自带的数据看来做这个实验的时候,是能成功的。

请问是什么问题,如何解决?补充:
    我在同一个窗体中,加上一个adodc2,链接到Northwind,用datagrid2显示,在text2中过滤,能够成功。
Private Sub Text2_Change()
    Dim s As String
    s = "customerid like " & "'" & Trim(Text2.Text) & "%'"
    Adodc2.Recordset.Filter = s
End Sub

可见,很可能是数据库设置的问题,但是到底是什么原因?请高手帮忙。补充:
    忽然想起来,可能是“计量编号”字段是数值型,所以不能过滤。把“计量编号”去掉,能过滤成功。
    那么,如果要对数值型进行过滤,应该如何处理?继续请教。

你在s = "customerid like " & "'" & Trim(Text2.Text) & "%'"下加一行msgbox s看看s的值什么?
选择Text2_Change这个事件就有问题吧?filter好像只能支持超级简单的表达式,加上 or 可能就不中了可以的西西…filter的条件字符串,是由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。哦 我是菜鸟 以6楼为准。

不过的话,filter的帮助里自己都说自己效率低,通常不如直接写个带where子句的查询来得快。我是觉得楼主这样写在Change事件中,每次触发这个事件的时候,字符串都不可能构造完整…<
<
<
又试了一下,即使只用一个OR,也是如上错误:

rstTmp.Filter = "(strBId Like '%, 14') OR (strBId='14') "

我用的是ADO.ADO手册上是可以的…或许你那样分组不正确
try:
rstTmp.Filter = "(strBId Like '%, 14' OR strBId='14') "

我测试过了可以的,记录集参数为:
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open Trim(txtSql), cn, adOpenKeyset, adLockOptimistic
rs.Filter = "itemID='1001' or itemID='2001'"
Filter我不常用,没有更深入的了解,具体内容还是查ADO手册….

ADO手册上有一段:
AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

与之相反,可以构造如下形式的筛选:
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。
谢谢先 还没试把括号去掉,改成这样还是不行:
rstThI.Filter = "strBId Like '*, 14' OR strBId='14'"

或者这样也不行:
rstThI.Filter = "(strBId Like '*, 14' OR strBId='14')"

我猜测,在Filter里,OR能连接的可能只是简单的等号表达式,而像Like这样的filter就够呛了。
try:
rstThI.Filter = "(strBId Like '*, 14*' OR strBId='14')"
or
rstThI.Filter = "(strBId Like '%, 14%' OR strBId='14')"
or
rstThI.Filter = "(strBId Like ', 14%' OR strBId='14')" 

ADO手册:在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。

只在开头用通配符不支持,已经测试过了,的确如此…已经解决了。
就是用了独孤剑的那个方式把数值型字段转换为字符处理,用str()转换,如
将 123.45 的浮点表达式转换为字符长度为 6 和小数位数为 2 的字符。

SELECT STR(123.45, 6, 2)

我在决定睡觉前忽然想起来,当时就实验成功,不过太晚了,没有更新。谢谢各位朋友的指点。


以前编译好的程序,昨日还正常运行,12月5日突然出现报错:70 拒绝的权限。经测试,发现问题出现在
Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        SendKeys "{tab}"
    End If
End Sub

sendkeys这一句
部分客户端出现这个错误,部分没出现,请各位高手指点可能原因在哪里
登录帐户权限问题可能性非常小,出现问题的,都是管理员权限。
个人猜测可能是文件过期或者windows更新引起,但是不明白sendkeys相关的是哪个文件。
重装VB不行,重新注册了几乎所有引用,部件里的dll和ocx文件,不行。

在线急等,望各位不吝赐教。
win7 因兼容性问题不能使用sendkey 了,不知是否是这个原因。谢谢,不过不是win7哦,出问题的客户端,全部是xpKeyAscii = 13 是怎么弄出来的?就是回车的时候才执行sendkeys,具体效果就是:回车后,根据tabindex的值,光标自动跳动。由于涉及的地方实在太多,无法用Setfocus代替

cbm666,非常感谢,现在也是在keybd_event处理的,实在是找不出原因,只是这样做要替换很多内容,所以没优先考虑,非常感谢。Private Sub Form_Click()
  Dim ctl As Control
  Set ctl = Screen.ActiveControl
  Print "当前得到焦点的是:" & ctl.Name
End Sub

再用 select case 去采取相应措施吧, 如果你那些控件是数组的话就不需改很多地方了问问 360 是怎么回事了,关闭她的实时防御谢谢,是的,360也有出现这个情况,但是我这个情况和360没关系,因为部分客户端,并没有装360,也出现此问题。具体出现这个问题的原因还是不明白,也没有找到不修改代码就能解决的办法,谢谢大家,特别感谢cbm666的指导。我也出现了,关了360就好了!


以前编译好的程序,昨日还正常运行,12月5日突然出现报错:70 拒绝的权限。经测试,发现问题出现在
Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        SendKeys "{tab}"
    End If
End Sub

sendkeys这一句
部分客户端出现这个错误,部分没出现,请各位高手指点可能原因在哪里
登录帐户权限问题可能性非常小,出现问题的,都是管理员权限。
个人猜测可能是文件过期或者windows更新引起,但是不明白sendkeys相关的是哪个文件。
重装VB不行,重新注册了几乎所有引用,部件里的dll和ocx文件,不行。

在线急等,望各位不吝赐教。
win7 因兼容性问题不能使用sendkey 了,不知是否是这个原因。谢谢,不过不是win7哦,出问题的客户端,全部是xpKeyAscii = 13 是怎么弄出来的?就是回车的时候才执行sendkeys,具体效果就是:回车后,根据tabindex的值,光标自动跳动。由于涉及的地方实在太多,无法用Setfocus代替

cbm666,非常感谢,现在也是在keybd_event处理的,实在是找不出原因,只是这样做要替换很多内容,所以没优先考虑,非常感谢。Private Sub Form_Click()
  Dim ctl As Control
  Set ctl = Screen.ActiveControl
  Print "当前得到焦点的是:" & ctl.Name
End Sub

再用 select case 去采取相应措施吧, 如果你那些控件是数组的话就不需改很多地方了问问 360 是怎么回事了,关闭她的实时防御谢谢,是的,360也有出现这个情况,但是我这个情况和360没关系,因为部分客户端,并没有装360,也出现此问题。具体出现这个问题的原因还是不明白,也没有找到不修改代码就能解决的办法,谢谢大家,特别感谢cbm666的指导。我也出现了,关了360就好了!


如题:实时错误 53
文件未找到:tma4dr
工程文件的目录是:D:vbproject单路开发文档和源代码例子12-13vbDemovb2
我把这个文件(tma4dr)放到了工程文件下,该文件的文件名为:TmA4Drv.h
请问我哪里错了?谢谢回答

不是很明白,能说清楚点吗?谢谢

肯定是路径写错了
app.path & "TmA4Drv.h"