Hi Guys
 
I hope someone can help me.  I know the SQL works fine, but I can't work
out how to get it to work with DBIx::SQLEngine.

Cheers


Dave
 
This is the SQL I want to execute (and works from SQL Management Studio
2005):
  *********Begin SQL Code*********
IF EXISTS (
        SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES
        WHERE ROUTINE_NAME = 'GetDriveSize'
        AND ROUTINE_SCHEMA = 'dbo'
        AND ROUTINE_TYPE = 'FUNCTION'
)
BEGIN
        DROP FUNCTION dbo.GetDriveSize
        PRINT 'Dropped dbo.GetDriveSize'
END

GO

CREATE FUNCTION dbo.GetDriveSize (@driveletter CHAR(1)) RETURNS
NUMERIC(20)
BEGIN
        DECLARE @rs INTEGER, @fso INTEGER, @getdrive VARCHAR(13), @drv
INTEGER, @drivesize VARCHAR(20)
        SET @getdrive = 'GetDrive("' + @driveletter + '")'
        EXEC @rs = sp_OACreate 'Scripting.FileSystemObject', @fso OUTPUT
        IF @rs = 0
        EXEC @rs = sp_OAMethod @fso, @getdrive, @drv OUTPUT
        IF @rs = 0
        EXEC @rs = sp_OAGetProperty @drv,'TotalSize', @drivesize OUTPUT
        IF @rs<> 0
        SET @drivesize = NULL
        EXEC sp_OADestroy @drv
        EXEC sp_OADestroy @fso
        RETURN @drivesize
END

GO

SELECT round(dbo.GetDriveSize('C')/(1073741824),0)
  *********End SQL Code*********

This is my Perl:

  *********Begin Perl Code*********
use DBIx::SQLEngine;

$sqllist1 = "IF EXISTS (\nSELECT 1 FROM
INFORMATION_SCHEMA.ROUTINES\nWHERE ROUTINE_NAME = 'GetDriveSize'\nAND
ROUTINE_SCHEMA = 'dbo'\nAND ROUTINE_TYPE = 'FUNCTION'\n)\nBEGIN\nDROP
FUNCTION dbo.GetDriveSize\nEND\nGO";
$sqllist2 = "CREATE FUNCTION dbo.GetDriveSize (\...@driveletter CHAR(1))
RETURNS NUMERIC(20)\nBEGIN\nDECLARE  \...@rs INTEGER, \...@fso INTEGER,
\...@getdrive VARCHAR(13), \...@drv INTEGER, \...@drivesize VARCHAR(20)\nSET
\...@getdrive = 'GetDrive(\"' + \...@driveletter + '\")'\nEXEC \...@rs =
sp_OACreate 'Scripting.FileSystemObject', \...@fso OUTPUT\nIF \...@rs =
0\nEXEC \...@rs = sp_OAMethod \...@fso, \...@getdrive, \...@drv OUTPUT\nIF 
\...@rs =
0\nEXEC \...@rs = sp_OAGetProperty \...@drv,'TotalSize', \...@drivesize
OUTPUT\nIF \...@rs<> 0\nSET \...@drivesize = NULL\nEXEC sp_OADestroy
\...@drv\nexec sp_OADestroy \...@fso\nreturn \...@drivesize\nend\ngo";
$sqllist3 = "SELECT round(dbo.GetDriveSize('C')/(1073741824),0)";


$ip = "1.1.1.1";
print STDERR "ip = **$ip**\n";

my $dsnSQL_Store = "Driver={SQL Server};Server=$ip;Database=DB";

if (my $dbhstr = DBI->connect( "dbi:ODBC:$dsnSQL_Store", "sa", "wibble"
)) {
        print STDERR "Connected to $device_id database!\n";
        print STDERR "sql = $sql\n";
        my $fish1;
        print STDERR "sqllist = $sqllist1\n";
        $fish1 = $dbhstr->prepare($sqllist1);
        $fish1->execute();
        print STDERR "sqllist = $sqllist2\n";
        $fish2 = $dbhstr->prepare($sqllist2);
        $fish2->execute();
        my $fish = $dbhstr->selectall_array($sqllist3);
        print STDERR "Free Gb = $fish\n"
}
else {
        warn "Can't connect to $ip";
        print "***ERR***\n";
}
  *********End Perl Code*********


  *********Start Sys Info*********
Windows XP SP3
Perl 5.8.8 Build 822
DBI 1.607
DBIx-SQLEngine 0.93
MS-SQL 2005 Express
  *********End Sys Info*********

David Evans
Monsoon Accessorize Limited
1 Nicholas Road
London
 W11 4AN
 
Tel:+44(0)2033723411
Fax:+44(0)2033723040
E-mail:dev...@monsoon.co.uk
Please consider the environment before printing this email.
 
 

_______________________________________________
ActivePerl mailing list
ActivePerl@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to