为什么相互矛盾的现象总缠着我?(字符串读写比较的问题)(100分)

  • 主题发起人 主题发起人 shouma
  • 开始时间 开始时间
S

shouma

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟为本厂职工医院写一简易型HIS系统,开发环境:SQL SERVER 2000 + ADOConnection,Table(TQuery),DatasetProvider + SocketConnection,ClientDataset + Delphi 7.0 , Windows 2000 Pro (我知道这是大家批评的假三层结构)。运行环境:服务端及客户端均为windows 98 SE (院方坚持如此)。其中遇到两个问题,百思不得其解,还望各位大侠救命:
1.向医保中心传送4种数据(药品,诊疗,服务设施,出院带药),其中3种能正确传递,只有“服务设施”数据不能传送,返回的错误信息是:“服务设施名称不能为空”,但我传过去的名称明明是不为空的(汉字串)。奇怪的是,“服务设施”和“诊疗”在数据结构上完全一样,可以说是一字不差,为什么彼能传送,此却不能。医保中心确定的接口规范是:用结构来传递数据,而结构中的字符串域是用字符串数组来传递的。我最后用一怪招将问题勉强解决了:在服务设施名称的前后各加一个英文字符,传递就正常了。这是怎么回事?
2.在安装发布程序时,又遇到怪问题:在一个客户端,对其中的一个表无法正确读取:在程序的用户登录模块,明明某一用户名是存在的,却无法找到该用户,我用的是ClientDataset.Locate(....)。为此我作了测试程序,在该机器上,别的表是能够正常读写的。还有:在别的机器上,所有表都能正常读取。
各位大侠,拉兄弟一把,100分相送。
 
为了方便大家解答问题,现将医保接口的相关部分贴出来
//************************************************************
// unit ............
// ..............
type
TStringOfChar=array[0..99]of char ;
TDiagInfo = record
//以下数据为医院方需录入的数据
INBED_REG_ID : TStringOfChar ;//住院登记ID
RECEIPT_DT : TStringOfChar ;//收费时间
DIAG_CATALOG_ID : TStringOfChar ;//诊疗项目代码参数ID
DIAG_ITEM_NAME : TStringOfChar ;//诊疗项目名称
UNIT_PRC : Single ;
//单价
SRVC_CNT : Single ;
//数量
//以下为从医保中心返回的数据
FEE_ITEM_TYP : TStringOfChar ;//费用项目种类
FEE_TYP : TStringOfChar ;//费用种类
PART_PUB_AMT : Single ;
//部分公费金额
PART_SELF_AMT : Single ;
//部分自费金额
PUB_PAY_AMT : Single ;
//公费金额
SELF_PAY_AMT : Single ;
//自费金额
SELF_PAY_PCT : Single ;
//自费比例
MAX_RETAIL_PRC : Single ;
//最高零售价
end;

TServiceItemInfo = record
//以下数据为医院方需录入的数据
INBED_REG_ID : TStringOfChar ; //住院登记ID,必须录入
RECEIPT_DT : TStringOfChar ; //收费时间,必须录入
SRVC_ITEM_ID : TStringOfChar ; //服务设施ID,必须录入
SRVC_NAME : TStringOfChar ; //服务设施名称,必须录入
UNIT_PRC : Single ;
//单价,必须录入
SRVC_CNT : Single ;
//数量,必须录入
//以下为从医保中心返回的数据
FEE_ITEM_TYP : TStringOfChar ; //费用项目种类
FEE_TYP : TStringOfChar ; //费用种类
PART_PUB_AMT : Single ;
//部分公费金额
PART_SELF_AMT : Single ;
//部分自费金额
PUB_PAY_AMT : Single ;
//公费金额
SELF_PAY_AMT : Single ;
//自费金额
SELF_PAY_PCT : Single ;
//自费比例
MAX_RETAIL_PRC : Single ;
//最高零售价
end;

