diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-02-05 10:30:48 +0000 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2015-02-05 20:56:36 +0000 |
commit | 58d26c75fc30f1fff45b7e3b5cb9b52521ffa810 (patch) | |
tree | ce64c7c0bc87554ee622a77754d497a3d21bb6d0 | |
parent | af9890c60f35c7b84df2543690b0b8c39a884bb6 (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.
(cherry picked from commit 863122b9adecedfcf35ffac1354ef8a85d5b6827)
Conflicts:
dbaccess/source/ui/browser/sbagrid.cxx
Change-Id: I8e8f4cff06de5684f163ed1b658a8794f54a7df2
Reviewed-on: https://gerrit.libreoffice.org/14329
Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
-rw-r--r-- | dbaccess/source/ui/browser/sbagrid.cxx | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/dbaccess/source/ui/browser/sbagrid.cxx b/dbaccess/source/ui/browser/sbagrid.cxx index cf86c83d0b36..c765512de822 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,24 +984,31 @@ 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); - 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); + 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; } |