!!!一个问好几天的问题,到底有没有人知道怎么做啊?应该不难吧?!!!

ares911 2003-09-11 01:48:49
我是一个DELPHI新手,所以遇到一些简单的问题也一筹莫展。谁能根据以下需求提供一份解决方案,最好是有完整的代码的。
我要用DELPHI做一个数据导入的接口程序。其需求如下:
软件提供了一个查找功能和一个导入功能,先根据用户输入的日期和编号(这个条件允许为空)去ACCESS数据库里查找出相应的数据,把编号列在一个列表框里,然后客户手动选择需要导入的电表编号到另一个列表框,单击“导入”,就把数据写入ORACLE库,并在第三个列表框列出来导入成功的编号。查找功能已经完成,CORBA也封装好了,就剩下写入数据这关键的一块儿,这个功能做不好,前面的东西都没有什么作用,要点:
1.用户编号是保存在access数据库里的;
2.用户的最终数据库不允许被我直接操作,提供了CORBA服务端和IDL接口文件;
3.用户通过这个接口程序手工导入最终数据库;
4.如果导入不成功,则报错,导入成功的写到一个列表框里;
5.调用的函数是封装好的CORBA提供的,按照我的理解就是他们给了我一个自定义的结构(代码在下面),我定义一个这样的结构,然后把从ACCESS里取出的数据全部赋值到这个结构里相应的数据项里去,然后导入到数据库里去?但是这一步应该具体如何去操作?有没有高手给指点一下?
比如:1.如何去定义这个结构?在哪个部分如何定义?应该注意些什么?
2.如何调用这个函数?语句怎样写?

用户提供的说明文档里,有一些关于调用CORBA函数的说明:
功能:提交电能表校验成绩单(校验结果上传)
成员函数:unsigned short AddMeterCheckDetails(in any MCDS);
本函数是any GetMeterCheckDetails(in wstring BarCode, in octet Times, out unsigned short Err);的逆操作,返回值是错误代码。

客户提供的自定义结构(标准的DELPHI源代码):
{电能表计数器类型}
TMeterCounterType = (mctSum, mctApex, mctVale, mctPar, mctInductive, mctCapacitive);
{总、峰、谷、平、感性(I,III象限)、容性(II,IV象限)示数}

{多功能电能表计数器定义}
TMeterCounter = record
DataSize: Word;{系统用}
Counters: array[Low(TMeterCounterType)..High(TMeterCounterType)] of Currency;
end;
PMeterCounter = ^TMeterCounter;

{电能表元组}
TMeterPhase = (phL, phA, phB, phC);{平衡, A, B, C}
TMeterphaseSet = set of TMeterPhase;

{电能表检测点误差}
PMeterCheckPoint = ^TMeterCheckPoint;
TMeterCheckPoint = record
Time : TDateTime; {8Byte电能表检测工单对应键}
Ord : Word; {2Byte电能表检测工单对应键}
Phase : TMeterPhase; {1Byte所属元组}
CurrentMultiple: Single; {4Byte电流倍数}
PowerFactor, {11Byte功率因数}
Error1, {11Byte误差1}
Error2, {11Byte误差1}
Average, {11Byte平均值}
Correct : String[10]; {11Byte修整值}
Bookmark : TBookmarkStr;{对应记录的标签,这是仅在算法中使用的临时变量}
end;

{工单类型. 未知待定(该值意味着除时间戳,条码,维修人之外的参数可再修改),正向有功,
正向无功,反向有功,反向无功}
TCheckBillKind = (cbkNone, cbkOE, cbkOI, cbkRE, cbkRI);

{电能表检测工单.有必要将每一测量类型的检测工单分立,这样,就可能迅速得知指定的计量
设备在指定的时间段内有多少检测工单}
PMeterCheckBillRec = ^TMeterCheckBillRec;
TMeterCheckBillRec = record
Time : TDateTime; {8Byte检测时间(键)}
Ord : Word; {2Byte区分同一秒内发生的多条记录的序号(键)}
BarCode : String[20]; {21Byte条码(唯一键组成部分)}
Kind : TCheckBillKind;{1Byte工单类型(唯一键组成部分)}
PortNo : Byte; {1Byte多用户表端口号(唯一键组成部分)}
BeforeAdjust : Boolean; {1Byte调前True/调后False(唯一键组成部分)}
Bill_ID : Cardinal; {4Byte工单号}
SetNo, {1Byte检定装置编号}
Tempture, {1Byte环境温度}
Humiture, {1Byte环境湿度}
EndureVoltage : Byte; {1Byte工频耐压}
StartupCurrent : SmallInt; {2Byte启动电流(mA)}
Voltage, {4Byte实际电压}
MaxStandardWarp1, {4Byte最大标准偏差估计值1}
MaxStandardWarp2: Single; {4Byte最大标准偏差估计值2}
SetModel, {21Byte检定装置型号}
Maintenance, {21Byte维修人}
Regulator, {21Byte校表员}
Checker, {21Byte核验员}
SpellChecker, {21Byte走字员}
Seal : String[20]; {21Byte走字员封印}
StartCounter, {66Byte计数器起始示数}
EndCounter : TMeterCounter; {66Byte计数器终止示数}
StartupOK, {1Byte启动电流合格标志}
UndercurrentOK, {1Byte潜动电流合格标志}
ErrorOK, {1Byte误差合格标志}
SpellOK : Boolean; {1Byte走字合格标志}
Bookmark : TBookmarkStr; {对应记录的标签,是仅在算法中使用的临时变量}
end;

{完整的电能表检测工单定义}
PMeterCheckDetail = ^TMetercheckDetail;
TMeterCheckDetail = record
Bill : TMeterCheckBillRec;
Points: array of TMeterCheckPoint;
end;

{电能表检测工单组.每个表可以有多个检测工单,如多功能表的检测工单包括有功和无功两
份或更多检测工单}
TMeterCheckDetails = array of TMeterCheckDetail;

{电能表检测工单时效类型}
TMeterCheckBillTimes = (cbNow, cbCurrent, cbHistory);
...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whitetiger8 2003-09-11
  • 打赏
  • 举报
回复
在数据库里提出问题吧。这里来的人是不是很少啊。
xiangtx 2003-09-11
  • 打赏
  • 举报
回复
不论是什么原因,这段代码还是太长了。
重新组织一下吧。
别人根本就不回把它看完,所以问题简单还是复杂也不会有人关心。
ares911 2003-09-11
  • 打赏
  • 举报
回复
这个问题其实并不长,也就是一个如何调用CORBA函数的问题罢了。
后面是人家提供的源代码,直接COPY就可以使用的,不提供出来怕看不明白这个问题啊!
xjlqlqlq 2003-09-11
  • 打赏
  • 举报
回复
将问题分解成多个小问题,多次问,更能被大家接受。。。
因为大多数人不愿看太长的问题,那样要花太长时间的。。。
xjlqlqlq 2003-09-11
  • 打赏
  • 举报
回复
太大太长,将问题分解成单个小问题,可能更容易被人接受。。。
一下太长,大多数人没有那么多时间慢慢看。。。
注意提问技巧。。。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