吐血求救 !!!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 ;

光第一个就让我郁闷了一个下午,
麻烦哪位大哥帮小弟看下到底是怎么回事,先谢了
...全文
260 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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引起
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

1,178

社区成员

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

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