pb程序开发工具中运行正常,打包后个别模块运行出错

时间:2022-01-31 23:43:20
本人的pb的程序在开发工具里运行,一切正常,但是打包成安装文件后运行,在编辑一个datawindow时报错,错误是内存不能为read之类的错误,然后程序就退出了,请问是什么原因?急。。。

15 个解决方案

#1


这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量 
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

#2


引用 1 楼 lijianhe043 的回复:
这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量 
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

对 
1 对于dll 最好全部打包pb相关dll,尤其是xp系统,你不清楚客户是什么系统版本,尤其ghost的
2 检查pbd文件是否有缺失
3 检查程序源码

#3


引用 2 楼 ih04250652 的回复:
引用 1 楼 lijianhe043 的回复:
这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

对 
1 对于dll 最好全部打包pb相关dll,尤其是xp系统,你不清楚客户是什么系统版本,尤其ghost的
2 检查pbd文件是否有缺失……

1 对于dll 最好全部打包pb相关dll

#4


我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题

#5


在编辑一个datawindow时报错
这的是在该datawindow中录入数据时吗? 如果是你再检查看看对应事件中相应的代码是不是存在漏洞

#6


引用 4 楼 xiaobai1988 的回复:
我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题


估计还是和代码有关系,看editchanged或itemchanged事件,代码本身可能看不出什么问题,你在代码中加几个Messagebox,然后编译一下,看一下到底是运行到哪个位置里出现非法操作了,找到出错的代码,然后再分析一下原因

#7


引用 6 楼 lzp_lrp 的回复:
引用 4 楼 xiaobai1988 的回复:
我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题


估计还是和代码有关系,看editchanged或itemchanged事件,代码本身可能看不出什么问题,……

这里根本就没写代码,就是编辑datawindow里的某列的值,然后回车就报错了,程序就退出了

#8


正常情况下,编辑某列的值后,回车键后会自动跳到下一列,现在一按回车就出错了。。

#9


那你就检查一下enter事件及key事件中的代码是否有漏洞咯

#10


引用 8 楼 xiaobai1988 的回复:
正常情况下,编辑某列的值后,回车键后会自动跳到下一列,现在一按回车就出错了。。

那肯定你是enter事件(也不一定是enter事件,就是类似keydown的事件)里引用了一个不存的列名了~

#11



这里根本就没写代码,就是编辑datawindow里的某列的值,然后回车就报错了,程序就退出了

那你就看一下key或者enter事件里有无代码,也可能在你的祖先里,如果都没有代码,就是你的数据窗口有问题了,新建一个数据窗口然后再试试

#12


key事件里面调用了祖先的代码,估计用到了Global External Functions里面的全局函数,这些函数用到了某些dll文件,你把这些dll文件也拷贝到客户机的c:\windows\system32目录下即可

#13


table(column=(type=decimal(0) update=yes updatewhereclause=yes key=yes name=sbxh dbname="YF_RK02.SBXH" dbalias=".SBXH" )
 column=(type=long update=yes updatewhereclause=yes name=yfsb dbname="YF_RK02.YFSB" dbalias=".YFSB" )
 column=(type=long update=yes updatewhereclause=yes name=mode dbname="YF_RK02.MODE" dbalias=".MODE" )
 column=(type=char(12) update=yes updatewhereclause=yes name=bdhm dbname="YF_RK02.BDHM" dbalias=".BDHM" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=ypid dbname="YF_RK02.YPID" dbalias=".YPID" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=cdid dbname="YF_RK02.CDID" dbalias=".CDID" )
 column=(type=decimal(2) update=yes updatewhereclause=yes name=rksl dbname="YF_RK02.RKSL" dbalias=".RKSL" )
 column=(type=datetime update=yes updatewhereclause=yes name=ysrq dbname="YF_RK02.YSRQ" dbalias=".YSRQ" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=ysbz dbname="YF_RK02.YSBZ" dbalias=".YSBZ" )
 column=(type=char(16) update=yes updatewhereclause=yes name=fphm dbname="YF_RK02.FPHM" dbalias=".FPHM" )
 column=(type=char(16) update=yes updatewhereclause=yes name=ypph dbname="YF_RK02.YPPH" dbalias=".YPPH" )
 column=(type=datetime update=yes updatewhereclause=yes name=ypxq dbname="YF_RK02.YPXQ" dbalias=".YPXQ" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=jhjg dbname="YF_RK02.JHJG" dbalias=".JHJG" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=pfjg dbname="YF_RK02.PFJG" dbalias=".PFJG" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=lsjg dbname="YF_RK02.LSJG" dbalias=".LSJG" )
 column=(type=long update=yes updatewhereclause=yes name=zhxs dbname="YF_RK02.ZHXS" dbalias=".ZHXS" )
 column=(type=char(8) update=yes updatewhereclause=yes name=yfdw dbname="YF_RK02.YFDW" dbalias=".YFDW" )
 column=(type=char(24) update=yes updatewhereclause=yes name=yfgg dbname="YF_RK02.YFGG" dbalias=".YFGG" )
 column=(type=char(48) update=yes updatewhereclause=yes name=ypmc dbname="YF_RK02.YPMC" dbalias=".YPMC" )
 column=(type=char(48) update=yes updatewhereclause=yes name=cdmc dbname="YF_RK02.CDMC" dbalias=".CDMC" )
 column=(type=decimal(1) updatewhereclause=yes  identity=yes name=kcsl dbname="KCSL" )
 retrieve="  SELECT YF_RK02.SBXH,   
         YF_RK02.YFSB,   
         YF_RK02.MODE,   
         YF_RK02.BDHM,   
         YF_RK02.YPID,   
         YF_RK02.CDID,   
         YF_RK02.RKSL,   
         YF_RK02.YSRQ,   
         YF_RK02.YSBZ,   
         YF_RK02.FPHM, 
         YF_RK02.YPPH,   
         YF_RK02.YPXQ,   
         YF_RK02.JHJG,   
         YF_RK02.PFJG,   
         YF_RK02.LSJG,   
         YF_RK02.ZHXS,   
         YF_RK02.YFDW,   
         YF_RK02.YFGG,
YF_RK02.YPMC,
         YF_RK02.CDMC,
         0.0     KCSL 

#14


pb11.5 这个库存数量不是数据库字段,要是有 identity=yes 有时候不改动他还好,一改动就会报内存不能为read之类的错误错误的

#15


把所有的dll都加上。

#1


这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量 
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

#2


引用 1 楼 lijianhe043 的回复:
这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量 
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

对 
1 对于dll 最好全部打包pb相关dll,尤其是xp系统,你不清楚客户是什么系统版本,尤其ghost的
2 检查pbd文件是否有缺失
3 检查程序源码

#3


引用 2 楼 ih04250652 的回复:
引用 1 楼 lijianhe043 的回复:
这种情况那很多:
1:有可能你缺少dll
2: 有可能你引用的PBD不存在
3: 有可能你引用了非法的内存变量
4:有可能你是从其它版本迁移过来的,最的在打包之前,全部migrate一下。

对 
1 对于dll 最好全部打包pb相关dll,尤其是xp系统,你不清楚客户是什么系统版本,尤其ghost的
2 检查pbd文件是否有缺失……

1 对于dll 最好全部打包pb相关dll

#4


我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题

#5


在编辑一个datawindow时报错
这的是在该datawindow中录入数据时吗? 如果是你再检查看看对应事件中相应的代码是不是存在漏洞

#6


引用 4 楼 xiaobai1988 的回复:
我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题


估计还是和代码有关系,看editchanged或itemchanged事件,代码本身可能看不出什么问题,你在代码中加几个Messagebox,然后编译一下,看一下到底是运行到哪个位置里出现非法操作了,找到出错的代码,然后再分析一下原因

#7


引用 6 楼 lzp_lrp 的回复:
引用 4 楼 xiaobai1988 的回复:
我是修改别人的一个程序,之前他打包的都没问题,我确认了我打包后的pb相关的dll文件和他打包的都对应的上,而且我也试了把pb安装目录下所有的dll文件拷贝到我的程序安装目录下,然后运行程序一样还是报错,很奇怪,但是在开发工具中就没问题


估计还是和代码有关系,看editchanged或itemchanged事件,代码本身可能看不出什么问题,……

这里根本就没写代码,就是编辑datawindow里的某列的值,然后回车就报错了,程序就退出了

#8


正常情况下,编辑某列的值后,回车键后会自动跳到下一列,现在一按回车就出错了。。

#9


那你就检查一下enter事件及key事件中的代码是否有漏洞咯

#10


引用 8 楼 xiaobai1988 的回复:
正常情况下,编辑某列的值后,回车键后会自动跳到下一列,现在一按回车就出错了。。

那肯定你是enter事件(也不一定是enter事件,就是类似keydown的事件)里引用了一个不存的列名了~

#11



这里根本就没写代码,就是编辑datawindow里的某列的值,然后回车就报错了,程序就退出了

那你就看一下key或者enter事件里有无代码,也可能在你的祖先里,如果都没有代码,就是你的数据窗口有问题了,新建一个数据窗口然后再试试

#12


key事件里面调用了祖先的代码,估计用到了Global External Functions里面的全局函数,这些函数用到了某些dll文件,你把这些dll文件也拷贝到客户机的c:\windows\system32目录下即可

#13


table(column=(type=decimal(0) update=yes updatewhereclause=yes key=yes name=sbxh dbname="YF_RK02.SBXH" dbalias=".SBXH" )
 column=(type=long update=yes updatewhereclause=yes name=yfsb dbname="YF_RK02.YFSB" dbalias=".YFSB" )
 column=(type=long update=yes updatewhereclause=yes name=mode dbname="YF_RK02.MODE" dbalias=".MODE" )
 column=(type=char(12) update=yes updatewhereclause=yes name=bdhm dbname="YF_RK02.BDHM" dbalias=".BDHM" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=ypid dbname="YF_RK02.YPID" dbalias=".YPID" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=cdid dbname="YF_RK02.CDID" dbalias=".CDID" )
 column=(type=decimal(2) update=yes updatewhereclause=yes name=rksl dbname="YF_RK02.RKSL" dbalias=".RKSL" )
 column=(type=datetime update=yes updatewhereclause=yes name=ysrq dbname="YF_RK02.YSRQ" dbalias=".YSRQ" )
 column=(type=decimal(0) update=yes updatewhereclause=yes name=ysbz dbname="YF_RK02.YSBZ" dbalias=".YSBZ" )
 column=(type=char(16) update=yes updatewhereclause=yes name=fphm dbname="YF_RK02.FPHM" dbalias=".FPHM" )
 column=(type=char(16) update=yes updatewhereclause=yes name=ypph dbname="YF_RK02.YPPH" dbalias=".YPPH" )
 column=(type=datetime update=yes updatewhereclause=yes name=ypxq dbname="YF_RK02.YPXQ" dbalias=".YPXQ" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=jhjg dbname="YF_RK02.JHJG" dbalias=".JHJG" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=pfjg dbname="YF_RK02.PFJG" dbalias=".PFJG" )
 column=(type=decimal(5) update=yes updatewhereclause=yes name=lsjg dbname="YF_RK02.LSJG" dbalias=".LSJG" )
 column=(type=long update=yes updatewhereclause=yes name=zhxs dbname="YF_RK02.ZHXS" dbalias=".ZHXS" )
 column=(type=char(8) update=yes updatewhereclause=yes name=yfdw dbname="YF_RK02.YFDW" dbalias=".YFDW" )
 column=(type=char(24) update=yes updatewhereclause=yes name=yfgg dbname="YF_RK02.YFGG" dbalias=".YFGG" )
 column=(type=char(48) update=yes updatewhereclause=yes name=ypmc dbname="YF_RK02.YPMC" dbalias=".YPMC" )
 column=(type=char(48) update=yes updatewhereclause=yes name=cdmc dbname="YF_RK02.CDMC" dbalias=".CDMC" )
 column=(type=decimal(1) updatewhereclause=yes  identity=yes name=kcsl dbname="KCSL" )
 retrieve="  SELECT YF_RK02.SBXH,   
         YF_RK02.YFSB,   
         YF_RK02.MODE,   
         YF_RK02.BDHM,   
         YF_RK02.YPID,   
         YF_RK02.CDID,   
         YF_RK02.RKSL,   
         YF_RK02.YSRQ,   
         YF_RK02.YSBZ,   
         YF_RK02.FPHM, 
         YF_RK02.YPPH,   
         YF_RK02.YPXQ,   
         YF_RK02.JHJG,   
         YF_RK02.PFJG,   
         YF_RK02.LSJG,   
         YF_RK02.ZHXS,   
         YF_RK02.YFDW,   
         YF_RK02.YFGG,
YF_RK02.YPMC,
         YF_RK02.CDMC,
         0.0     KCSL 

#14


pb11.5 这个库存数量不是数据库字段,要是有 identity=yes 有时候不改动他还好,一改动就会报内存不能为read之类的错误错误的

#15


把所有的dll都加上。