#i110111# fix access column names problem
This commit is contained in:
@@ -296,9 +296,10 @@ void OKeySet::construct(const Reference< XResultSet>& _xDriverSet,const ::rtl::O
|
||||
aFilter.append(aAnd);
|
||||
}
|
||||
|
||||
Reference< XSingleSelectQueryComposer> xSourceComposer(m_xComposer,UNO_QUERY);
|
||||
Reference< XMultiServiceFactory > xFactory(m_xConnection, UNO_QUERY_THROW);
|
||||
Reference<XSingleSelectQueryComposer> xAnalyzer(xFactory->createInstance(SERVICE_NAME_SINGLESELECTQUERYCOMPOSER),UNO_QUERY);
|
||||
xAnalyzer->setElementaryQuery(m_xComposer->getQuery());
|
||||
xAnalyzer->setElementaryQuery(xSourceComposer->getElementaryQuery());
|
||||
Reference<XTablesSupplier> xTabSup(xAnalyzer,uno::UNO_QUERY);
|
||||
Reference<XNameAccess> xSelectTables(xTabSup->getTables(),uno::UNO_QUERY);
|
||||
const Sequence< ::rtl::OUString> aSeq = xSelectTables->getElementNames();
|
||||
|
@@ -47,6 +47,7 @@
|
||||
#include <com/sun/star/sdbc/DataType.hpp>
|
||||
#include <com/sun/star/sdbc/XResultSetMetaData.hpp>
|
||||
#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
|
||||
#include <com/sun/star/sdbc/XParameters.hpp>
|
||||
#include <com/sun/star/uno/XAggregation.hpp>
|
||||
#include <com/sun/star/util/XNumberFormatter.hpp>
|
||||
/** === end UNO includes === **/
|
||||
@@ -708,13 +709,28 @@ Reference< XNameAccess > SAL_CALL OSingleSelectQueryComposer::getColumns( ) thr
|
||||
}
|
||||
catch( const Exception& ) { }
|
||||
|
||||
if ( !xResultSetMeta.is() )
|
||||
try
|
||||
{
|
||||
xStatement.reset( Reference< XStatement >( m_xConnection->createStatement(), UNO_QUERY_THROW ) );
|
||||
Reference< XPropertySet > xStatementProps( xStatement, UNO_QUERY_THROW );
|
||||
try { xStatementProps->setPropertyValue( PROPERTY_ESCAPE_PROCESSING, makeAny( sal_False ) ); }
|
||||
catch ( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); }
|
||||
xResMetaDataSup.set( xStatement->executeQuery( sSQL ), UNO_QUERY_THROW );
|
||||
if ( !xResultSetMeta.is() )
|
||||
{
|
||||
xStatement.reset( Reference< XStatement >( m_xConnection->createStatement(), UNO_QUERY_THROW ) );
|
||||
Reference< XPropertySet > xStatementProps( xStatement, UNO_QUERY_THROW );
|
||||
try { xStatementProps->setPropertyValue( PROPERTY_ESCAPE_PROCESSING, makeAny( sal_False ) ); }
|
||||
catch ( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); }
|
||||
xResMetaDataSup.set( xStatement->executeQuery( sSQL ), UNO_QUERY_THROW );
|
||||
xResultSetMeta.set( xResMetaDataSup->getMetaData(), UNO_QUERY_THROW );
|
||||
}
|
||||
}
|
||||
catch( const Exception& )
|
||||
{
|
||||
//@see issue http://qa.openoffice.org/issues/show_bug.cgi?id=110111
|
||||
// access returns a different order of column names when executing select * from
|
||||
// and asking the columns from the metadata.
|
||||
Reference< XParameters > xParameters( xPreparedStatement, UNO_QUERY_THROW );
|
||||
Reference< XIndexAccess > xPara = getParameters();
|
||||
for(sal_Int32 i = 1;i <= xPara->getCount();++i)
|
||||
xParameters->setNull(i,DataType::VARCHAR);
|
||||
xResMetaDataSup.set(xPreparedStatement->executeQuery(), UNO_QUERY_THROW );
|
||||
xResultSetMeta.set( xResMetaDataSup->getMetaData(), UNO_QUERY_THROW );
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user