Jeff Urlwin wrote: >>Hi all. >> >>I've just ( barely ) managed to get DBD::ODBC ==> UnixODBC >>==> FreeTDS >>working on my system. >> >>I took a Perl-Gtk2 app which has been running fine, and >>substituted the >>old DBD::Sybase connection with the DBD::ODBC one, and then >>discovered I >>could only run one query on SQL Server, and then all >>subsequent queries >>gave: >> >>DBD::ODBC::st execute failed: [unixODBC][FreeTDS][SQL >>Server]Attempt to >>initiate a new SQL Server operation with results pending. >>(SQL-07005)(DBD: st_execute/SQLExecute err=-1) >> >>Damn! >> >>So I started going through my code and adding $sth->finish after all >>recordset operations, and that seems to be fixing things. >> >> > >Please see if you can provide a small, self-contained example. (i.e. one that >creates >tables and inserts data, then reproduces the problem, such that it can be run >simply (or, >feel free to add it to some of the DBD::ODBC t/20sqlserver.t tests, if you >feel slightly >more inclined), then I can refine the implementation to ensure that you don't >have to call >finish each time. It's supposed to be that way, but if it's not working, I'd >like to >know. > > > It's been quite a while, but I've gotten around to building an example application. The application gives the 'Attempt to initiate a new SQL Server operation with results pending.' error and then exits when it can't fetch any data. It *should* fetch each row and dump the values to the console.
I'm using DBD::ODBC, compiled against UnixODBC & FreeTDS. The code below works if I use DBD::Sybase instead of DBD::ODBC You'll have to create a 'test' database in SQL Server, and change the password in the script below. Other than that ( and having a working DBD::ODBC setup ), it should be right to go. --- #!/usr/bin/perl use strict; use DBI; # Connect to SQL Server my $dbh = DBI->connect("dbi:ODBC:SQLServer", 'sa', '_ENTER_PASSWORD_HERE', {PrintError => 1}) || die "Database connectin not made: $DBI::errstr"; $dbh->do("use test"); $dbh->do("create table some_table ( ID integer identity (1,1), CompanyName varchar(50), SomeNote varchar(255) )"); my $sth = $dbh->prepare("insert into some_table ( CompanyName, SomeNote ) values ( ?, ? )"); foreach my $company ( [ "McDonalds", "Wants monopoly on fast foods" ], [ "Monsanto", "All-round evil company in food production" ], [ "BAE Systems", "Manufactures Weapons of Mass Destruction (TM)" ], [ "Advanta BV", "Poisons food supply with GM products" ] ) { $sth->execute( $$company[0], $$company[1] ); } $sth = $dbh->prepare("select ID from some_table") || die $dbh->errstr; $sth->execute || die $dbh->errstr; while (my $row = $sth->fetchrow_hashref) { my $little_sth = $dbh->prepare("select * from some_table where ID=" . $row->{ID}); $little_sth->execute; my $little_row = $little_sth->fetchrow_array; print "Got some data: \n" . " Company: " . $$little_row[0] . " ... Note: " . $$little_row[1]; } --- -- Daniel Kasak IT Developer NUS Consulting Group Level 5, 77 Pacific Highway North Sydney, NSW, Australia 2060 T: (+61) 2 9922-7676 / F: (+61) 2 9922 7989 email: [EMAIL PROTECTED] website: http://www.nusconsulting.com.au