When DBD::ODBC is built 64 bit and has access to the correct header files SQLRowCount (the ODBC API to retrieve rows affected) should return an SQLLEN which on 64 bit platforms is 8 bytes. However, the DBI XS interface to DBD::ODBC has:
SV *sth, imp_sth_t *imp_sth)
and dbd_db_execute is supposed to return the rows affected. There are also other places in DBD::ODBC where the affected rows is cast to an int. I think fixes would be required in both DBI and DBD::ODBC. See also:
dbd_xsh.h:int dbd_st_execute _((SV *sth, imp_sth_t *imp_sth));
in dbd_xsh.h of DBI.