[Harbour] SF.net SVN: harbour-project:[14022] trunk/harbour

Mindaugas Kavaliauskas dbtopas at dbtopas.lt
Mon Mar 1 13:35:56 EST 2010


Hi,


vszakats at users.sourceforge.net wrote:
>   + contrib/rddsql/sddoci/sddoci.c
>   + contrib/rddsql/sddsq3/sddsq3.c
> 

Thank You, for you new SDD. I've started Oracle development some time 
ago, but never fixed because lack of time, motivation (I do not need it 
for my own projects), and test environment. I see you current code is 
much more complete, than my. It also uses some more nice API than I was 
trying to use. I was using OCI*() functions (not OCI_*()), i.e. 
OCIHandleAlloc() was used to allocate server, context, environment, 
error, and session handles. It seemed very stange...

BTW, in the OCI*() API, transaction management is done using API 
functions, but not 'BEGIN', 'ROLLBACK', 'COMMIT' queries (like in 
MySql). If this is also true for OCI_*() API, perhaps we need to SDD and 
introduce new methods. For MySql and similar "query based transactions" 
we need to do queries on transaction method calls.


>   ; TOFIX: To Mindaugas: Current SDD architecture will crash with GPF
>            if dbUseArea() is attempted after a failed RDDI_CONNECT
>            call. You can check it f.e. with sddodbc's test1.prg, by
>            modifying test.mdb to test_.mdb, and simply run it.

I've tried to, but I guess you've already fixed it. But I see a lot of 
"?" characters in test1.prg table browse (in BCC). Something wrong with 
UNICODE support, though I do not see error code. Maybe some hidden 
#define UNICODE exists...

!!! This "&& 0" is dangerous, not compatible with next #if defined

#if defined( UNICODE ) && 0
                iTargetType = SQL_C_WCHAR;
                iLen *= 2;
#else
                iTargetType = SQL_C_CHAR;
#endif
                val = ( SQLPOINTER * ) hb_xgrab( iLen );
                if( SQL_SUCCEEDED( res = SQLGetData( hStmt, ui, 
iTargetType, val, iLen, &iLen ) ) )
                {
                   if( iLen > 0 )
                   {
#if defined( UNICODE )
                      iLen /= 2;
#endif
                      pItem = O_HB_ITEMPUTSTRLEN( NULL, ( O_HB_CHAR * ) 
val, ( HB_SIZE ) iLen );
                   }
                }
                hb_xfree( val );


Regards,
Mindaugas



More information about the Harbour mailing list