On Mon, Oct 18, 2010 at 04:45:51PM +0100, Martin J. Evans wrote:
> 
> State 23000 you are getting is "Integrity constraint violation" which is an 
> error but note the text on the end of the error you are getting:
> 
> "[state was 23000 now 01000]"
> 
> 01000 is a general warning. I don't understand why the "now 01000" in the 
> text of the error.

"[state was 23000 now 01000]" looks like the behaviour of the set_err
method: http://search.cpan.org/~timb/DBI/DBI.pm#set_err

It looks like state 23000 was recorded but then updated to 01000 by a
separate event. But, looking at the internal code for set_err_sv,
I see that message might get appended even if the code then decides not
to change the err value.

You could use something like $h->{HandleSetErr} = sub { warn "@_"; return 0; }
to see the second event getting recorded.

Tim.

> So something is a amiss there. Having said that the MS native client reports 
> the same error but SQLExecute returns SQL_ERROR.
> 
> As far as I am concerned (and I've written ODBC drivers and code to ODBC 
> Drivers for more years than I care to admit) the condition you have hit is an 
> error and when SQLError is called an error number, state and text is returned 
> BUT the call to SQLExecute is returning SQL_SUCCESS_WITH_INTO instead of 
> SQL_ERROR. I've read your comment from the Microsoft guy but I don't believe 
> it and in any case I have 1 of their drivers which behaves differently than 
> the one you've got.
> 
> Martin
> -- 
> Martin J. Evans
> Easysoft Limited
> http://www.easysoft.com
> 

Reply via email to