// 以下为函数调用
// 录入诊疗费用,这是本人的程序能够正常调用的函数
function AddDiag(var ADiagInfo : TDiagInfo ) : Boolean;
export;
stdcall ;
{- 录入服务设施费用,这是本人的程序出错的函数,医保方程序总说“服务设施名称不能为空”,即上述结构中的 SRVC_NAME }
function AddServiceItem(var AServiceItemInfo : TServiceItemInfo ) : Boolean;
export;
stdcall ;
// **************************************************************
从上述资料可见:诊疗数据结构与服务设施数据结构完全相同,为什么一个正常,另一个出错?请各位大侠出手相助!关键是第2个问题,现在我被卡在这了。
 
医保接口的文档可以给我一个吗??
谢谢
cunion-sxq#163.com
 
盛利兄:
邮箱地址错了吧?我是按cunion-sxq@163.com发送的,请查收。不过你拿到接口可能没什么用处,据我了解,现在医保接口是各自为政,没有统一通用的。
 
基本上是每个县市自己一套
 
这个好办,在出错的机子或地方进行跟踪,就能找到原因了,
什么地方跌倒,什么地方爬起
 
向医保中心传送4种数据(药品,诊疗,服务设施,出院带药
看看医保的数据类型是不是一样的?会不会是字符集的问题?
瞎说,[:(]偶没有搞过3层!
 
你们那的医保还真奇怪,怎么还让医院自己写程序,我们可是有现成的程序,医院只要输数据就可以了
 
同意楼上
 
给我一份详细的资料好吗?
我看看帮你解决
zyt_1978@qingdaonews.com
 
谢谢各位的回答!
To WoDing:
医保方的后台数据库是Oracle,我的是SQL SERVER 2000,病因会在此吗?关于字符集的问题,在刚开始写此程序不久,即意识到了此问题,因此我已将SQL SERVER 2000中所有的字符字段类型从nchar,navchar改为char了。
 
在结构定义上加上 TDiagInfo = packed record
试一试
 
TO kisssun:
原来医保中心确实给了一套费用录入传送软件(好象是用800RMB买的),但现在却宣布该程序即将作废,逼着各医院自己搞自己的HIS系统及医保接口。当然,与医保中心合作的软件商也宣称可以提供价格便宜的HIS系统。其报价:每个点8000RMB。
 
To zyt_1978:
要说详细资料,可能就是医保中心提供的接口文档了,我已经发了,请查收。
To All :
请大家注意,第2个问题应该与医保接口无关。第1个问题我可以暂时绕过,第2个问题才是我着急的,恳请各位相救。
把第1个问题也写出来,是觉得它对解决第2个问题有帮助。
关于第1个问题,询问了医保中心,说其他的医院都能通过,包括和我一样用SQL SERVER 2000 + Delphi 的医院方。另外,医保中心用的也是Delphi 7.0。
唉!真是让我心急如焚啊!
 
To lich :
谢谢!
结构定义是医保中心给的,我若将其更改,就会与医保中心的不一致了,能行吗?请看看第2个问题如何解决。
 
To KissSun:
医保中心的意思当然不是要医院自己写程序,而是要医院去买现成的商品软件,这是我的理解。另外,我不在医院工作,而是在生产车间,因此,这个程序对我来说就更难写,难以深刻地了解业务。
 
怎么没人说话,请大家多多帮忙!
 
真是晕掉了~~
我在医保工作的,全是我们这免费提供程序,唉~医院比我们拽多了,让他们花钱,不要我们的命才怪.
帮不了你的忙,只有帮你顶了!
 
To kisssun:
帮不了忙,我也谢谢你了。
“拽多了”,怎么听起来象四川话。
To All:
对第2个问题,我已经照着正常的机子,把各种协议的配置参数改得一样了,仍然不行。实在没法的话,我只好重装win98了,会有效吗?
 
怎么没人回答,是问题太难了吗?[:(]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部