You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(23) |
Sep
(6) |
Oct
(2) |
Nov
(2) |
Dec
(5) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
|
Feb
(14) |
Mar
(16) |
Apr
(14) |
May
(25) |
Jun
(38) |
Jul
(22) |
Aug
(39) |
Sep
(3) |
Oct
(13) |
Nov
(47) |
Dec
(3) |
2003 |
Jan
(38) |
Feb
(39) |
Mar
(24) |
Apr
(57) |
May
(30) |
Jun
|
Jul
(39) |
Aug
(90) |
Sep
(41) |
Oct
(141) |
Nov
(158) |
Dec
(137) |
2004 |
Jan
(86) |
Feb
(169) |
Mar
(100) |
Apr
(83) |
May
(94) |
Jun
(77) |
Jul
(85) |
Aug
(54) |
Sep
(45) |
Oct
(36) |
Nov
(42) |
Dec
(70) |
2005 |
Jan
(46) |
Feb
(44) |
Mar
(50) |
Apr
(73) |
May
(90) |
Jun
(87) |
Jul
(41) |
Aug
(47) |
Sep
(28) |
Oct
(23) |
Nov
(44) |
Dec
(81) |
2006 |
Jan
(21) |
Feb
(9) |
Mar
(82) |
Apr
(14) |
May
(109) |
Jun
(175) |
Jul
(188) |
Aug
(44) |
Sep
(5) |
Oct
(47) |
Nov
(15) |
Dec
(34) |
2007 |
Jan
(75) |
Feb
(24) |
Mar
(30) |
Apr
(4) |
May
(28) |
Jun
(9) |
Jul
(13) |
Aug
(13) |
Sep
(29) |
Oct
(15) |
Nov
(19) |
Dec
(12) |
2008 |
Jan
(7) |
Feb
(19) |
Mar
(1) |
Apr
(7) |
May
(13) |
Jun
(19) |
Jul
(17) |
Aug
(29) |
Sep
(15) |
Oct
(37) |
Nov
(18) |
Dec
(29) |
2009 |
Jan
(23) |
Feb
(12) |
Mar
(8) |
Apr
(16) |
May
(11) |
Jun
(1) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(9) |
Nov
(17) |
Dec
(31) |
2010 |
Jan
(15) |
Feb
(5) |
Mar
(4) |
Apr
(8) |
May
(1) |
Jun
(5) |
Jul
(17) |
Aug
(2) |
Sep
(12) |
Oct
(33) |
Nov
(14) |
Dec
(24) |
2011 |
Jan
(11) |
Feb
(2) |
Mar
(34) |
Apr
(11) |
May
(12) |
Jun
(3) |
Jul
(6) |
Aug
(11) |
Sep
(10) |
Oct
(1) |
Nov
(8) |
Dec
|
2012 |
Jan
(16) |
Feb
(2) |
Mar
|
Apr
(2) |
May
(6) |
Jun
(2) |
Jul
(7) |
Aug
|
Sep
|
Oct
(7) |
Nov
(22) |
Dec
(2) |
2013 |
Jan
(1) |
Feb
(24) |
Mar
(15) |
Apr
(2) |
May
(3) |
Jun
|
Jul
(2) |
Aug
|
Sep
(2) |
Oct
(6) |
Nov
(10) |
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
(5) |
2015 |
Jan
(1) |
Feb
(4) |
Mar
(3) |
Apr
(3) |
May
|
Jun
(3) |
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2016 |
Jan
(1) |
Feb
(9) |
Mar
(4) |
Apr
|
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(7) |
Nov
(13) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(12) |
Oct
(4) |
Nov
|
Dec
|
2018 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
(6) |
Jun
|
Jul
(9) |
Aug
(4) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2019 |
Jan
(1) |
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
(3) |
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2023 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2025 |
Jan
|
Feb
(2) |
Mar
|
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Paul R. <pr...@ib...> - 2002-07-08 09:56:01
|
Carlos G.A. wrote: > Hello: > > Two little fixes for OdbcStatement::sqlColAttribute : > > 1. Return a value for SQL_DESC_UNNAMED (ODBC 3.0): > > case SQL_DESC_UNNAMED: > value = (metaData->getColumnName (column)) ? SQL_NAMED : > SQL_UNNAMED; > break; OK. > > 2. Return a value for SQL_DESC_BASE_TABLE_NAME (ODBC 3.0): > > case SQL_DESC_BASE_TABLE_NAME: > case SQL_DESC_TABLE_NAME: > string = metaData->getTableName (column); > break; > This doesn't compile - SQL_DESC_TABLE_NAME is defined as SQL_COLUMN_TABLE_NAME. I've changed the code accordingly. Paul -- Paul Reeves http://www.ibphoenix.com Supporting users of Firebird and InterBase |
From: <sc...@de...> - 2002-07-08 09:02:46
|
>Hello: > >The driver gives bad dates when the date value is not in the range >31/12/1901-31/12/2037, i see this in Visual Foxpro, the dates are >good saved but the values in the select-sql statments are incorrect. > >Best Regards > >Carlos Guzm=E1n =C1lvarez >Vigo-Espa=F1a I'm sorry, but I can't reproduce this behaviour. I just fetched the latest CVS-tree and everything concerning DATE and DATETIME works fine... |
From: <sc...@de...> - 2002-07-08 07:08:32
|
Hi folks, now to something completely different: (but very important) in odbcstatement.cpp: RETCODE OdbcStatement::setParameter(Binding * binding, int parameter) line 1165ff: switch( *binding->indicatorPointer ) { case SQL_NTS: statement->setString (parameter, (char*) binding->pointer ); break; default: statement->setString (parameter, (char*)binding->pointer, *binding->indicatorPointer ); // comment this break ! (it makes no sense) // break; } // and put it here after this bracket /.... otherwise there are some awful update-problems break; // that's all |
From: Carlos G.A. <car...@ho...> - 2002-07-07 01:35:15
|
Hello: Two little fixes for OdbcStatement::sqlColAttribute : 1. Return a value for SQL_DESC_UNNAMED (ODBC 3.0): case SQL_DESC_UNNAMED: value = (metaData->getColumnName (column)) ? SQL_NAMED : SQL_UNNAMED; break; 2. Return a value for SQL_DESC_BASE_TABLE_NAME (ODBC 3.0): case SQL_DESC_BASE_TABLE_NAME: case SQL_DESC_TABLE_NAME: string = metaData->getTableName (column); break; Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ Charle con sus amigos online usando MSN Messenger: http://messenger.msn.com |
From: Paul R. <pr...@ib...> - 2002-07-06 12:06:55
|
I've updated the CVS tree with recent contributions from Carlos Alvarez. The only stuff that hasn't gone in are the code changes relating to blob access. These overwrite quite a few other recent changes and I think we need to review the whole area of blob access. Here is a summary of changes from the change log: 2002-07-06 OdbcJdbcSetup.dsp Added post-build step to automatically register newly built driver if debug build is successful. (PR) 2002-07-02 OdbcConnection.cpp Added better management of txn isolation contributed by C. G. Alvarez 2002-07-02 IscProcedureColumnsResultSet.cpp Contributed by C. G. Alvarez Fixed invalid table alias in typos in getProcedureColumns() 2002-07-01 TypesResultSet.h Extended and amended to support SQLGetTypeInfo with OleDb and .Net. C. G. Alvarez 2002-07-01 Types.h Added some type definitions. C. G. Alvarez 2002-07-01 OdbcConnection.cpp Added SQL_API_SQLSETCONNECTOPTION to supportedFunctions C. G. Alvarez Paul -- Paul Reeves http://www.ibphoenix.com Supporting users of Firebird and InterBase |
From: Carlos G.A. <car...@ho...> - 2002-07-05 17:48:41
|
Hello: The driver gives bad dates when the date value is not in the range 31/12/1901-31/12/2037, i see this in Visual Foxpro, the dates are good saved but the values in the select-sql statments are incorrect. Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ Únase al mayor servicio mundial de correo electrónico: http://www.hotmail.com/es |
From: Carlos G. Á. <car...@ho...> - 2002-07-05 15:06:29
|
Hello: Sorry, -2 is SQL_DATA_AT_EXEC jeje Best regards Carlos Guzman Alvarez Vigo-España ""Carlos Guzman Alvarez"" <car...@ho...> escribió en el mensaje news:ag3ub7$llm$1...@ne...... > Hola: > > The -2 value is SQL_NEED_DATA this indicate that the data for the field > would be obtained at execution. > The CVS sources of the driver don4t manage data at exec parameters when the > parameter is a SQL_LONGVARCHAR field, i send some changes for solove this > issue to Paul Reeves ( and to the list ) with new implementation for > SQLPutData and SQLParamData. > > > > Best regards > Carlos Guzman Alvarez > > > <sc...@de...> escribis en el mensaje > news:3D25C182.31816.5AB804@localhost... > > Hello , > > > > I found a new problem when using VFP with "oversized" varchars. I > > tried a > > VARCHAR(8000) in a remoteview but the odbcjdbc tries to allocate > > -2 bytes > > of memory (0xfffffffe). The bug appears in OdbcStatement.cpp at > > line 1157 > > ... > > > > case SQL_C_CHAR: > > //Orig > > // statement->setString (parameter, > > (char*) binding- > > >pointer); > > // break; > > //Suggested by CGA to handle situation where strings are NOT > > null-terminated. > > switch( *binding->indicatorPointer ) > > { > > case SQL_NTS: > > statement->setString (parameter, (char*) > > binding->pointer ); break; > > > > default: > > statement->setString (parameter, > > (char*)binding->pointer, *binding- > > >indicatorPointer ); > > break; > > } > > > > #### > > continuing in Value.cpp line 176f: > > ## > > void Value::setString(int length, const char * string, bool copy) > > clear(); > > type = String; > > copyFlag = copy; > > data.string.length = length; > > if (copy) > > { > > data.string.string = new char [length + 1]; > > memcpy (data.string.string, string, length); > > data.string.string [length] = 0; > > } > > else > > data.string.string = (char*) string; > > } > > length is -2 and the (char *)string point to "newercombackmem" > > > > does anyone know, what to do ? > > > > (in my VFP-remote-view this field is a "memo") > > > > > > ------------------------------------------------------- > > This sf.net email is sponsored by:ThinkGeek > > Bringing you mounds of caffeinated joy. > > http://thinkgeek.com/sf > > _______________________________________________ > > Firebird-odbc-devel mailing list > > Fir...@li... > > https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel > > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Bringing you mounds of caffeinated joy. > http://thinkgeek.com/sf > _______________________________________________ > Firebird-odbc-devel mailing list > Fir...@li... > https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel > |
From: Carlos G. Á. <car...@ho...> - 2002-07-05 14:56:59
|
Hola: The -2 value is SQL_NEED_DATA this indicate that the data for the field would be obtained at execution. The CVS sources of the driver don´t manage data at exec parameters when the parameter is a SQL_LONGVARCHAR field, i send some changes for solove this issue to Paul Reeves ( and to the list ) with new implementation for SQLPutData and SQLParamData. Best regards Carlos Guzman Álvarez <sc...@de...> escribió en el mensaje news:3D25C182.31816.5AB804@localhost... > Hello , > > I found a new problem when using VFP with "oversized" varchars. I > tried a > VARCHAR(8000) in a remoteview but the odbcjdbc tries to allocate > -2 bytes > of memory (0xfffffffe). The bug appears in OdbcStatement.cpp at > line 1157 > ... > > case SQL_C_CHAR: > //Orig > // statement->setString (parameter, > (char*) binding- > >pointer); > // break; > //Suggested by CGA to handle situation where strings are NOT > null-terminated. > switch( *binding->indicatorPointer ) > { > case SQL_NTS: > statement->setString (parameter, (char*) > binding->pointer ); break; > > default: > statement->setString (parameter, > (char*)binding->pointer, *binding- > >indicatorPointer ); > break; > } > > #### > continuing in Value.cpp line 176f: > ## > void Value::setString(int length, const char * string, bool copy) > clear(); > type = String; > copyFlag = copy; > data.string.length = length; > if (copy) > { > data.string.string = new char [length + 1]; > memcpy (data.string.string, string, length); > data.string.string [length] = 0; > } > else > data.string.string = (char*) string; > } > length is -2 and the (char *)string point to "newercombackmem" > > does anyone know, what to do ? > > (in my VFP-remote-view this field is a "memo") > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Bringing you mounds of caffeinated joy. > http://thinkgeek.com/sf > _______________________________________________ > Firebird-odbc-devel mailing list > Fir...@li... > https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel > |
From: <sc...@de...> - 2002-07-05 13:54:14
|
Hello , I found a new problem when using VFP with "oversized" varchars. I tried a VARCHAR(8000) in a remoteview but the odbcjdbc tries to allocate -2 bytes of memory (0xfffffffe). The bug appears in OdbcStatement.cpp at line 1157 ... case SQL_C_CHAR: //Orig // statement->setString (parameter, (char*) binding- >pointer); // break; //Suggested by CGA to handle situation where strings are NOT null-terminated. switch( *binding->indicatorPointer ) { case SQL_NTS: statement->setString (parameter, (char*) binding->pointer ); break; default: statement->setString (parameter, (char*)binding->pointer, *binding- >indicatorPointer ); break; } #### continuing in Value.cpp line 176f: ## void Value::setString(int length, const char * string, bool copy) clear(); type = String; copyFlag = copy; data.string.length = length; if (copy) { data.string.string = new char [length + 1]; memcpy (data.string.string, string, length); data.string.string [length] = 0; } else data.string.string = (char*) string; } length is -2 and the (char *)string point to "newercombackmem" does anyone know, what to do ? (in my VFP-remote-view this field is a "memo") |
From: Carlos G.A. <car...@ho...> - 2002-07-05 13:42:41
|
Hello: The driver don´t have implementation for SQLGetEnvAttr ( this is an ODBC 3.x function ): Main.cpp ///// SQLGetEnvAttr ///// RETCODE SQL_API SQLGetEnvAttr (SQLHENV arg0, SQLINTEGER arg1, SQLPOINTER arg2, SQLINTEGER arg3, SQLINTEGER * arg4) { /* notYetImplemented("SQLGetEnvAttr called\n"); return(SQL_SUCCESS); */ TRACE ("SQLGetEnvAttr"); return ((OdbcEnv*) arg0)->sqlGetEnvAttr (arg1, arg2, arg3, arg4); } OdbcEnv.h ( line 39 ) RETCODE sqlGetEnvAttr(int attribute, SQLPOINTER ptr, int bufferLength, SQLINTEGER *lengthPtr); OdbcEnv.cpp RETCODE OdbcEnv::sqlGetEnvAttr(int attribute, SQLPOINTER ptr, int bufferLength, SQLINTEGER *lengthPtr) { clearErrors(); long value; char *string = NULL; try { switch (attribute) { case SQL_ATTR_ODBC_VERSION: value = SQL_OV_ODBC3; break; case SQL_ATTR_OUTPUT_NTS: value = SQL_TRUE; break; default: return sqlReturn (SQL_ERROR, "HYC00", "Optional feature not implemented"); } if (string) return returnStringInfo (ptr, bufferLength, lengthPtr, string); if (ptr) *(long*) ptr = value; if (lengthPtr) *lengthPtr = sizeof (long); } catch (SQLException& exception) { postError ("HY000", exception); return SQL_ERROR; } return sqlSuccess(); } Change implementation of SQLSetEnvattr: RETCODE OdbcEnv::sqlSetEnvAttr(int attribute, SQLPOINTER value, int length) { clearErrors(); try { switch (attribute) { case SQL_ATTR_OUTPUT_NTS: case SQL_ATTR_ODBC_VERSION: break; default: return sqlReturn (SQL_ERROR, "HYC00", "Optional feature not implemented"); } } catch (SQLException& exception) { postError ("HY000", exception); return SQL_ERROR; } return sqlSuccess(); } Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN. Más Útil cada Día. http://www.msn.es/intmap/ |
From: Carlos G.A. <car...@ho...> - 2002-07-02 11:47:06
|
Hello: A few little things about OdbcJdbcDriver. (1) Little change for better management of transaction isolation levels. OdbcConnection.h: 1. Add this at line 85: int transactionIsolation; OdbcConnection.cpp 1. Add this to line 239 ( OdbcConnection::OdbcConnection ) transactionIsolation = SQL_TXN_READ_COMMITTED; 2. Change this at line 293 //Added by CA case SQL_ATTR_TXN_ISOLATION: if( connection ) connection->setTransactionIsolation( (int) value ); break; for //Added by CA case SQL_ATTR_TXN_ISOLATION: transactionIsolation = (int)value; if( connection ) connection->setTransactionIsolation( (int) value ); break; 3. Change this at line 285: connection->setTransactionIsolation( SQL_TXN_READ_COMMITTED ); for connection->setTransactionIsolation( transactionIsolation ); IscDatabaseMetadata.cpp 1. Change this at line 782 int IscDatabaseMetaData::getDefaultTransactionIsolation() { return TRANSACTION_SERIALIZABLE; } for int IscDatabaseMetaData::getDefaultTransactionIsolation() { return TRANSACTION_READ_COMMITTED; } (2) Another little fix, for setting the asyncEnable property of a connection: OdbcConnection.cpp 1. Add this at line 289: case SQL_ATTR_ASYNC_ENABLE: asyncEnable = (int) value == SQL_ASYNC_ENABLE_ON; break; (3) Mapped calls SQLSetStmtOption ( this is deprecated ODBC API function but Visual Foxpro make calls to it when you open a remote view ) to SQLSetStmtAttr: Main.cpp 1. At line 560: ///// SQLSetStmtOption ///// Deprecated RETCODE SQL_API SQLSetStmtOption (HSTMT arg0, UWORD arg1, UDWORD arg2) { /* notYetImplemented("SQLSetStmtOption called\n"); return(SQL_SUCCESS); */ TRACE ("SQLSetStmtOption"); return ((OdbcStatement*) arg0)->sqlSetStmtAttr (arg1, (SQLPOINTER) arg2, 0); } 2. At line 453 Change definition of SQLSetConnectOption for ///// SQLSetConnectOption ///// Level 1 ///// Deprecated //Proposed by Carlos Guzmn lvarez 2002-04-30 RETCODE SQL_API SQLSetConnectOption (HDBC arg0, SQLUSMALLINT arg1, SQLUINTEGER arg2) { TRACE ("SQLSetConnectOption"); return SQLSetConnectAttr (arg0, arg1, (SQLPOINTER)arg2, 0); } 3. At line Change definition of SQLGetConnectOption for ///// SQLGetConnectOption ///// Level 1 ///// Deprecated RETCODE SQL_API SQLGetConnectOption (HDBC arg0, UWORD arg1, PTR arg2) { /* notYetImplemented("SQLGetConnectOption called\n"); return(SQL_SUCCESS); */ TRACE ("SQLGetConnectOption"); return SQLGetConnectAttr (arg0, arg1, arg2, 0, NULL); } (4) Mapped calls SQLGetStmtOption to SQLGetStmtAttr: Main.cpp ///// SQLGetStmtOption ///// Level 1 RETCODE SQL_API SQLGetStmtOption (HSTMT arg0, UWORD arg1, PTR arg2) { /* notYetImplemented("SQLGetStmtOption called\n"); return(SQL_SUCCESS); */ TRACE ("SQLGetStmtOption"); return ((OdbcStatement*) arg0)->sqlGetStmtAttr (arg1, arg2, 0, NULL); } Best regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN Fotos: la forma más fácil de compartir e imprimir fotos. http://photos.msn.es/support/worldwide.aspx |
From: <car...@ho...> - 2002-07-01 19:25:39
|
Hello: This fix is incomplete it works fine for CHAR and VARCHAR fields but not for BLOB fields, i made a few test and it seems to work well, it should be: OdbcStatement.cpp 1. Add this sqlBindCol at line 370 if ( metaData->getColumnType (column) == SQL_CHAR || metaData->getColumnType (column) == SQL_VARCHAR ) binding->dataOffset = 0; Best regards Carlos Guzmán Álvarez Vigo-España Carlos G.A. wrote: > Hello: > > I have another little fix for the driver, the driver return invalid > results for character data in random records/fields: > > OdbcStatement.cpp > > 1. Add this sqlBindCol at line 370 > > binding->dataOffset = 0; > > Best regards > Carlos Guzman Alvarez > Vigo-Espaqa > > _________________________________________________________________ > MSN. Mas Ztil cada Dma. http://www.msn.es/intmap/ > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Firebird-odbc-devel mailing list > Fir...@li... > https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel > |
From: Carlos G.A. <car...@ho...> - 2002-07-01 18:03:48
|
Hello: I have another little fix for the driver, the driver return invalid results for character data in random records/fields: OdbcStatement.cpp 1. Add this sqlBindCol at line 370 binding->dataOffset = 0; Best regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN. Más Útil cada Día. http://www.msn.es/intmap/ |
From: Carlos G.A. <car...@ho...> - 2002-07-01 13:44:25
|
Hello: The SQLGetConnectOption don´t have implementation i have mapped the calls to this function to SQLGetConnectAttr and add it to the supported list functions, it seems to work well. Main.cpp: ///// SQLGetConnectOption ///// Level 1 RETCODE SQL_API SQLGetConnectOption (HDBC arg0, UWORD arg1, PTR arg2) { /* notYetImplemented("SQLGetConnectOption called\n"); return(SQL_SUCCESS); */ TRACE ("SQLGetConnectOption"); return SQLGetConnectAttr (arg0, arg1, (SQLPOINTER *)arg2, 0, NULL); } OdbcConnection.cpp: static const int supportedFunctions [] = { // Deprecated but important stuff SQL_API_SQLALLOCCONNECT, SQL_API_SQLALLOCENV, SQL_API_SQLALLOCSTMT, SQL_API_SQLFREECONNECT, SQL_API_SQLFREEENV, SQL_API_SQLFREESTMT, SQL_API_SQLCOLATTRIBUTES, SQL_API_SQLERROR, SQL_API_SQLSETPARAM, SQL_API_SQLTRANSACT, SQL_API_SQLSETCONNECTOPTION, SQL_API_SQLGETCONNECTOPTION, SQL_API_SQLENDTRAN, SQL_API_SQLALLOCHANDLE, SQL_API_SQLGETDESCFIELD, SQL_API_SQLBINDCOL, SQL_API_SQLGETDESCREC, SQL_API_SQLCANCEL, SQL_API_SQLGETDIAGFIELD, SQL_API_SQLCLOSECURSOR, SQL_API_SQLGETDIAGREC, SQL_API_SQLCOLATTRIBUTE, SQL_API_SQLGETENVATTR, SQL_API_SQLCONNECT, SQL_API_SQLGETFUNCTIONS, SQL_API_SQLCOPYDESC, SQL_API_SQLGETINFO, SQL_API_SQLDATASOURCES, SQL_API_SQLGETSTMTATTR, SQL_API_SQLDESCRIBECOL, SQL_API_SQLGETTYPEINFO, SQL_API_SQLDISCONNECT, SQL_API_SQLNUMRESULTCOLS, SQL_API_SQLDRIVERS, SQL_API_SQLPARAMDATA, SQL_API_SQLENDTRAN, SQL_API_SQLPREPARE, SQL_API_SQLEXECDIRECT, SQL_API_SQLPUTDATA, SQL_API_SQLEXECUTE, SQL_API_SQLROWCOUNT, SQL_API_SQLFETCH, SQL_API_SQLSETCONNECTATTR, SQL_API_SQLFETCHSCROLL, SQL_API_SQLSETCURSORNAME, SQL_API_SQLFREEHANDLE, SQL_API_SQLSETDESCFIELD, SQL_API_SQLFREESTMT, SQL_API_SQLSETDESCREC, SQL_API_SQLGETCONNECTATTR, SQL_API_SQLSETENVATTR, SQL_API_SQLGETCURSORNAME, SQL_API_SQLSETSTMTATTR, SQL_API_SQLGETDATA, // The following is a list of valid values for FunctionId for functions conforming to the X/Open standards - compliance level,, SQL_API_SQLCOLUMNS, SQL_API_SQLSTATISTICS, SQL_API_SQLSPECIALCOLUMNS, SQL_API_SQLTABLES, //The following is a list of valid values for FunctionId for functions conforming to the ODBC standards - compliance level,, SQL_API_SQLBINDPARAMETER, SQL_API_SQLNATIVESQL, SQL_API_SQLBROWSECONNECT, SQL_API_SQLNUMPARAMS, SQL_API_SQLBULKOPERATIONS, SQL_API_SQLPRIMARYKEYS, SQL_API_SQLCOLUMNPRIVILEGES, SQL_API_SQLPROCEDURECOLUMNS, SQL_API_SQLDESCRIBEPARAM, SQL_API_SQLPROCEDURES, SQL_API_SQLDRIVERCONNECT, SQL_API_SQLSETPOS, SQL_API_SQLFOREIGNKEYS, SQL_API_SQLTABLEPRIVILEGES, SQL_API_SQLMORERESULTS, }; Best regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN Fotos: la forma más fácil de compartir e imprimir fotos. http://photos.msn.es/support/worldwide.aspx |
From: Paul R. <pr...@ib...> - 2002-07-01 10:29:17
|
Carlos G.A. wrote: > Hello: > > I have made changes to the CVS sources for make that binary and text > BLOB fields work under Visual Foxpro. > I made the test with a text BLOB field with 146948 characters and two > binary BLOB fields wich cointains two images of > 644 kb and 89,5 kb and it seems to work fine. > > Here is the list of changes: Could you send me the changed files (privately if you wish). I can diff them more easily and resolve the changes. Robert Milharcic may be interested, too. This is an area that he has tried to fix recently. Paul -- Paul Reeves http://www.ibphoenix.com Supporting users of Firebird and InterBase |
From: Carlos G.A. <car...@ho...> - 2002-07-01 10:11:10
|
Hello: I send to you the modified files say to me what do you think about it Best regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ Charle con sus amigos online usando MSN Messenger: http://messenger.msn.com |
From: <car...@ho...> - 2002-07-01 09:43:12
|
Hello: It´s a goog idea i will made it and send to you Best regards Carlos G.A. Vigo-España Paul Reeves wrote: > Carlos G.A. wrote: > > > > > > 2. I have more modifications for the SQLGetTypeInfo function ( i send > > the files ), with this modifications an application can create > > tables and make selects with the information returned by this > > function. > > > > > You have added hard coded values to TypesResultSet.cpp - for instance: > > > #define BLOB(type,code,prefix,suffix) > type,code,2147483647,prefix,suffix,NULL,NULLABLE,CASE_SENSITIVE, > UNSEARCHABLE,NOT_NUMERIC,NOT_NUMERIC,NOT_NUMERIC,type,UNSCALED,UNSCALED > > I believe values such as 2147483647 should be constants. It will make > the code easier to read. The programmer's intention will become clearer > especially for values that depend upon a system or platform > implementation that is liable to change in the future. > > Can you replace the values with the constants you mean them to be? They > should already be declared in existing header files. > > > Paul |
From: Carlos G.A. <car...@ho...> - 2002-07-01 09:39:39
|
Hello: I have made changes to the CVS sources for make that binary and text BLOB fields work under Visual Foxpro. I made the test with a text BLOB field with 146948 characters and two binary BLOB fields wich cointains two images of 644 kb and 89,5 kb and it seems to work fine. Here is the list of changes: OdbcStatement.h: 1. Modified Binding struct struct Binding { int type; int cType; int sqlType; void *pointer; SQLINTEGER bufferLength; //Suggested by R. Milharcic SQLINTEGER dataOffset; bool startedTransfer; bool data_at_exec; SQLINTEGER *indicatorPointer; }; 2. Modified declaration of sqlParamData for: RETCODE sqlParamData(SQLPOINTER *ptr); 3. Returned declaration of setParameter to the original declaration: void setParameter (Binding *binding, int parameter); 4. Removed declarations of: RETCODE setParameters(); //Added 2002-06-04 RM void executeSQL(); //Added 2002-06-04 RM OdbcStatement.cpp: 1. Removed definitions of: RETCODE setParameters(); //Added 2002-06-04 RM void executeSQL(); //Added 2002-06-04 RM 2. Remove comments in executeStatement and made a new implementation of it: RETCODE OdbcStatement::executeStatement() { parameterNeedData = -1; for (int n = 0; n < numberParameters; ++n) { Binding *binding = parameters + n; if ( ( binding->pointer || binding->indicatorPointer ) && binding->type != SQL_PARAM_OUTPUT ) if( *binding->indicatorPointer == SQL_DATA_AT_EXEC || *binding->indicatorPointer < SQL_LEN_DATA_AT_EXEC_OFFSET ) return SQL_NEED_DATA; else setParameter (binding, n + 1); } if (callableStatement) for (int n = 0; n < numberParameters; ++n) { Binding *binding = parameters + n; if (binding->pointer && binding->type != SQL_PARAM_INPUT) callableStatement->registerOutParameter (n + 1, binding->sqlType); } statement->execute(); connection->transactionStarted(); if (callableStatement) for (int n = 0; n < numberParameters; ++n) { Binding *binding = parameters + n; if (binding->pointer && binding->type != SQL_PARAM_INPUT) setValue (binding, n + 1); } getResultSet(); return SQL_SUCCESS; } 3. New implementation for sqlParamData and sqlPutData: RETCODE OdbcStatement::sqlParamData(SQLPOINTER *ptr) { RETCODE retcode = sqlSuccess(); clearErrors(); for (int n = 0; n < numberParameters; ++n) { Binding *binding = parameters + n; if( binding->indicatorPointer && !binding->startedTransfer && ( *binding->indicatorPointer == SQL_DATA_AT_EXEC || *binding->indicatorPointer < SQL_LEN_DATA_AT_EXEC_OFFSET ) ) { parameterNeedData = n; *ptr = binding->pointer; binding->data_at_exec = true; switch (binding->cType) { case SQL_C_CHAR: { if ( !binding->startedTransfer ) { binding->startedTransfer = true; *binding->indicatorPointer = 0; statement->beginClobDataTransfer(n+1); } return SQL_NEED_DATA; } break; case SQL_C_BINARY: { if ( !binding->startedTransfer ) { binding->startedTransfer = true; *binding->indicatorPointer = 0; statement->beginBlobDataTransfer(n+1); } return SQL_NEED_DATA; } break; } } else { if (binding->startedTransfer) { binding->startedTransfer = false; if(binding->data_at_exec) switch (binding->cType) { case SQL_C_CHAR: statement->endClobDataTransfer(); break; case SQL_C_BINARY: statement->endBlobDataTransfer(); break; } } } } try { retcode = executeStatement(); } catch (SQLException& exception) { postError ("HY000", exception); retcode = SQL_ERROR; } if (retcode && retcode != SQL_SUCCESS_WITH_INFO) return retcode; return sqlSuccess(); } RETCODE OdbcStatement::sqlPutData (SQLPOINTER value, SQLINTEGER valueSize) { if (parameterNeedData == -1) return sqlReturn (SQL_ERROR, "HY010", "Function sequence error :: OdbcStatement::sqlPutData"); if (parameterNeedData >= numberParameters) return sqlReturn (SQL_ERROR, "HY000", "General error :: OdbcStatement::sqlPutData"); Binding *binding = parameters + parameterNeedData; if (!binding) return sqlReturn (SQL_ERROR, "HY000", "General error :: OdbcStatement::sqlPutData"); if (valueSize == SQL_NULL_DATA) { *binding->indicatorPointer = SQL_NULL_DATA; return SQL_SUCCESS; } switch (binding->cType) { case SQL_C_CHAR: { if(valueSize == SQL_NTS) valueSize = strlen( (char*)value ); *binding->indicatorPointer += valueSize; statement->putClobSegmentData (valueSize, value); } break; case SQL_C_BINARY: { *binding->indicatorPointer += valueSize; statement->putBlobSegmentData (valueSize, value); } break; } return sqlSuccess(); } 4. Changes in setParameter for manage data at exec parameters: 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: { if (!binding->data_at_exec) switch( *binding->indicatorPointer ) { case SQL_NTS: statement->setString (parameter, (char*) binding->pointer ); break; default: statement->setString (parameter, (char*) binding->pointer, *binding->indicatorPointer ); break; } } break; case SQL_C_SHORT: case SQL_C_SSHORT: case SQL_C_USHORT: statement->setShort (parameter, *(short*) binding->pointer); break; case SQL_C_LONG: case SQL_C_SLONG: case SQL_C_ULONG: statement->setInt (parameter, *(long*) binding->pointer); break; case SQL_C_FLOAT: statement->setFloat (parameter, *(float*) binding->pointer); break; case SQL_C_DOUBLE: statement->setDouble (parameter, *(double*) binding->pointer); break; case SQL_C_TINYINT: case SQL_C_STINYINT: case SQL_C_UTINYINT: statement->setByte (parameter, *(char*) binding->pointer); break; case SQL_C_SBIGINT: case SQL_C_UBIGINT: statement->setLong (parameter, *(QUAD*) binding->pointer); break; case SQL_C_TYPE_TIMESTAMP: { OdbcDateTime converter; tagTIMESTAMP_STRUCT *var = (tagTIMESTAMP_STRUCT*) binding->pointer; /* Orig. // this is obsolete ... I want more days ;-) DateTime dateTime; converter.convert (var, &dateTime); statement->setDate (parameter, dateTime); */ //From B. Schulte TimeStamp timestamp; converter.convert (var, ×tamp); statement->setTimestamp ( parameter, timestamp); } break; case SQL_C_TYPE_DATE: { OdbcDateTime converter; tagDATE_STRUCT *var = (tagDATE_STRUCT*) binding->pointer; DateTime dateTime; converter.convert (var, &dateTime); statement->setDate (parameter, dateTime); } break; case SQL_C_TYPE_TIME: { tagTIME_STRUCT *var = (tagTIME_STRUCT*) binding->pointer; SqlTime dateTime; dateTime.timeValue = var->hour * 60 * 60 + var->minute * 60 + var->second; statement->setTime (parameter, dateTime); } break; case SQL_C_BINARY: if (!binding->data_at_exec) statement->setBytes(parameter, *(binding->indicatorPointer), binding->pointer); break; case SQL_C_BIT: //case SQL_C_BOOKMARK: //case SQL_C_VARBOOKMARK: case SQL_C_NUMERIC: //case SQL_C_GUID: //break; default: postError (new OdbcError (0, "HYC00", "Optional feature not implemented")); return; } } catch (SQLException& exception) { postError ("HY000", exception); return; } } Connection.h 1. Changed this declarations virtual void beginDataTransfer(int index) = 0; virtual void putSegmentData (int length, const void *bytes) = 0; virtual void endDataTransfer() = 0; for : virtual void beginBlobDataTransfer(int index) = 0; virtual void putBlobSegmentData (int length, const void *bytes) = 0; virtual void endBlobDataTransfer() = 0; And added 3 new declarations: virtual void beginClobDataTransfer(int index) = 0; virtual void putClobSegmentData (int length, const void *bytes) = 0; virtual void endClobDataTransfer() = 0; IscPreparedStatement.h: 1. Add this at line 44: class AsciiBlob; 2. Add this at end of class declaration ( under BinaryBlob *segmentBlob; ) AsciiBlob *segmentClob; 3. Changed this declarations virtual void beginDataTransfer(int index); virtual void putSegmentData (int length, const void *bytes); virtual void endDataTransfer(); for : virtual void beginBlobDataTransfer(int index); virtual void putBlobSegmentData (int length, const void *bytes); virtual void endBlobDataTransfer(); And added 3 new declarations: virtual void beginClobDataTransfer(int index) = 0; virtual void putClobSegmentData (int length, const void *bytes) = 0; virtual void endClobDataTransfer() = 0; IscPreparedStatement.cpp 1. Change definitions of virtual void beginDataTransfer(int index); virtual void putSegmentData (int length, const void *bytes); virtual void endDataTransfer(); for void IscPreparedStatement::beginBlobDataTransfer(int index) { if (segmentBlob) endBlobDataTransfer(); segmentBlob = new BinaryBlob(); getParameter (index - 1)->setValue (segmentBlob); } void IscPreparedStatement::putBlobSegmentData(int length, const void* bytes) { if (segmentBlob) segmentBlob->putSegment (length, (char*) bytes, true); } void IscPreparedStatement::endBlobDataTransfer() { if (segmentBlob) { segmentBlob->release(); segmentBlob = NULL; } } And added 3 news definitions: void IscPreparedStatement::beginClobDataTransfer(int index) { if (segmentClob) endClobDataTransfer(); segmentClob = new AsciiBlob(); getParameter (index - 1)->setValue (segmentClob); } void IscPreparedStatement::putClobSegmentData(int length, const void* bytes) { if( segmentClob ) segmentClob->putSegment (length, (char*) bytes, true); } void IscPreparedStatement::endClobDataTransfer() { if( segmentClob ) { segmentClob->release(); segmentClob = NULL; } } IscCallableStatement.h: 1. Changed this declarations virtual void beginDataTransfer(int index); virtual void putSegmentData (int length, const void *bytes); virtual void endDataTransfer(); for : virtual void beginBlobDataTransfer(int index); virtual void putBlobSegmentData (int length, const void *bytes); virtual void endBlobDataTransfer(); And added 3 new declarations: virtual void beginClobDataTransfer(int index) = 0; virtual void putClobSegmentData (int length, const void *bytes) = 0; virtual void endClobDataTransfer() = 0; IscCallableStatement.cpp: 1. Change definitions of virtual void beginDataTransfer(int index); virtual void putSegmentData (int length, const void *bytes); virtual void endDataTransfer(); for // Added by RM 2002-06-04 void IscCallableStatement::beginBlobDataTransfer(int index) { Parent::beginBlobDataTransfer(index); } // Added by RM 2002-06-04 void IscCallableStatement::putBlobSegmentData (int length, const void *bytes) { Parent::putBlobSegmentData(length, bytes); } // Added by RM 2002-06-04 void IscCallableStatement::endBlobDataTransfer() { Parent::endBlobDataTransfer(); } And added 3 news definitions: void IscCallableStatement::beginClobDataTransfer(int index) { Parent::beginClobDataTransfer(index); } void IscCallableStatement::putClobSegmentData (int length, const void *bytes) { Parent::putClobSegmentData(length, bytes); } void IscCallableStatement::endClobDataTransfer() { Parent::endClobDataTransfer(); } BinaryBlob.cpp 1. Return the use of use count to the original way for make that AsciiBlob and BinaryBlob works equal with useCount. BinaryBlob::BinaryBlob() { // useCount = 0; useCount = 1; offset = 0; populated = true; } BinaryBlob::BinaryBlob(int minSegmentSize) : Stream (minSegmentSize) { // useCount = 0; useCount = 1; offset = 0; populated = true; } #ifdef ENGINE BinaryBlob::BinaryBlob(Database * db, long recNumber, long sectId) { // useCount = 0; useCount = 1; offset = 0; populated = false; database = db; recordNumber = recNumber; sectionId = sectId; } #endif BinaryBlob::BinaryBlob(Clob * blob) { // useCount = 0; useCount = 1; Stream::putSegment (blob); } int BinaryBlob::release() { // if (--useCount <= 0) if (--useCount == 0) { delete this; return 0; } return useCount; } Best regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN. Más Útil cada Día. http://www.msn.es/intmap/ |
From: Paul R. <pr...@ib...> - 2002-07-01 09:35:11
|
Carlos G.A. wrote: > > > 2. I have more modifications for the SQLGetTypeInfo function ( i send > the files ), with this modifications an application can create > tables and make selects with the information returned by this > function. > You have added hard coded values to TypesResultSet.cpp - for instance: #define BLOB(type,code,prefix,suffix) type,code,2147483647,prefix,suffix,NULL,NULLABLE,CASE_SENSITIVE, UNSEARCHABLE,NOT_NUMERIC,NOT_NUMERIC,NOT_NUMERIC,type,UNSCALED,UNSCALED I believe values such as 2147483647 should be constants. It will make the code easier to read. The programmer's intention will become clearer especially for values that depend upon a system or platform implementation that is liable to change in the future. Can you replace the values with the constants you mean them to be? They should already be declared in existing header files. Paul -- Paul Reeves http://www.ibphoenix.com Supporting users of Firebird and InterBase |
From: Carlos G.A. <car...@ho...> - 2002-06-29 20:54:11
|
Hello: Two things: 1. The SQLSetConnectOption isn´t in the list of supported functions of the driver, to change this: OdbcConnection.cpp ( line 70 ): static const int supportedFunctions [] = { // Deprecated but important stuff SQL_API_SQLALLOCCONNECT, SQL_API_SQLALLOCENV, SQL_API_SQLALLOCSTMT, SQL_API_SQLFREECONNECT, SQL_API_SQLFREEENV, SQL_API_SQLFREESTMT, SQL_API_SQLCOLATTRIBUTES, SQL_API_SQLERROR, SQL_API_SQLSETPARAM, SQL_API_SQLTRANSACT, SQL_API_SQLSETCONNECTOPTION, SQL_API_SQLENDTRAN, SQL_API_SQLALLOCHANDLE, SQL_API_SQLGETDESCFIELD, SQL_API_SQLBINDCOL, SQL_API_SQLGETDESCREC, SQL_API_SQLCANCEL, SQL_API_SQLGETDIAGFIELD, SQL_API_SQLCLOSECURSOR, SQL_API_SQLGETDIAGREC, SQL_API_SQLCOLATTRIBUTE, SQL_API_SQLGETENVATTR, SQL_API_SQLCONNECT, SQL_API_SQLGETFUNCTIONS, SQL_API_SQLCOPYDESC, SQL_API_SQLGETINFO, SQL_API_SQLDATASOURCES, SQL_API_SQLGETSTMTATTR, SQL_API_SQLDESCRIBECOL, SQL_API_SQLGETTYPEINFO, SQL_API_SQLDISCONNECT, SQL_API_SQLNUMRESULTCOLS, SQL_API_SQLDRIVERS, SQL_API_SQLPARAMDATA, SQL_API_SQLENDTRAN, SQL_API_SQLPREPARE, SQL_API_SQLEXECDIRECT, SQL_API_SQLPUTDATA, SQL_API_SQLEXECUTE, SQL_API_SQLROWCOUNT, SQL_API_SQLFETCH, SQL_API_SQLSETCONNECTATTR, SQL_API_SQLFETCHSCROLL, SQL_API_SQLSETCURSORNAME, SQL_API_SQLFREEHANDLE, SQL_API_SQLSETDESCFIELD, SQL_API_SQLFREESTMT, SQL_API_SQLSETDESCREC, SQL_API_SQLGETCONNECTATTR, SQL_API_SQLSETENVATTR, SQL_API_SQLGETCURSORNAME, SQL_API_SQLSETSTMTATTR, SQL_API_SQLGETDATA, // The following is a list of valid values for FunctionId for functions conforming to the X/Open standards - compliance level,, SQL_API_SQLCOLUMNS, SQL_API_SQLSTATISTICS, SQL_API_SQLSPECIALCOLUMNS, SQL_API_SQLTABLES, //The following is a list of valid values for FunctionId for functions conforming to the ODBC standards - compliance level,, SQL_API_SQLBINDPARAMETER, SQL_API_SQLNATIVESQL, SQL_API_SQLBROWSECONNECT, SQL_API_SQLNUMPARAMS, SQL_API_SQLBULKOPERATIONS, SQL_API_SQLPRIMARYKEYS, SQL_API_SQLCOLUMNPRIVILEGES, SQL_API_SQLPROCEDURECOLUMNS, SQL_API_SQLDESCRIBEPARAM, SQL_API_SQLPROCEDURES, SQL_API_SQLDRIVERCONNECT, SQL_API_SQLSETPOS, SQL_API_SQLFOREIGNKEYS, SQL_API_SQLTABLEPRIVILEGES, SQL_API_SQLMORERESULTS, }; 2. I have more modifications for the SQLGetTypeInfo function ( i send the files ), with this modifications an application can create tables and make selects with the information returned by this function. Best Regards Carlos Guzmán Álvarez Vigo - España _________________________________________________________________ Charle con sus amigos online usando MSN Messenger: http://messenger.msn.com |
From: Carlos G.A. <car...@ho...> - 2002-06-28 13:25:59
|
Hello: I made a little modificationover the files that i post in my last message: TypeResultSet.cpp: struct Types { char *typeName; int typeType; long typePrecision; char *typePrefix; char *typeSuffix; char *typeParams; int typeNullable; int typeCaseSensitive; int typeSearchable; int typeUnsigned; int typeMoney; int typeAutoIncrement; char *typeLocalName; int typeMinScale; int typeMaxScale; }; .... .... #define ALPHA(type,code,prec) type,code,prec,"'","'","length",NULLABLE,CASE_SENSITIVE,SEARCHABLE,NOT_NUMERIC,NOT_NUMERIC,NOT_NUMERIC,type,UNSCALED,UNSCALED #define BLOB(type,code,prefix,suffix) type,code,2147483647,prefix,suffix,NULL,NULLABLE,CASE_SENSITIVE,UNSEARCHABLE,NOT_NUMERIC,NOT_NUMERIC,NOT_NUMERIC,type,UNSCALED,UNSCALED #define NUMERIC(type,code,prec,attr,min,max) type,code,prec,NULL,NULL,attr,NULLABLE,CASE_INSENSITIVE,SEARCHABLE_EXCEPT_LIKE,IS_SIGNED,NOT_MONEY,NOT_AUTO_INCR,type,min,max #define DATETIME(type,code,prec,prefix,suffix) type,code,prec,prefix,suffix,NULL,NULLABLE,CASE_INSENSITIVE,SEARCHABLE_EXCEPT_LIKE,NOT_NUMERIC,NOT_NUMERIC,NOT_AUTO_INCR,type,NULL,NULL static const Types types [] = { ALPHA ("CHAR", jdbcCHAR,32767), ALPHA ("VARCHAR", VARCHAR,32765), NUMERIC ("NUMERIC", TYPE_SQL_NUMERIC, 18, "precision,scale", 0, 18), NUMERIC ("DECIMAL", TYPE_SQL_DECIMAL, 18, "precision,scale", 0, 18), NUMERIC ("SMALLINT", SMALLINT, 5, NULL, 0, 0), NUMERIC ("INTEGER", INTEGER, 10, NULL, 0, 0), NUMERIC ("FLOAT", jdbcFLOAT, 15, NULL, 0, 0), NUMERIC ("DOUBLE PRECISION", jdbcDOUBLE, 15, NULL, 0, 0), BLOB ("LONG VARCHAR", TYPE_SQL_LONGVARCHAR,"'","'"), BLOB ("LONG VARBINARY", TYPE_SQL_LONGVARBINARY,NULL,NULL), DATETIME("DATE",jdbcDATE,10,"{d'","'}"), DATETIME("TIME",TIME,8,"{t'","'}"), DATETIME("TIMESTAMP",TIMESTAMP,23,"{ts'","'}"), }; Best Regards Carlos Guzman Álvarez Vigo-España _________________________________________________________________ Únase al mayor servicio mundial de correo electrónico: http://www.hotmail.com/es |
From: Carlos G.A. <car...@ho...> - 2002-06-28 12:16:54
|
HEllo: The files.... :)) Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ Charle con sus amigos online usando MSN Messenger: http://messenger.msn.com |
From: Carlos G.A. <car...@ho...> - 2002-06-28 12:15:02
|
Hello: The SQLGetTypeInfo don´t work properly i tested it in .Net Beta 2 ( Spanish ). When i want to get the columns of a table the oledb calls this function and this don´t return anything i have a fix for this but there a lot of changes and i send the two files that i´ve modified for this issue, the SQLColumns function don´t work throught the OldDB connection in this version of .Net ( Beta 2 ) but the code seems to be very correct ( in Visual Foxpro works correct ). Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN Fotos: la forma más fácil de compartir e imprimir fotos. http://photos.msn.es/support/worldwide.aspx |
From: Carlos G.A. <car...@ho...> - 2002-06-26 22:36:50
|
Hello: The SQL is bad should be ( IscProcedureColumnsResultSet::getProcedureColumns ): JString sql = "select NULL as table_cat,\n" // 1 "\tNULL as table_schem,\n" // 2 "\tpp.rdb$procedure_name as procedure_name,\n" // 3 "\tpp.rdb$parameter_name as column_name,\n" // 4 "\tpp.rdb$parameter_type as column_type,\n" // 5 "\tf.rdb$field_type as data_type,\n" // 5 + 1 "\tf.rdb$field_sub_type as type_name,\n" // 6 + 1 "\tf.rdb$field_length as column_size,\n" // 7 + 1 "\tnull as buffer_length,\n" // 8 + 1 "\tf.rdb$field_scale as decimal_digits,\n" // 9 + 1 "\t10 as num_prec_radix,\n" // 10 + 1 "\tf.rdb$null_flag as nullable,\n" // 11 + 1 "\tf.rdb$description as remarks,\n" // 12 + 1 "\tf.rdb$default_value as column_def,\n" // 13 + 1 "\tnull as SQL_DATA_TYPE,\n" // 14 + 1 "\tnull as SQL_DATETIME_SUB,\n" // 15 + 1 "\tf.rdb$field_length as CHAR_OCTET_LENGTH,\n" // 16 + 1 "\tpp.rdb$parameter_number as ordinal_position,\n" // 17 + 1 "\t'YES' as IS_NULLABLE\n" // 18 + 1 "from rdb$procedure_parameters pp, rdb$fields f\n" "where pp.rdb$field_source = f.rdb$field_name"; Best Regards Carlos Guzman Alvarez Vigo-España _________________________________________________________________ Descargue GRATUITAMENTE MSN Explorer en http://explorer.yupimsn.com/intl.asp. |
From: Paul R. <pr...@ib...> - 2002-06-26 06:36:03
|
Carlos Guzm=E1n =C1lvarez wrote: > Hello: >=20 > 1. Im testing the last CVS sources under Visual Foxpro and the driver=20 > crashes when V.Foxpro made a call to > SQLPrepare and a call to SQLNumResultcols ( almost to me in my test ),=20 > the problem is in this block of code: >=20 > if (!resultSet ){ > // Contributed by B. Schulte > // if the resultSet does not exist, execute it, to get a valid=20 > resultSet > // Foxpro calls this function to get all column-descriptions fo= r=20 > its > // remote-views. > // This fixes the bug : ' I can't edit my remote-views in Visia= l=20 > FoxPro' > this->executeStatement(); > } I'm ready to commit these changes, but I have a couple of questions. 1/ Is this->executeStatement() now redundant? Can I delete it, or is it=20 still required? > Add this line 929 ( OdbcStatement::sqlExecute ): > =20 > if ( resultSet ) > releaseResultSet(); >=20 2/ My line numbering is out of synch with yours. I think this is where=20 you mean the code to go: try { retcode =3D executeStatement(); } catch (SQLException& exception) { postError ("HY000", exception); retcode =3D SQL_ERROR; } ->=20 if ( resultSet ) ->=20 releaseResultSet(); if (retcode && retcode !=3D SQL_SUCCESS_WITH_INFO) return retcode; Paul --=20 Paul Reeves http://www.ibphoenix.com Supporting users of Firebird and InterBase |