Just a guess as I have no experience with MS SQL Server,
but LIKE clauses, at least in some databases (like Oracle)
use the percent-sign(%) as the wildcard character.  You
might try the percent-sign instead of the asterisk as your
wildcard in the LIKE.

HTH.
-- 
Hardy Merrill
Red Hat, Inc.

David McDivitt [EMAIL PROTECTED] wrote:
> After posting to the newsgroup I thought I should post to the dbi-users mailing list 
> instead.
> 
> I am unable to get a where clause to work against MS SQL Server. I get no runtime 
> errors, but my recordset is always empty. I have
> the latest version from ActivePerl and Win2000. I just installed DBI and DBD-ODBC 
> using PPM so they should be current. To debug I am
> displaying the SQL string, and if I paste the string into a MS Access query or 
> Enterprise Manager it works fine. I did trial and
> error with everything I could think of changing syntax and had no success. This is 
> my first Perl application employing a database,
> and is a test case to see what we can do in Perl rather than Java. Code is pasted 
> below. I changed my posting width to 132
> characters to avoid wrapping but usually post with 76. If someone could help I'd 
> appreciate it. Thanks
> 
> #!e:\perl\bin\perl.exe
> 
>    use warnings;
>    use strict;
>    use DGM;
>    use DBI;
>    use DBD::ODBC;
>    require 'RecipAuthFunc.pl';
> 
>    my $select = 'SELECT TOP 201 AuUnique, AuRIN, AuCaseID, AuFirstName, AuLastName, 
> AuMiddleInitial, AuSSN FROM Authorize ';
>    my ($connection, $recordset, @field, @record, $filter, $count, $toomany);
> 
>    RecipAuthStart(1);   #this creates %passed from CGI arguments, insures there are 
> no undefs, and writes the HTML header
> 
> $passed{'LName'} = 'W';          #this is so I can skip the selection screen
> $passed{'queryby'} = 'select+using+name';
> 
>    if ($passed{'queryby'} eq 'select+using+RIN') {$filter = "WHERE AuRIN LIKE 
> '$passed{'RIN'}*'"}
>    elsif ($passed{'queryby'} eq 'select+using+case') {$filter = "WHERE AuCaseID LIKE 
> '$passed{'CaseID'}*'"}
>    elsif ($passed{'queryby'} eq 'select+using+name') {$filter = "WHERE (AuFirstName 
> LIKE '$passed{'FName'}*') AND ".
>                                                                 "(AuLastName LIKE 
> '$passed{'LName'}*') AND ".
>                                                                 "(AuMiddleInitial 
> LIKE '$passed{'Initial'}*')"}
>    elsif ($passed{'queryby'} eq 'select+using+SSN') {$filter = "WHERE AuSSN LIKE 
> '$passed{'SSN'}*'"}
>    elsif ($passed{'queryby'} eq 'select+using+all') {$filter = "WHERE (AuRIN LIKE 
> '$passed{'RIN'}*') AND ".
>                                                                "(AuCaseID LIKE 
> '$passed{'CaseID'}*') AND ".
>                                                                "(AuFirstName LIKE 
> '$passed{'FName'}*') AND ".
>                                                                "(AuLastName LIKE 
> '$passed{'LName'}*') AND ".
>                                                                "(AuMiddleInitial 
> LIKE '$passed{'Initial'}*') AND ".
>                                                                "(AuSSN LIKE 
> '$passed{'SSN'}*')"}
>    else {problem('Invalid invocation')}
> 
> print "<br>".$select.$filter.' ORDER BY AuRIN<br>'; #debug
> 
>    $connection = DBI->connect("dbi:ODBC:RATS",'RATSDefault','none') or 
> problem('Cannot connect to database');
>    $recordset = $connection->prepare($select.$filter.' ORDER BY AuRIN') or 
> problem('Cannot prepare SQL statement');
>    $recordset->execute() or problem('Cannot create recordset');
>    $count = 0;
>    while (@field=$recordset->fetchrow_array) {
>       $count++;
>       foreach (@field) {$_ ='' unless $_}
>       push @record, [EMAIL PROTECTED];
>       }
> #   $count = @record;
> print "<br>$count<br>"; #debug
>    if ($count > 200) {
>       $count = 200;
>       $toomany = 'Too many records were returned for the selection 
> criteria.<br>Change the criteria and do again.';
>       }
>    else {$toomany = '<br><br>'}
> 
>    print '<font size=1.5 face="Arial"><form name="RecipAuth" 
> action="RecipAuthView.pl" method="post">';
>    print '<table border=0 cellspacing=4 align=center>';
>    print '<tr>',tdfont($hidden),
>                 tdfont($toomany),'</tr>';
>    foreach (0..($count-1)) {
>       print '<tr>',tdfont($record[$_][0]).  #this is not the final display version 
> of course
>                    tdfont($record[$_][1]).
>                    tdfont($record[$_][2]).
>                    tdfont($record[$_][3]).
>                    tdfont($record[$_][4]).
>                    tdfont($record[$_][5]).
>                    tdfont($record[$_][6]),'</tr>';
>      }
>    print '</table></form></font></body></html>';
>    exit;
> 
> This is the displayed SQL statement:
> 
> SELECT TOP 201 AuUnique, AuRIN, AuCaseID, AuFirstName, AuLastName, AuMiddleInitial, 
> AuSSN FROM Authorize WHERE (AuFirstName LIKE
> '*') AND (AuLastName LIKE 'W*') AND (AuMiddleInitial LIKE '*') ORDER BY AuRIN
> 
> If I remove the where clause and prepare as follows it returns records:
>    $recordset = $connection->prepare($select.' ORDER BY AuRIN') or problem('Cannot 
> prepare SQL statement');

Reply via email to