On 18/10/10 14:58, Roode, Eric wrote:
> On Monday, October 18, 2010 9:24 AM, Martin J. Evans wrote:
> 
>> I never meant to offend you with that statement and I agreed it was an
>> error.
>>
>> You are posting on a public list and presumably wanting feedback/help.
>> I only know what you've told me, nothing else. Perhaps you might think
>> about that before leaping to the conclusion you seem to have.
>>
>> I spent nearly one hour of my Saturday looking into the problem you
>> reported so obviously I took your report seriously.
>>
>> Perhaps some calm is required.
> 
> I'm sorry, I didn't mean to fly off the handle.  I do appreciate any
> insight you (or anyone else) can give.  I'm just frustrated at what
> appears to be a bug in the driver (or possibly DBD::ODBC), and am
> looking for any way to work around it.
> 
> My apologies,
> -- Eric
> 
> 

I was using the Easysoft SQL Server Driver but I also tried with the MS SQL 
Server Drivers:

sqlsrv32.dll 14/04/2008 2000.85.1132.00
sqlncli.dll  14/10/2005 2005.90.1399.00

and the first echoed your result and the second worked (i.e., execute failed).

You have a newish driver but it is looking broken to me. Have you tried the 
native client driver (see above).

You could also try calling SQLMoreResults after the execute which appears to 
succeed until it returns false but ensure RaiseError is on. See 
odbc_more_results in the pod of DBD::ODBC and t/20SqlServer.t for examples. I 
only say this is worth trying as normally the final result of a procedure is 
not known until all of the procedure has finished and you have multiple 
statements in your proc (but it would be at best a workaround - see below). I 
tried it myself with the MS SQL Server ODBC Driver above and it did not help.

I also checked again the ODBC spec and the only SQL_SUCCESS_WITH_INFO returns 
are for statements which succeed but may have succeeded for a reason you might 
like to know e.g., 

01003, NULL value eliminated in set function
The prepared statement associated with StatementHandle contained a set function 
(such as AVG, MAX, MIN, and so on), but not the COUNT set function, and NULL 
argument values were eliminated before the function was applied. (Function 
returns SQL_SUCCESS_WITH_INFO.)

01004, String data right truncated
etc

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.

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