注册 登录
编程论坛 PowerBuilder

[求助]打不开数据管道

邻家男孩 发布于 2007-01-29 09:19, 6257 次点击
各位老师,我在某医疗行业信息部门工作,刚接触了一点PB,我想从我院HIS数据库服务器里导出常用的数据到我们本地的数据库,这样既有利于提高报表的运行效率,也可以避免在HIS数据库出现意外的情况下,我科数据的安全。
于是,就采用了数据管道。首先用数据管道画笔创建数据管道对象,接着创建管道标准类用户对象及其相关函数等,再就是配置数据库、连接数据库等操作都完成了。在PB数据管道画笔界面直接运行数据管道对象,能正常成功传输数据。但是,在程序中运行数据管道却没有成功,显示打不开数据管道。我反反复复检查了多遍程序,没有发现什么异常,数据库能够连接成功,但就是打不开数据管道。
我上网搜了一下,也没有发现有价值的贴子。恳请各位,帮帮忙。下面是运行管道的程序:
u_sjdr iu_sjdr
iu_sjdr=create u_sjdr
iu_sjdr.dataobject='ghks'
integer lt1,lt2
lt1=iu_sjdr.uf_connect()
if lt1=0 then
lt2=iu_sjdr.uf_start()
iu_sjdr.uf_error(lt2)
iu_sjdr.uf_disconnect()
else
messagebox("连接错误","数据库连接没有成功")
end if
destroy iu_sjdr
30 回复
#2
notbig2007-01-29 09:44
u_sjdr 这个对象做好了吗?
#3
邻家男孩2007-01-29 09:56
u_sjdr 是创建的管道标准类用户对象,已创建好。
#4
notbig2007-01-29 10:33
要不你去跟踪程序,这一段没有问题
#5
邻家男孩2007-01-29 10:45
朋友,能不能详细一点,我刚接触PB,知之甚少,跟踪我不会,但是我改变条件语句试过了,无论源或是目的数据库都能连接成功,iu_sjdr.dataobject='ghks' ,对象赋值后,我测了一下其syntax属性都有内容,但是就在运行管道时,显示无法打开数据管道。另外,我将iu_sjdr.dataobject='ghks' 语句注释后,也是打不开数据管道,好象这一句根本不存在一样。我感到很纳闷。谢谢你的积极回复。
#6
notbig2007-01-29 10:47

你要确保你的那个对象对事务(两个)都已连接成功

#7
邻家男孩2007-01-29 10:57
当然,这我能保证,它们都能返回连接成功的代码。
#8
notbig2007-01-29 11:02
那个对象是你自己写的还是抄别人的,你可以把第一楼的调用的各个函数的代码贴出来
#9
邻家男孩2007-01-29 11:21
格式、套路是沿用他人的,其它代码如下:
只有本站会员才能查看附件,请 登录

#10
notbig2007-01-29 12:04
你做的管道有参数吗?
#11
邻家男孩2007-01-29 12:31
没有参数。
#12
notbig2007-01-29 12:39
你是编译后不行还是未编译运行不行
#13
邻家男孩2007-01-29 14:49
未编译运行就打不开管道,也试过编译来也打不开管道。
#14
notbig2007-01-29 15:56

在PB编辑环境下,你打开管道时指定的数据库是不是与运行环境中设定的两个事务的数据库是一样的

#15
邻家男孩2007-01-29 16:08
是一样的,程序中数据库的配置参数就是从数据库配置画笔中复制的。
#16
notbig2007-01-29 16:32
看不出有什么问题哟。
#17
邻家男孩2007-01-30 09:19
我也魄感费解,相关书我也查了不少,有说跟编译方式有关,有说跟管道的标准类用户对象的“syntax”属性有关,也有说跟相关的dll文件有关,前两方面我做了相关尝试,但没有答案,这个问题折磨我有近二十天了,开始我在PB6.5中开发,这个问题没有解决,于是我又改在PB9.0中开发,还是这个问题,谁能给我一个确切的合理的回答啊?
#18
notbig2007-01-30 10:30
你可否试下换个表试试
#19
notbig2007-01-30 10:32

数据管道开发有时确实会遇到些麻烦,但有时跟补丁有关。有时又是自己不小心,比如开发环境跟运行环境不同,连的表的结构和类型不同导致。

#20
邻家男孩2007-01-30 15:36
以下是引用notbig在2007-1-30 10:30:27的发言:
你可否试下换个表试试

我觉得换个表没有什么用,因为无论我将语句:iu_sjdr.dataobject='ghks' 注释掉,还是赋成其他值,都只是一个“打不开数据管道”的提示,就好象这一句可有可无,我总觉得在执行数据管道前,似乎少了一步,或者需要将什么激活之类步骤,各位PB的前辈们仔细帮我捉莫一下啊?

#21
notbig2007-01-30 17:52
那你把这句放到用户对象的uf_START事件
iu_sjdr.dataobject='ghks'
#22
邻家男孩2007-01-31 08:23
我试过了,还是不行啊,我也试过不用自定义函数uf_start,直接用其start函数,也不行啊,各位PB前辈赶快支招啊

[此贴子已经被作者于2007-1-31 8:28:02编辑过]


#23
notbig2007-01-31 13:51
可否提供PBL
#24
邻家男孩2007-02-02 10:31
当然可以了,我这就上传
#25
邻家男孩2007-02-02 10:32
这就是啊
只有本站会员才能查看附件,请 登录

#26
notbig2007-02-02 15:27
已下载,研究一下
#27
notbig2007-02-02 16:34

问题解决
我改动如下:
将用户对象中以下几句
itr_source=create transaction
itr_destination=create transaction
idw_error =create datawindow
放在用户对象的constructor事件上
不要在菜单上触发代码
我在窗口中放一个按钮,把原来菜单的脚本复制到按钮中
并在窗口再放一个DW,取名为DW_ERROR
在上面按钮的脚本中增加 iu_sjdr.idw_error = dw_error
如下所示
u_sjdr iu_sjdr
iu_sjdr=create u_sjdr
iu_sjdr.idw_error = dw_error
iu_sjdr.dataobject='ghks'
然后就OK了

估计是IDW_ERRor,可能没有指定一个可视的DW对象问题。
待测试,你有空可以测试以下是否可行
将datawindow idw_error 换成 datastore 不知行否。

#28
邻家男孩2007-02-04 08:58
真感谢你的真诚回复,这几天我没有上网,不好意思,虽然我还没有试一下,但我觉得你分析的有道理,因为idw_error这个事例变量一直还没有派上用场,等我星期一试一下。再次感谢你,朋友,新年快乐。
#29
邻家男孩2007-02-05 13:31
朋友,非常感谢,你分析的非常中肯,安照你的说法,我如法炮制,果然解决了困挠我多日的问题。再次向你表示谢意,祝新年愉快。下一次,再有解决不了的问题再发贴请教你。
#30
notbig2007-02-05 13:39
不必客气,问题解决就行。
#31
pandu2007-07-14 18:19

谢谢,刚学习,我也试试看

1