diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-02-05 10:30:48 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-02-05 10:30:48 +0000 |
commit | 863122b9adecedfcf35ffac1354ef8a85d5b6827 (patch) | |
tree | 0283dbf5597d3782c6bc5ad234d24776738c004a | |
parent | 194016b1d7a3f09baeaddfcfdb369adf15f9cff2 (diff) |
Resolves: tdf#88825 absent datasource causes exception / abort
::dbtools::ensureRowSetConnection throws on failure, and it can fail
of course if the database doesn't exist
its not generally useful to throw through a vcl event handler as that just
leads back to the dispatch loop.
Change-Id: I8e8f4cff06de5684f163ed1b658a8794f54a7df2
-rw-r--r-- | dbaccess/source/ui/browser/sbagrid.cxx | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/dbaccess/source/ui/browser/sbagrid.cxx b/dbaccess/source/ui/browser/sbagrid.cxx index dcd42dc47aeb..632e7fd8e13c 100644 --- a/dbaccess/source/ui/browser/sbagrid.cxx +++ b/dbaccess/source/ui/browser/sbagrid.cxx @@ -971,9 +971,9 @@ Reference< XPropertySet > SbaGridControl::getField(sal_uInt16 nModelPos) else OSL_FAIL("SbaGridControl::getField getColumns returns NULL or ModelPos is > than count!"); } - catch (const Exception&) + catch (const Exception& e) { - OSL_FAIL("SbaGridControl::getField Exception occurred!"); + SAL_WARN("dbaccess", "SbaGridControl::getField Exception occurred: " << e.Message); } return xEmptyReturn; @@ -984,25 +984,33 @@ bool SbaGridControl::IsReadOnlyDB() const // assume yes if anything fails bool bDBIsReadOnly = true; - // the db is the implemented by the parent of the grid control's model ... - Reference< XChild > xColumns(GetPeer()->getColumns(), UNO_QUERY); - if (xColumns.is()) + try { - Reference< XRowSet > xDataSource(xColumns->getParent(), UNO_QUERY); - ::dbtools::ensureRowSetConnection( xDataSource, getContext(), false ); // NOT SURE ABOUT FALSE - Reference< XChild > xConn(::dbtools::getConnection(xDataSource),UNO_QUERY); - if (xConn.is()) + // the db is the implemented by the parent of the grid control's model ... + Reference< XChild > xColumns(GetPeer()->getColumns(), UNO_QUERY); + if (xColumns.is()) { - // ... and the RO-flag simply is implemented by a property - Reference< XPropertySet > xDbProps(xConn->getParent(), UNO_QUERY); - if (xDbProps.is()) + Reference< XRowSet > xDataSource(xColumns->getParent(), UNO_QUERY); + ::dbtools::ensureRowSetConnection( xDataSource, getContext(), false ); // NOT SURE ABOUT FALSE + Reference< XChild > xConn(::dbtools::getConnection(xDataSource),UNO_QUERY); + if (xConn.is()) { - Reference< XPropertySetInfo > xInfo = xDbProps->getPropertySetInfo(); - if (xInfo->hasPropertyByName(PROPERTY_ISREADONLY)) - bDBIsReadOnly = ::comphelper::getBOOL(xDbProps->getPropertyValue(PROPERTY_ISREADONLY)); + // ... and the RO-flag simply is implemented by a property + Reference< XPropertySet > xDbProps(xConn->getParent(), UNO_QUERY); + if (xDbProps.is()) + { + Reference< XPropertySetInfo > xInfo = xDbProps->getPropertySetInfo(); + if (xInfo->hasPropertyByName(PROPERTY_ISREADONLY)) + bDBIsReadOnly = ::comphelper::getBOOL(xDbProps->getPropertyValue(PROPERTY_ISREADONLY)); + } } } } + catch (const Exception& e) + { + SAL_WARN("dbaccess", "SbaGridControl::IsReadOnlyDB Exception occurred: " << e.Message); + } + return bDBIsReadOnly; } |