From: <car...@ho...> - 2002-06-15 22:43:35
|
Hello: I´m testing the last cvs sources and i have ( under Visual Foxpro ) problems with SQL statements that have string parameters ( the results of the execution are incorrect ) that are not null terminated strings, i have this solution for this problem: OdbcStatement.cpp: void OdbcStatement::setParameter(Binding * binding, int parameter) { clearErrors(); if (binding && binding->indicatorPointer && *(binding->indicatorPointer) == SQL_NULL_DATA) { statement->setNull(parameter, 0); return; } try { switch (binding->cType) { case SQL_C_CHAR: { switch( *binding->indicatorPointer ) { case SQL_NTS: statement->setString (parameter, (char*) binding->pointer ); break; default: statement->setString (parameter, (char*)binding->pointer, *binding->indicatorPointer ); break; } } break; ................. } Connection.h: #define PREPAREDSTATEMENT_VERSION 1 class PreparedStatement : public Statement { public: ......... virtual void setString(int index, const char * string, int length) = 0; ......... } IscCallableStatement.h: class IscCallableStatement : public IscPreparedStatement, public CallableStatement { public: ............ virtual void setString(int index, const char * string, int length); ............ } IscCallableStatement.cpp: void IscCallableStatement::setString(int index, const char * string, int length) { Parent::setString(index, string, length); } IscPreparedStatement.h: class IscPreparedStatement : public IscStatement, public PreparedStatement { public: ......... virtual void setString(int index, const char * string, int length); ......... } IscPreparedStatement.cpp: void IscPreparedStatement::setString(int index, const char * string, int length) { getParameter (index - 1)->setString (length, string, true); } Best Regards Carlos Guzmán Álvarez |