New problem now.  I appear have resolved my earlier problems.  The
final issue appears to have been that the SQL statement was interpreting the
WHERE clause as having multiple arguments.  Quoting the where clause seems
to have resolved the error, but the data still is not making it into the
database?!?!  Below is the "working" UPDATE line:

         $dbh->do(qq{UPDATE systems SET $set WHERE 'Name = $name'});

        Not sure what is wrong now though.  :(

-----Original Message-----
From: NIPP, SCOTT V (SBCSI)
[mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 02, 2002 10:46 AM
To: '[EMAIL PROTECTED]'
Cc: '[EMAIL PROTECTED]'
Subject: RE: UPDATE Statement Problem...


        I actually have that covered, I think.  The variable $set actually
expands to something like ip='192.168.0.1' , speed='450' , etc.  This
portion is working OK, I think.  I can print the SQL statement and then
paste it into the MySQL Console and it UPDATEs OK.  Below is the portion of
code I use to generate the $set:

      while (my $ref = $test->fetchrow_hashref ('NAME_lc')) {
        undef $set;
        foreach my $key (keys %$ref) {
          unless ($$key eq $ref->{$key}) {
            $set .= " , " if $set;
            $set .= $key . "=\'$$key\'";
          }
        }

        Thanks again.

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 02, 2002 10:40 AM
To: NIPP, SCOTT V (SBCSI)
Subject: RE: UPDATE Statement Problem...


THe problem with the update statement is that you need a column name
before the value you are setting it to.  EG.  UPDATE systems SET col_set
= $set WHERE name = $name;
You are missing the col_set (or whatever the column name is).

Gordon

-----Original Message-----
From: NIPP, SCOTT V (SBCSI) [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 02, 2002 10:28 AM
To: 'Michael Ragsdale'; 'Tielman J de Villiers'
Cc: '[EMAIL PROTECTED]'
Subject: RE: UPDATE Statement Problem...


        A bit more information...  Here is the error message from the
Perl
script on the UPDATE failure.

DBD::mysql::db do failed: You have an error in your SQL syntax near
'WHERE
Name ='$name' LIMIT 1' at line 1 at sys_db_update1.pl line 41, <INV>
line
81.

-----Original Message-----
From: NIPP, SCOTT V (SBCSI)
[mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 02, 2002 10:20 AM
To: 'Michael Ragsdale'; 'Tielman J de Villiers'
Cc: '[EMAIL PROTECTED]'
Subject: RE: UPDATE Statement Problem...


        Wow!!!  This is one awesome mailing list.  I really appreciate
all
of the responses.  Several of your suggestions have helped me to narrow
in
on the problem.  Here is what I have come up with so far, but still not
quite there.

    my $test = $dbh->prepare("SELECT * FROM systems WHERE Name
='$name'");
    $test->execute ();
    if ($test) {
      while (my $ref = $test->fetchrow_hashref ('NAME_lc')) {
        undef $set;
        foreach my $key (keys %$ref) {
          unless ($$key eq $ref->{$key}) {
            $set .= " , " if $set;
            $set .= $key . "=\'$$key\'";
          }
        }
        if ($set) {
          print "$name found in database.  Updating information for
$name.
\n";
          print "$set \n";
          # print "$dbh->do(q{UPDATE systems SET $set WHERE Name = $name
LIMIT 1})";
          $dbh->do(q{UPDATE systems SET $set WHERE Name = $name LIMIT
1});
        } else {
          print "$name found in database to be current.  No update
necessary. \n";
        }
      }
      } else {
        print "$name was NOT found in database.  Adding database entry
for
$name.  \n";
        $dbh->do("INSERT INTO systems
VALUES('$name','$id','$ip','$model','$cpunum','$speed','$os_ver','$mem',
'$sc
si','$fibre','$disks','$size','$tapes','$sa')")
          or print "Error updating database:  ", $dbh->errstr, "\n";
    }
  }


        I am now looking figuring out how to print out the error message
from the failed SQL statement (told you I am a newbie).  Once I get that
part figured out and going, I think I can home in on the problem rather
quickly.  Then I will just have to port this portion of code from my
laptop
to my Unix platform.
        Thanks again for all of the helpful suggestions.  Almost
everything
you guys have responded with so far has helped to push me along in the
correct direction.

-----Original Message-----
From: Michael Ragsdale [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 02, 2002 10:03 AM
To: NIPP, SCOTT V (SBCSI); 'Tielman J de Villiers'
Cc: '[EMAIL PROTECTED]'
Subject: RE: UPDATE Statement Problem...


At 10:50 AM 4/2/2002, NIPP, SCOTT V (SBCSI) wrote:
>         I added a COMMIT immediately after the UPDATE, and still have
the
>same problem.  Below is exactly what I added, with the lines
immediately
>before and after.
>
>           $dbh->do(q{UPDATE systems SET = $set WHERE Name = $name
LIMIT
1});

q{} does not interpolate your scalars.  Try qq{}

-Mike

Reply via email to