吐血求救 !!!HELP!!!!!

Alex5111985 2007-05-11 03:48:33
#include <vcl.h>
#pragma hdrstop

#include <corba.h>
#include "accountsServer.h"

#include"bankunit2.h"
#include"any2variant.h"
#include"Provider.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)

#pragma resource "*.dfm"
TAccountsImpl *AccountsImpl;
//---------------------------------------------------------------------------
__fastcall TAccountsImpl::TAccountsImpl(TComponent* Owner)
: TDataModule(Owner)
{
AnsiString path=ExtractFilePath(Application->ExeName);//提取路径
//初始化有关数据表格
ADOTable1->TableName=path+"account.db";
}
//---------------------------------------------------------------------------
CORBA::Any*_fastcall TAccountsImpl::Getaccounts(CORBA::Boolean metadata)
{
try
{
CoInitialize(NULL);
TProvider*Provider=new TProvider(this);

ADOTable1->Refresh();//刷新ADOTable1
Provider->DataSet=ADOTable1;
Provider->Reset(metadata);//提取ADOTable1数据
CORBA::Any_var any=SAFEARRAYToAny(Provider->Data);

delete Provider;
CoUninitialize();
return CORBA::Any::_duplicate(any);//返回数据
}
catch(::Exception &e)
{
throw accountsServer::accountServerException(e.Message.c_str());
}
}


编译出来有四个错误,如下 :
[C++ Error] accountsServer.cpp(35): E2247 '_fastcall TDataSetProvider::Reset()' is not accessible
[C++ Error] accountsServer.cpp(36): E2034 Cannot convert 'OleVariant' to 'CORBA_Any_var'
[C++ Error] accountsServer.cpp(44): E2090 Qualifier 'accountsServer' is not a class or namespace name
[C++ Error] accountsServer.cpp(44): E2379 Statement missing ;

光第一个就让我郁闷了一个下午,
麻烦哪位大哥帮小弟看下到底是怎么回事,先谢了
...全文
254 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Waiting4you 2007-05-13
  • 打赏
  • 举报
回复
一:
Provider->Reset(metadata);//提取ADOTable1数据
楼主哪里搞来的代码? 这个Reset是保护的,不能使用. 直接把这句改成ADOTable1->First();应该就行了

二,
没做过CORBA,你试试改成CORBA::Any_var any=SAFEARRAYToAny(VARIANT(Provider->Data));

三,四,
看看accountsServer是不是大小写之类的写错了.

Alex5111985 2007-05-13
  • 打赏
  • 举报
回复
好像有点懂了,不过还是模模糊糊,呵呵。不过还是多谢毛毛大哥。
编译成功了,可是builder exe文件的时候出现如下错误:
[Linker Error] Unresolved external 'SAFEARRAYToAny(tagVARIANT)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\ATM\ACCOUNTSSERVER.OBJ
这又是什么原因?
郁闷,感觉像小朋友猜谜语一样,什么都不懂,在这乱猜,结果还没猜对,额……
请指教哈
Waiting4you 2007-05-13
  • 打赏
  • 举报
回复
第一个是帮助里没有Reset这个方法,根据提示可以认为它是个被保护的方法, 从你的代码看这段好像没什么作用,呵呵
第二个,我是看你的函数名里的SAFEARRAY估计它想要的是SAFEARRAY型数据,OleVariant不支持直接转成SAFEARRAY型,只好用VARIANT中转一下了
第三个从提示里看是没有accountsServer空间名或类名,预计是大小写写错了,你看看.h文件里这个东东是怎么拼写的
第四个是因为第三个的问题引起的
Alex5111985 2007-05-13
  • 打赏
  • 举报
回复
果然,第1,2个问题瞬间秒杀,谢谢毛毛大哥。
不过这是什么意思呢?
不好意思,小弟完全版菜鸟,什么都不懂
Alex5111985 2007-05-12
  • 打赏
  • 举报
回复
楼上朋友的办法我试过了,结果还是一样,还是这四个错误
Alex5111985 2007-05-12
  • 打赏
  • 举报
回复
try
{
CoInitialize(NULL);
TProvider*Provider=new TProvider(this);

ADOTable1->Refresh();//刷新ADOTable1
Provider->DataSet=ADOTable1;
Provider->Reset(metadata);//提取ADOTable1数据 //(这是第一个错误提示的地方)
CORBA::Any_var any=SAFEARRAYToAny(Provider->Data); //(第二个)

delete Provider;
CoUninitialize();
return CORBA::Any::_duplicate(any);//返回数据
}
catch(::Exception &e)
{
throw accountsServer::accountServerException(e.Message.c_str()); //(三、四个)
黑兵 2007-05-12
  • 打赏
  • 举报
回复
你把所有提取出来的PATH的内容目录段的一个"\'”全换成"\\"
然后再ADOTable1->TableName=path+"\\account.db";
silvercx 2007-05-11
  • 打赏
  • 举报
回复
提示的这几个错误出现的地方在哪?做个记号吧.
Alex5111985 2007-05-11
  • 打赏
  • 举报
回复
……偶是完全菜鸟一只……
对不起,可是注册COM是什么?
过客猫2022 2007-05-11
  • 打赏
  • 举报
回复
你有没有注册这个COM啊!
i_love_pc 2007-05-11
  • 打赏
  • 举报
回复
无从下手,只能针对没个错误提示一下
1.函数无法访问,请确认是不是可以调用的成员函数。
2.类型转换错误
3.限定词错误,个人认为异常抛出好像不是这么用的。
4.也许是由于错误3引起

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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