使用Rave和MyDac

时间:2012-10-23 09:39:31

标签: mysql c++builder-xe mydac

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

我会问你是否有办法使用TMyQuery组件和可能来提供Rave报告,这是一个打印此类查询结果的简单列表的简单示例。

2 个答案:

答案 0 :(得分:1)

我只知道如何在Delphi中执行此操作,因此您必须将其转换为CBuilder等效项。我很确定Delphi和CBuilder在RAVE组件方面完全相同。我不知道如何以编程方式执行此操作,但使用RAVE报表设计器相对容易。

我使用RAVE TRvDataSetConnection组件将TMyQuery组件链接到报告。

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

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

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

答案 1 :(得分:0)

我自己的方式使用Rave作为通用打印实用程序

void __fastcall TFormMain::Action_ReportExecute(TObject * Sender)
{
    __try
    {
        Screen->Cursor = crHourGlass;
        int maxrow     = 0;
        RvSystem1->Execute();
    }
    __finally
    {
        Screen->Cursor = crDefault;
    }
}

RvSystem1Print:是RvSystem组件的onPrint事件 我无法在运行时构建它所以我必须为每个需要打印实用程序的表单添加一个组件

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的表中的所有记录(包含图像)

int __fastcall UtilClientPmv::DBGridToRaveReport(TDBGrid * grid, TBaseReport * report, int maxrow)
{
    String Fun         = "[UtilClientPmv::DBGridToRaveReport] ";
    TMWTable * mwTable = NULL;
    int iret           = IRET_OK;

    try
    {
        mwTable = (TMWTable*) grid->DataSource->DataSet;
        iret    = MWTableToRaveReport(mwTable, report, maxrow);
    }
    catch (Exception & ex)
    {
        Util::mylog(Fun + Sysutils::Format("ERROR=[%s] ", ARRAYOFCONST((ex.Message))));
    }
    return iret;
}

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

int __fastcall UtilClientPmv::MWTableToRaveReport(TMWTable * mwTable, TBaseReport * report, int maxrow)
{
    String fldName, fldValue, smsg, Fun = "[UtilClientPmv::MWTableToRaveReport] ";
    int tot_row, tot_fld, tot_rec, iret = IRET_OK;
    double x, y, y2, rpos, pgWidth;
    TField * fld = NULL;
    TBookmark bkMark;    // TBookmark == TByteDynArray
    Graphics::TBitmap * bitmap = NULL;

    try
    {
        if (maxrow == 0)
        {
            maxrow = 1000;
        }

        __try
        {
            if (mwTable->Active == false)
            {
                mwTable->Active = true;
            }
            tot_row = mwTable->Data->RecordCount;
            if (tot_row < 0)
            {
                throw Exception("RecordCount in Null");
            }
            if (tot_row > maxrow)
            {
                tot_row = maxrow;
            }

            report->StatusFormat = "Page %d";
            report->Units = unMM;
            pgWidth       = report->PageWidth;

            mwTable->DisableControls();
            bkMark = mwTable->GetBookmark();

            tot_fld = mwTable->FieldCount;
            tot_rec = mwTable->RecordCount;

            int irow = 1, icol;

            mwTable->First();

            report->SetFont("Courier New", 10);
            report->PrintCenter("Report PmvManager", pgWidth / 2);
            report->NewLine();
            report->SetTab(10, pjLeft, 160, 0, 0, 0);

            while (!mwTable->Eof)
            {
                smsg = Sysutils::Format("Record %03d / %03d", ARRAYOFCONST((irow, tot_row)));
                report->PrintTab(smsg);
                report->NewLine();

                for (int icol = 0; icol < tot_fld; icol++)
                {
                    String NumberFormat, strValue;
                    fld     = mwTable->Fields->Fields[icol];
                    fldName = fld->DisplayName;

                    // int lnum = report->LineNum;
                    int lleft = report->LinesLeft();
                    if (lleft == 0)
                    {
                        report->NewPage();
                    }
                    if (fld->DataType == ftBlob)
                    {
                        smsg = Sysutils::Format("%30s : ", ARRAYOFCONST((fldName)));
                        report->PrintTab(smsg);
                        x = report->XPos;
                        y = report->YPos;
                        if (!fld->IsNull)
                        {

                            bitmap = new Graphics::TBitmap();
                            __try
                            {
                                TGraphicField * gFld = (TGraphicField*)fld;
                                if (gFld)
                                {
                                    TMemoryStream * memStream = new TMemoryStream();
                                    __try
                                    {
                                        gFld->SaveToStream(memStream);
                                        if (memStream->Size > 1)
                                        {
                                            memStream->Seek(0, soFromBeginning);
                                            bitmap->LoadFromStream(memStream);
                                            report->PrintBitmapRect(x, y - 3, x + 12, y + 9, bitmap);
                                        }
                                        report->NewLine();
                                        report->NewLine();
                                    }
                                    __finally
                                    {
                                        delete memStream;
                                        memStream = 0;
                                    }
                                }
                            }
                            __finally
                            {
                                delete bitmap;
                                bitmap = 0;
                            }
                        }
                    }
                    else
                    {
                        fldValue = fld->AsString;
                        smsg     = Sysutils::Format("%30s : %s ", ARRAYOFCONST((fldName, fldValue)));
                        report->PrintTab(smsg);
                    }
                    report->NewLine();
                }
                irow++;
                mwTable->Next();

                x = report->XPos;
                y = report->YPos;
                report->MoveTo(2, y);
                report->LineTo(pgWidth - 4, y);
                report->MoveTo(x, y);

                report->NewLine();
                report->NewPara();
            }
        }
        __finally
        {
            mwTable->GotoBookmark(bkMark);
            mwTable->EnableControls();
            mwTable->FreeBookmark(bkMark);
        }

    }
    catch (Exception & ex)
    {
        Util::mylog(Fun + Sysutils::Format("ERROR=[%s] ", ARRAYOFCONST((ex.Message))));
    }
    return iret;

} // __________   UtilClientPmv::MWTableToRaveReport