I no longer use DBI for my database queries so I can't help you there..
If that's the way you want to go, you might consider using DBI::ODBC
instead (I never had any problems there) and check it's documentation
for syntaxes.
However, this code has always worked for me on a Win32 platform, while
connecting to SQL server.. It uses a native Win32 COM object that is
built into every version of windows at least since Windows NT 4.0.
Results on my SQL server...
spt_monitor - 69575286
spt_values - 85575343
spt_fallback_db - 117575457
spt_fallback_dev - 133575514
spt_fallback_usg - 149575571
dtproperties - 253959981
spt_datatype_info_ext - 529436960
spt_datatype_info - 545437017
spt_server_info - 561437074
spt_provider_types - 1457440266
MSreplication_options - 1931153925
#code
use Win32::OLE;
use Win32::OLE::Const ('Microsoft ActiveX Data Objects 2.6 Library');
call_sql("select name,id from sysobjects where xtype = 'U'",$records);
if (Win32::OLE->LastError() != 0) {
die 0;
}
while (!$records->{EOF}) {
print $records->Fields("name")->{Value}." -
".$records->Fields("id")->{Value}."\n";
$records->{MoveNext};
if ($records->{EOF}) {
loop;
}
}
sub call_sql {
my $query = $_[0];
my $user = "username";
my $pass = "password";#look at the commented $Conn->{Open} line below
if
#you want to use passwords instead of trusted
connections (NT Auth)
my $db = "master";
my $appname = "whatdoyouwanttocallyourapplication";
my $server = "servername";
my $recordset;
my $Conn = Win32::OLE->new("ADODB.Connection");
if (Win32::OLE->LastError() != 0) {
print "Failed creating ADODB.Connection object -> ".
Win32::OLE->LastError()."\n";
return 0;
}
$Conn->{ConnectionTimeout} = 15;
#$Conn->{Open} = "DRIVER={SQL
Server};SERVER=$server;APP=$appname;UID=$user;PWD=$pass;DATABASE=$db;";
$Conn->{Open} = "DRIVER={SQL
Server};SERVER=$server;APP=$appname;DATABASE=$db;trusted_coinnections=ye
s;";
if (Win32::OLE->LastError() != 0) {
print "Failed opening ADODB.Connection object with DB info-> ".
Win32::OLE->LastError()."\n";
return 0;
}
my $Cmd = Win32::OLE->new("ADODB.Command");
if (Win32::OLE->LastError() != 0) {
print "Failed creating ADODB.Command object ->
".Win32::OLE->LastError()."\n";
return 0;
}
$Cmd->{CommandText} = $query;
$Cmd->{CommandType} = adCmdText;
$Cmd->{ActiveConnection} = $Conn;
$Cmd->{Prepared} = 1;
$Cmd->{CommandTimeout} = 45;#seconds to wait for query before
returning an error
$RS = $Cmd->Execute();
if (Win32::OLE->LastError() != 0) {
print "Failed opening ADODB.Recordset object for Command ->
(".Win32::OLE->LastError().")\n";
return 0;
} else {
$_[1] = $RS;
return 1;
}
}
________________________________
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Patrix Diradja
Sent: Tuesday, February 06, 2007 2:30 AM
To: [email protected]
Subject: Who does "MoveNext" belong to?
Dear my friends....
I am writing a program use activeperl 5.8, MSSQL and on Win32 Env.
Here is my code:
===
#!/usr/bin/perl
use Tk;
use Cwd;
use DBI::ADO;
use WriteExcel;
use strict;
use Win32::OLE qw( in );
my $dsn="sigma";
my $uname="sa";
my $pword="penguin";
my @bd4l=("AprovaApp1");
my $strsqltab4l="select name from sys.tables";
my $dbh2 = DBI->connect("dbi:ADO:$dsn", $uname, $pword)
|| die "Could not open SQL connection.";
my $rsnya = $dbh2->prepare($strsqltab4l);
$rsnya->execute();
while(!$rsnya->{EOF}){
my $tab4l = $rsnya->fetchrow_array;
print "\$tab4l: $tab4l \n";
$rsnya->movenext;
}
====
but than comes problem that I can not solve.
The error message is:
"
Can't get DBI::st=HASH(0x1d2d3f4)->{EOF}: unrecognised attribute name at
C:/Perl/site/lib/DBD/ADO.pm line 1277.
Can't locate object method "movenext" via package "DBI::st" at Untitled1
line 23.
"
Please tell me why.
Thank you very much in advance.
________________________________
Sekarang dengan penyimpanan 1GB
http://id.mail.yahoo.com/
<http://sg.rd.yahoo.com/mail/id/footer/def/*http://id.mail.yahoo.com/>
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs