On Friday, September 10, 2010 11:47 AM, Martin J. Evans wrote:

> You don't look like you did anything but connect and disconnect. You
> are running it on the script you posted originally aren't you?
>
> Can you try again. Remove the use DBD::ODBC and connect flags I
> asked you to add and simply do the set DBI_TRACE=15=x.x.
>
> Search the log for the SQL you issue - if you don't see some of it
> the tracing is still not right.

I did run it against the original script!  Here it is once again:

   #----------------------------------------------------------------
   use Modern::Perl;
   use DBI;
   use Data::Dump qw(dump);
   
   sub handle_error
   {
       my ($state, $msg, $native) = @_;
       say qq{handle_error: \$state  is "$state".};
       say qq{handle_error: \$msg    is "$msg".};
       say qq{handle_error: \$native is "$native".};
       return 1;
   }
   
   my $dbh = DBI->connect('DBI:ODBC:driver={SQL
Server};Server=xxxxx;Database=xxxxx',
                          'xxxxx', 'xxxxx',
                          {odbc_cursortype        => 2,
                           odbc_default_bind_type => DBI::SQL_VARCHAR,
                           odbc_err_handler       => \&handle_error,
                           RaiseError             => 1,
                           PrintError             => 0,
                          });
   # Enable tracing
 
DBI->trace(DBD::ODBC->parse_trace_flags('odbcconnection|odbcunicode'));
   
   my $sth = $dbh->prepare('{? = call error_test(?, ?)}');
   
   # Set up parameters
   my $retval;
   my $p1 = 'Some input parameter';
   my $p2 = 75;
   $sth->bind_param_inout(1, \$retval, 4000, DBI::SQL_VARCHAR);
   $sth->bind_param      (2,  $p1,           DBI::SQL_VARCHAR);
   $sth->bind_param_inout(3, \$p2,       32, DBI::SQL_INTEGER);
   
   $sth->execute;
   
   $_ = defined($_)? qq{"$_"} : '{NULL}' for ($retval, $p1, $p2);
   say qq{After execute: \$retval is $retval.};
   say qq{After execute: \$p1     is $p1.};
   say qq{After execute: \$p2     is $p2.};
   say 'Done.';
   #----------------------------------------------------------------

Then I set DBI_TRACE=15=dt_trace.out in the cmd.exe shell and ran it.
Most puzzling.  Output was:

   After execute: $retval is {NULL}.
   After execute: $p1     is "Some input parameter".
   After execute: $p2     is "75".
   Done.


-- Eric


Reply via email to