diff options
-rw-r--r-- | sw/source/ui/fldui/flddb.cxx | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sw/source/ui/fldui/flddb.cxx b/sw/source/ui/fldui/flddb.cxx index cb2763b475a6..4c823118ae3a 100644 --- a/sw/source/ui/fldui/flddb.cxx +++ b/sw/source/ui/fldui/flddb.cxx @@ -24,6 +24,7 @@ #include <dbfld.hxx> #include <fldtdlg.hxx> #include <numrule.hxx> +#include <doc.hxx> #include "flddb.hxx" #include <dbconfig.hxx> @@ -78,6 +79,14 @@ SwFieldDBPage::~SwFieldDBPage() void SwFieldDBPage::dispose() { + SwWrtShell* pSh = GetWrtShell(); + if (!pSh) + pSh = ::GetActiveWrtShell(); + // This would cleanup in the case of cancelled dialog + SwDBManager* pDbManager = pSh->GetDoc()->GetDBManager(); + if (pDbManager) + pDbManager->RevokeLastRegistrations(); + m_pTypeLB.clear(); m_pDatabaseTLB.clear(); m_pAddDBPB.clear(); @@ -208,6 +217,10 @@ bool SwFieldDBPage::FillItemSet(SfxItemSet* ) if(!pSh) pSh = ::GetActiveWrtShell(); + SwDBManager* pDbManager = pSh->GetDoc()->GetDBManager(); + if (pDbManager) + pDbManager->CommitLastRegistrations(); + if (aData.sDataSource.isEmpty()) aData = pSh->GetDBData(); @@ -477,7 +490,11 @@ IMPL_LINK( SwFieldDBPage, TreeSelectHdl, SvTreeListBox *, pBox, void ) IMPL_LINK_NOARG(SwFieldDBPage, AddDBHdl, Button*, void) { - OUString sNewDB = SwDBManager::LoadAndRegisterDataSource(this); + SwWrtShell* pSh = GetWrtShell(); + if (!pSh) + pSh = ::GetActiveWrtShell(); + + OUString sNewDB = SwDBManager::LoadAndRegisterDataSource(this, pSh->GetDoc()->GetDocShell()); if(!sNewDB.isEmpty()) { m_pDatabaseTLB->AddDataSource(sNewDB); |