Mysql 将Rave与MyDac一起使用

Mysql 将Rave与MyDac一起使用,mysql,c++builder-xe,mydac,Mysql,C++builder Xe,Mydac,我使用的是Cbuilder XE,我想将Rave Report与Mydac组件一起使用,但在我看来,Rave只识别标准TQuery组件,而忽略Mydac版本 我想问您,是否有一种方法可以使用TMyQuery组件和possiby(一个简单的示例,打印此类查询结果的简单列表)为Rave报告提供信息。我只知道如何在Delphi中实现这一点,因此您必须将其转换为CBuilder等同物。我非常确定Delphi和CBuilder在RAVE组件方面是相同的。我不知道如何通过编程实现这一点,但使用RAVE报表设

我使用的是Cbuilder XE,我想将Rave Report与Mydac组件一起使用,但在我看来,Rave只识别标准TQuery组件,而忽略Mydac版本


我想问您,是否有一种方法可以使用TMyQuery组件和possiby(一个简单的示例,打印此类查询结果的简单列表)为Rave报告提供信息。

我只知道如何在Delphi中实现这一点,因此您必须将其转换为CBuilder等同物。我非常确定Delphi和CBuilder在RAVE组件方面是相同的。我不知道如何通过编程实现这一点,但使用RAVE报表设计器相对容易

我使用RAVE-TRvDataSetConnection组件将TMyQuery组件链接到报表

您通常会在数据模块上删除TRvDataSetConnection组件以及查询—每个TMyQuery一个TRvDataSetConnection。您必须将所有SQL字段添加到TMyQuery组件中,以使字段名显示在报表设计器中。您可以通过打开TMyQuery的字段编辑器并点击^F自动完成此操作。如果您与MySQL服务器有有效连接,则字段将填充并被分配正确的数据类型

接下来,在RAVE报表设计器中创建一个新的数据对象,并选择Direct Data View项。将DataView连接到datamodule中的RvDataSetConnections。现在,您可以访问TMyQuery的所有字段。将RAVE Designer中的DataView链接到要在其中显示查询内容的报告栏


B计划是购买并安装FastReports。RAVE非常糟糕:-)

我自己使用RAVE作为通用打印工具的方法

void __fastcall TFormMain::Action_ReportExecute(TObject * Sender)
{
    __try
    {
        Screen->Cursor = crHourGlass;
        int maxrow     = 0;
        RvSystem1->Execute();
    }
    __finally
    {
        Screen->Cursor = crDefault;
    }
}
void __fastcall TFormMain::RvSystem1Print(TObject * Sender)
{
    int maxrow = 0;
    String Fun = "[FormMain::RvSystem1Prin] ";
    try
    {
        RvSystem1->SystemPreview->FormWidth  = ( Screen->Width > 900 ) ? 900 : Screen->Width ;
        RvSystem1->SystemPreview->FormHeight = Screen->Height * 0.9;
        TBaseReport * report                 = (TBaseReport*) Sender;
        UtilClientPmv::DBGridToRaveReport(DBGrid1, report, maxrow);
    }
    catch (Exception & ex)
    {
        Mylog(Fun + Sysutils::Format("ERROR=[%s] ", ARRAYOFCONST((ex.Message))));
    }
}
RvSystem1Print:是RvSystem组件的打印事件 我无法在运行时构建它,因此我必须为需要打印实用程序的每个表单添加一个组件

void __fastcall TFormMain::Action_ReportExecute(TObject * Sender)
{
    __try
    {
        Screen->Cursor = crHourGlass;
        int maxrow     = 0;
        RvSystem1->Execute();
    }
    __finally
    {
        Screen->Cursor = crDefault;
    }
}
void __fastcall TFormMain::RvSystem1Print(TObject * Sender)
{
    int maxrow = 0;
    String Fun = "[FormMain::RvSystem1Prin] ";
    try
    {
        RvSystem1->SystemPreview->FormWidth  = ( Screen->Width > 900 ) ? 900 : Screen->Width ;
        RvSystem1->SystemPreview->FormHeight = Screen->Height * 0.9;
        TBaseReport * report                 = (TBaseReport*) Sender;
        UtilClientPmv::DBGridToRaveReport(DBGrid1, report, maxrow);
    }
    catch (Exception & ex)
    {
        Mylog(Fun + Sysutils::Format("ERROR=[%s] ", ARRAYOFCONST((ex.Message))));
    }
}
DBGridToRaveReport:扫描并打印链接到dbgrid的表中的所有记录(包括图像)

MWTableToRaveReport:扫描并打印表中的所有记录(包括图像)

int\uu fastcall utilclientmpv::MWTableToRaveReport(TMWTable*mwTable,TBaseReport*report,int-maxrow)
{
字符串fldName,fldValue,smsg,Fun=“[utilclientmpv::MWTableToRaveReport]”;
int tot_row,tot_fld,tot_rec,iret=iret_OK;
双x、y、y2、RPO、pgWidth;
t字段*fld=NULL;
TBookmark bkMark;//TBookmark==TByteDynArray
Graphics::TBitmap*位图=空;
尝试
{
如果(maxrow==0)
{
maxrow=1000;
}
__试一试
{
如果(mwTable->Active==false)
{
mwTable->Active=true;
}
tot_row=mwTable->Data->RecordCount;
如果(总计行<0)
{
抛出异常(“记录计数为空”);
}
如果(总计行>最大行)
{
tot_行=最大行;
}
报告->状态格式=“第%d页”;
报表->单位=unMM;
pgWidth=报表->页面宽度;
mwTable->DisableControls();
bkMark=mwTable->GetBookmark();
tot_fld=mwTable->FieldCount;
tot_rec=mwTable->RecordCount;
int irow=1,icol;
mwTable->First();
报告->设置字体(“信使新”,10);
报表->打印中心(“报表PmvManager”,pgWidth/2);
报表->换行符();
报告->设置选项卡(10,pjLeft,160,0,0,0);
而(!mwTable->Eof)
{
smsg=Sysutils::Format(“记录%03d/%03d”,ARRAYOFCONST((irow,tot_行));
报告->打印选项卡(smsg);
报表->换行符();
对于(int icol=0;icol字段->字段[icol];
fldName=fld->DisplayName;
//int lnum=报告->行数;
int-lleft=报告->LinesLeft();
如果(lleft==0)
{
报表->新建页面();
}
如果(fld->DataType==ftBlob)
{
smsg=Sysutils::Format(“%30s:”,ARRAYOFCONST((fldName));
报告->打印选项卡(smsg);
x=报告->XPos;
y=报告->YPO;
如果(!fld->IsNull)
{
位图=新图形::TBitmap();
__试一试
{
TGraphicField*gFld=(TGraphicField*)fld;
如果(gFld)
{
TMemoryStream*memStream=newtmemoryStream();
__试一试
{
gFld->SaveToStream(memStream);
如果(memStream->Size>1)
{
memStream->Seek(0,从开始);
位图->LoadFromStream(memStream);
报表->PrintBitmapRect(x,y-3,x+12,y+9,位图);
}
报表->换行符();
报表->换行符();
}
__最后
{
删除memStream;
memStream=0;
}
}
}
__最后
{