Philip Zembrod wrote:

Hello,

I am having trouble calling any stored procedure with a parameter through DBI
and DBD::ADO on a Sybase Adaptive Server Enterprise.

What I would finally like to do is call a stored proc with an output parameter
through OLE DB. But as yet I can't even call a procedure with an input 
parameter.

Currently, DBD::ADO doesn't support bind_param_inout().

I basically get the following error message:

OLE exception from "ASE OLE DB Provider":

No value given for one or more required parameters

Win32::OLE(0.1701) error 0x80040e10
  in METHOD/PROPERTYGET "Execute" at q:/run/site/lib/DBD/ADO.pm line 1073
DBD::ADO::st execute failed: Can't Execute Command 'exec sp_help @objname = ?'


I'll paste the script causing this error at the end of this mail.
If you change $ado from 1 to 0 then the script will use DBD::Sybase
instead and all is fine.

I have user DBI_TRACE with high levels. I get this message from the
ASE OLE DB Provider:
"The provider cannot derive parameter info and SetParameterInfo has not been 
called"
Later I see: Parameter: Name => 0 Type => 200 Direction => 1 Size => 1
Type and Direction seem ok, Name and Size maybe not so.
(Trying $sth->{ado_comm}->Parameters->Item(0)->{Name} = '@objname';
just resulted in "Der Vorgang ist in diesem Zusammenhang nicht  zugelassen.",
meaning this action is not permitted in this context.)

I am quite lost now and would appreciate any help. Am I missing something, or 
did
I encounter a bug in the OLE DB provider?

My environment is:
WinXP SP1 (german)
ActivePerl 5.8.2 build 808
DBI 1.49
DBD::ADO 2.94
DBD::Sybase 1.04.12
Sybase ASE OLE DB Provider 2.70.0.24
Sybase ASE 12.5.3

Thanks in advance
Philip

And now comes the script:
--------------------------------
use strict;
use DBI;

my $server = '<server>';
my $user   = '<user>';
my $passwd = '<passwd>';

my $ado = 1;

my $stConnect = $ado ? 'dbi:ADO:Provider=Sybase ASE OLE DB Provider;Data 
source='
    : 'dbi:Sybase:server=';
my $stVal = 'sysobjects';

my $dbh = DBI->connect($stConnect . $server, $user, $passwd ,{RaiseError => 1, 
PrintError => 0, Warn=>1});
my $sth = $dbh->prepare('exec sp_help @objname = ?', 
{CommandType=>'adCmdStoredProc'}) or confess $dbh->errstr();
my $rc = $sth->bind_param(1, $stVal, {TYPE=>DBI::SQL_VARCHAR()}) or confess $sth->errstr(); $sth->execute();
DBI::dump_results($sth);
$sth->finish;

I have no Sybase available, only it's derivative:

  set DBI_DSN=dbi:ADO:Provider=SQLOLEDB;Trusted_Connection=Yes

Running

  my $sth = $dbh->prepare('sp_help @objname = ?');
  $sth->bind_param( 1,'sysobjects');
  $sth->execute;
  $sth->dump_results;

shows

  'sysobjects', 'dbo', 'system table', '2002-12-17 14:36:10'
  1 rows


Steffen

Reply via email to