自制组件出错!请高手帮忙!

lyq81404 2003-09-14 06:01:32
我从StringGrid继承自制MyDBGrid组件代码如下:
MyDBGrid.h:
//---------------------------------------------------------------------------

#ifndef MyDBGridH
#define MyDBGridH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <Grids.hpp>
#include <ADODB.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMyDBGrid : public TStringGrid
{
private:
TADOQuery *MasterData;
void __fastcall SetMasterData(TADOQuery *MasterDataSet);
TADOQuery *DetailData;
void __fastcall SetDetailData(TADOQuery *DetailDataSet);
protected:
public:
__fastcall TMyDBGrid(TComponent* Owner);
__published:
__property TADOQuery *MasterDataSet={write=SetMasterData};
__property TADOQuery *DetailDataSet={write=SetDetailData};
};
//---------------------------------------------------------------------------
#endif


MyDBGrid.cpp:

#include <vcl.h>

#pragma hdrstop

#include "MyDBGrid.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TMyDBGrid *)
{
new TMyDBGrid(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyDBGrid::TMyDBGrid(TComponent* Owner)
: TStringGrid(Owner)
{
}
//---------------------------------------------------------------------------
namespace Mydbgrid
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMyDBGrid)};
RegisterComponents("MyComponent", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TMyDBGrid::SetMasterData(TADOQuery *MasterDataSet)
{
MasterData=MasterDataSet;
}
//---------------------------------------------------------------------------
void __fastcall TMyDBGrid::SetDetailData(TADOQuery *DetailDataSet)
{
DetailData=DetailDataSet;
}
安装了以后将控件拖放到窗口时出错:
Access violation at address 4000685E in module 'RTL60.BPL'.Read of address 7FFFFFF8.
再次拖放出错:
A field or method named MyDGBrid1 already exists.
Package窗口,adortl.bpi、dbrtl.bpi、rtl.bpi、vcl.bpi均不能打开提示:
File adortl.bpk not found
...
请问是什么问题?
...全文
49 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyq81404 2003-09-23
  • 打赏
  • 举报
回复
读属性我也加过,但也是有这个问题,
据朋友说在他的CB5上并没有出现问题,
可能与我的CB6环境有关,但我找不到问题所在!
ThinkX 2003-09-22
  • 打赏
  • 举报
回复
__property TADOQuery *MasterDataSet={write=SetMasterData};
__property TADOQuery *DetailDataSet={write=SetDetailData};
改为
__property TADOQuery *MasterDataSet={write=SetMasterData, read=MasterData};
__property TADOQuery *DetailDataSet={write=SetDetailData, read=DetailData};

kingcaiyao 2003-09-22
  • 打赏
  • 举报
回复
再新建一个组件包,然后再将这个你的源文件加入到新建的组件包中,再进行编译,安装。
kingcaiyao 2003-09-22
  • 打赏
  • 举报
回复
TO santos:
两个TADOQuery只是属性,无需在对象中动态构造。
ThinkX 2003-09-22
  • 打赏
  • 举报
回复
我试过了,我这么做没有问题的,
你虽然不需要它的读方法,但是也许IDE需要,
如果你不需要它的读方法,为什么把它设置为属性,用两个函数多好。
其实只写属性是非常少见的。
lyq81404 2003-09-22
  • 打赏
  • 举报
回复
to kingcaiyao(AKing) :
新建过好多次了!还是不行啊!

to ThinkX(思·秋天的树·求职中) :
我不需要他的读方法!
Santos 2003-09-21
  • 打赏
  • 举报
回复
能把报错信息贴出来吗?:)
lyq81404 2003-09-17
  • 打赏
  • 举报
回复
还是一样的出错!
Santos 2003-09-16
  • 打赏
  • 举报
回复
因为你没有为两个TADOQuery对象分配空间呀 :)

__fastcall TMyDBGrid::TMyDBGrid(TComponent* Owner)
: TStringGrid(Owner)
{
MasterData = new TADOQuery(this);
DetailData= new TADOQuery(this);
}
//---------------------------------------------------------------------------

coolfire729 2003-09-15
  • 打赏
  • 举报
回复
是不是写个类更实用哦
coolfire729 2003-09-15
  • 打赏
  • 举报
回复
up ^_^
lyq81404 2003-09-15
  • 打赏
  • 举报
回复
我早就搜索了,没搜索到,又不知道该怎么样去新建这个包文件,
所以一直没有能够解决这个问题,
开始以为是必须要有TDataLink来进行数据连接,但改了以后仍然不行,
不只是adirtk.bpk找不到,rtl.bpk、vcl.bpk都找不到,
现在该怎么办?
kingcaiyao 2003-09-15
  • 打赏
  • 举报
回复
adort1.bpk文件应该是你自已创建的一个package文件吧。
这样,你可从整个硬盘搜索adort1.bpk这个文件,如果找不到这个文件,则再新建一个包文件,然后将你上面的MyDBGrid.cpp文件加入到包文件中,再进行编译,安装。
lyq81404 2003-09-15
  • 打赏
  • 举报
回复
我找不到adortl.bpk文件!
kingcaiyao 2003-09-14
  • 打赏
  • 举报
回复
这应该与BCB6有关,我在BCB5下做一个和你一模一样的代码未发现任何错误。
你打开abort1.bpk这个包的Options选项看看,看看它是设计期的包还是运行期的包,还是设计期和运行期的包。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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