summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/dbmgr.hxx13
-rw-r--r--sw/source/ui/dbui/dbmgr.cxx26
2 files changed, 33 insertions, 6 deletions
diff --git a/sw/inc/dbmgr.hxx b/sw/inc/dbmgr.hxx
index 94fc7214aeb5..74d4af391d1d 100644
--- a/sw/inc/dbmgr.hxx
+++ b/sw/inc/dbmgr.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: dbmgr.hxx,v $
*
- * $Revision: 1.6 $
+ * $Revision: 1.7 $
*
- * last change: $Author: os $ $Date: 2001-02-21 12:13:10 $
+ * last change: $Author: os $ $Date: 2001-02-26 10:26:01 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -157,6 +157,7 @@ struct SwDSParam
BOOL bScrollable;
BOOL bSelectionList;
BOOL bEndOfDB;
+ BOOL bAfterSelection;
long nSelectionIndex;
SwDSParam(const String& rSource, const String& rTable, BYTE nType, const String& rStatement) :
@@ -167,6 +168,7 @@ struct SwDSParam
bScrollable(FALSE),
bSelectionList(FALSE),
bEndOfDB(FALSE),
+ bAfterSelection(FALSE),
nSelectionIndex(0)
{}
@@ -179,10 +181,17 @@ struct SwDSParam
bScrollable(TRUE),
bSelectionList(FALSE),
bEndOfDB(FALSE),
+ bAfterSelection(FALSE),
nSelectionIndex(0),
xResultSet(xResSet),
aSelection(rSelection)
{}
+
+ void CheckEndOfDB()
+ {
+ if(bEndOfDB)
+ bAfterSelection = TRUE;
+ }
};
typedef SwDSParam* SwDSParamPtr;
SV_DECL_PTRARR_DEL(SwDSParamArr, SwDSParamPtr, 0, 5)
diff --git a/sw/source/ui/dbui/dbmgr.cxx b/sw/source/ui/dbui/dbmgr.cxx
index c63f949474d7..668e31124084 100644
--- a/sw/source/ui/dbui/dbmgr.cxx
+++ b/sw/source/ui/dbui/dbmgr.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: dbmgr.cxx,v $
*
- * $Revision: 1.21 $
+ * $Revision: 1.22 $
*
- * last change: $Author: os $ $Date: 2001-02-21 12:27:32 $
+ * last change: $Author: os $ $Date: 2001-02-26 10:26:48 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -414,17 +414,20 @@ BOOL SwNewDBMgr::MergeNew(USHORT nOpt, SwWrtShell& rSh,
{
pMergeData->bEndOfDB = !pMergeData->xResultSet->absolute(
(ULONG)pMergeData->aSelection.getConstArray()[ pMergeData->nSelectionIndex++ ] );
+ pMergeData->CheckEndOfDB();
if(pMergeData->nSelectionIndex >= pMergeData->aSelection.getLength())
pMergeData->bEndOfDB = TRUE;
}
else
{
pMergeData->bEndOfDB = !pMergeData->xResultSet->first();
+ pMergeData->CheckEndOfDB();
}
}
catch(Exception& rExcept)
{
pMergeData->bEndOfDB = TRUE;
+ pMergeData->CheckEndOfDB();
DBG_ERROR("exception in MergeNew()")
}
@@ -1704,12 +1707,14 @@ BOOL SwNewDBMgr::OpenMergeSource(const String& rDataSource,
nPos--;
}
}
+ pMergeData->CheckEndOfDB();
if(1 == pMergeData->xSelectionList->Count())
pMergeData->bEndOfDB = TRUE;
}
else
{
pMergeData->bEndOfDB = !pMergeData->xResultSet->next();
+ pMergeData->CheckEndOfDB();
++pMergeData->nSelectionIndex;
}
Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
@@ -1808,8 +1813,11 @@ BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableNam
BOOL SwNewDBMgr::GetMergeColumnCnt(const String& rColumnName, USHORT nLanguage,
String &rResult, double *pNumber, sal_uInt32 *pFormat)
{
- if(!pMergeData || !pMergeData->xResultSet.is())
+ if(!pMergeData || !pMergeData->xResultSet.is() || pMergeData->bAfterSelection )
+ {
+ rResult.Erase();
return FALSE;
+ }
BOOL bRet = lcl_GetColumnCnt(pMergeData, rColumnName, nLanguage, rResult, pNumber);
return bRet;
@@ -1821,7 +1829,11 @@ BOOL SwNewDBMgr::ToNextMergeRecord()
{
DBG_ASSERT(pMergeData && pMergeData->xResultSet.is(), "no data source in merge")
if(!pMergeData || !pMergeData->xResultSet.is() || pMergeData->bEndOfDB)
+ {
+ if(pMergeData)
+ pMergeData->CheckEndOfDB();
return FALSE;
+ }
try
{
if(pMergeData->bSelectionList)
@@ -1858,6 +1870,7 @@ BOOL SwNewDBMgr::ToNextMergeRecord()
nDiff--;
}
}
+ pMergeData->CheckEndOfDB();
if(pMergeData->nSelectionIndex >= pMergeData->xSelectionList->Count())
pMergeData->bEndOfDB = TRUE;
}
@@ -1865,12 +1878,14 @@ BOOL SwNewDBMgr::ToNextMergeRecord()
{
pMergeData->bEndOfDB = !pMergeData->xResultSet->absolute(
(ULONG)pMergeData->aSelection.getConstArray()[ pMergeData->nSelectionIndex++ ] );
+ pMergeData->CheckEndOfDB();
if(pMergeData->nSelectionIndex >= pMergeData->aSelection.getLength())
pMergeData->bEndOfDB = TRUE;
}
else
{
pMergeData->bEndOfDB = !pMergeData->xResultSet->next();
+ pMergeData->CheckEndOfDB();
++pMergeData->nSelectionIndex;
}
}
@@ -1932,6 +1947,7 @@ sal_Bool SwNewDBMgr::ToRecordId(sal_Int32 nSet)
{
bRet = lcl_MoveAbsolute(pMergeData, nAbsPos);
pMergeData->bEndOfDB = !bRet;
+ pMergeData->CheckEndOfDB();
}
return bRet;
}
@@ -2016,7 +2032,7 @@ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableO
{
if(pFound->bScrollable)
{
- pFound->bEndOfDB = !pMergeData->xResultSet->absolute(
+ pFound->bEndOfDB = !pFound->xResultSet->absolute(
(ULONG)pFound->xSelectionList->GetObject( 0 ) );
}
else
@@ -2028,12 +2044,14 @@ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableO
nPos--;
}
}
+ pFound->CheckEndOfDB();
if(1 == pFound->xSelectionList->Count())
pFound->bEndOfDB = TRUE;
}
else
{
pFound->bEndOfDB = !pFound->xResultSet->next();
+ pFound->CheckEndOfDB();
++pFound->nSelectionIndex;
}
}