Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > запуск отчёта Access из Builder


Автор: Perun 21.7.2008, 14:44
Нужно сформировать отчёт по БД. Работаю С++Builder 2006 + Access.
Как лучше поступить: использовать RaveReport
или ,при наличии Access на машине, запустить отчёт из Acces? 
(Если можно запустить отчёт из Access, то как??? )

Автор: NightWishMaster 21.7.2008, 16:05
Acces из Builder не запускал, но запускал и работал с Word, думаю должно быть похоже. С вордом приблизительно так (для примера):

Код

Variant WordServ, WordSelection, DocServ, Font, Paragraph, ShapeMine;
try {WordServ = Variant::GetActiveObject("Word.Application");}
catch(Exception &) {WordServ = Variant::CreateObject("Word.Application");}
(WordServ.OlePropertyGet("Options")).OlePropertySet("CheckSpellingAsYouType", false);
(WordServ.OlePropertyGet("Options")).OlePropertySet("CheckGrammarAsYouType", false);
(WordServ.OlePropertyGet("Documents")).OleProcedure("Add");
DocServ = WordServ.OlePropertyGet("ActiveDocument");
(DocServ.OlePropertyGet("PageSetup")).OlePropertySet("TopMargin", 28.4);
(DocServ.OlePropertyGet("PageSetup")).OlePropertySet("LeftMargin", 56.8);
(DocServ.OlePropertyGet("PageSetup")).OlePropertySet("RightMargin", 28.4);
(DocServ.OlePropertyGet("PageSetup")).OlePropertySet("BottomMargin", 28.4);
WordSelection = WordServ.OlePropertyGet("Selection");
Font = WordSelection.OlePropertyGet("Font");
Paragraph = WordSelection.OlePropertyGet("ParagraphFormat");
ShapeMine = WordSelection.OlePropertyGet("ShapeRange");
Font.OlePropertySet("Size", 12);
WordSelection.OleProcedure("InsertAfter", WideString(("Результаты исследования сигнала \"" + *FileName + "\"\n\n").c_str()).c_bstr());
Font.OlePropertySet("Bold", true); Font.OlePropertySet("Name", "Arial");
Paragraph.OlePropertySet("Alignment", 1);
WordSelection.OleProcedure("Collapse", 0);

Т.е. управляете командами VBA, используя функции технологии OLE.

Автор: Alca 21.7.2008, 16:07
Код

//OpenReport

const
 acViewNormal = $00000000;
 acViewDesign = $00000001;
 acViewPreview = $00000002;
 acQuitPrompt = $00000000;
 acQuitSaveAll = $00000001;
 acQuitSaveNone = $00000002;
var
 Access: Variant;
begin
// Открываем Access
try
  Access:=GetActiveOleObject('Access.Application');
except
  Access:=CreateOleObject('Access.Application');
end;
Access.Visible := True;
Access.OpenCurrentDatabase('Payments.mdb', True);
Access.DoCmd.OpenReport('rDone', acViewPreview, EmptyParam, EmptyParam);
Access.CloseCurrentDatabase;
Access.Quit(acQuitSaveAll);
end; 

Автор: Perun 21.7.2008, 16:31
Спасибо, проверю сегодня

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)