Jan: Über Perlscript Microsoft SQL 2000 Datenbank abfragen!

Hallo,

ich möchte ein bestehendes Perlscript, welches den Inhalt einer Accessdatenbank abfragt, so ändern, dass es nicht mehr eine Access sondern eine MS SQL 2000 Datenbank abfragt.

Hier das Script:#!D:\Perl\bin

use DBI;
use CGI;

my $dsn = "DBI:ODBC:test";
my $dbh = DBI->connect($dsn);

my $SQL = "SELECT * FROM adressen";
 my $Abfrage = $dbh->prepare($SQL);
 $Abfrage->execute();

print "Content-type: text/html\n\n";
print "<HTML>\n";

print "<BODY BGCOLOR=#FFFFFF>\n";
print "<CENTER>\n";
print "<b>Inhalt der DB :</b><BR><br>\n";

while($Row=$Abfrage->fetchrow_hashref)
{
#  print "$Row->{name} \n $Row->{email}\n";
   print "$Row->{name}   $Row->{email} <br>";

}

print "\n";

print "</CENTER>\n";
print "</BODY></HTML>";

Ich kann es nicht 1 zu 1 übernehmen, dashabe ich gemerkt!
ODBC Verbindung ist richtig eingestellt... daran kann es also nicht liegen. irgendetwas an der syntaxmuss anders sein

Danke schon mal

MFG

Jan

  1. Hi Jan,

    my $dsn = "DBI:ODBC:test";
    my $dbh = DBI->connect($dsn);
    my $SQL = "SELECT * FROM adressen";
    my $Abfrage = $dbh->prepare($SQL);
    $Abfrage->execute();

    solche Funktionen liefern üblicherweise (auch) Informationen zurück, die Dir sagen, was davon geklappt hat, und wenn ja, warum nicht - oder so ähnlich.

    Ein defensiverer Programmierstil wäre Dir dringend anzuraten.

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
     => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
    Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
    1. Habe jetzt immer noch nicht kapiert was ich falsch mache bzw. was die Lösung ist??
      MFG Jan

      1. Hi Jan,

        Habe jetzt immer noch nicht kapiert was ich falsch mache

        Du hinderst Dein Programm daran, vernünftige Fehlermeldungen auszugeben.

        bzw. was die Lösung ist??

        Dies ist das Ergebnis des Vorherigen ...

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
        (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
         => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
        Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
        1. Tolle Hilfe!

          Wenn du wenigstens mal nen Vorschlag machen würdest wie es geht........ defensiver programmieren??...kann damit nix anfangen......irgendwas an der syntax muss flasch sein, vielleicht weiss kennt sich ja jemand damit aus!

          mfg jan

          1. Hi,

            Tolle Hilfe!

            Stimmt. Wenn du Michaels Vorschläge umsetzen würdest, wäre dir das bewusst.

            Wenn du wenigstens mal nen Vorschlag machen würdest wie es geht

            Hat Michael doch, s.o.

            defensiver programmieren?

            Das heißt, dass du erstmal alle deine Verbindungsversuche zur Datenbank mit einer Fehlerbehandlung versehen sollst, damit du weißt, was genau warum nicht funktioniert. So wie es im Moment aussieht, verlässt du dich völlig darauf, dass dein Script fehlerfrei funktioniert.

            irgendwas an der syntax muss flasch sein, vielleicht weiss kennt sich ja jemand damit aus!

            So lange du nicht sagst, was nicht funktioniert (-> Fehlerabfrage), wird dir niemand wirklich helfen können. Bis dahin empfiehlt sich auf jeden Fall ein Blick in die Dokumentation http://dbi.perl.org.

            Viele Grüße
            Torsten

            1. Sooo....
              das ist die Fehlermeldung die dazu angezeigt wird!!

              Hier mal mein abgändertes Skript:#!D:\Perl\bin

              use DBI;
              use CGI;

              my $dsn = "DBI:ODBC:sql-test";
              my $dbh = DBI->connect($dsn);

              my $SQL = "SELECT * FROM sql-test;";
               my $Abfrage = $dbh->prepare($SQL);
               $Abfrage->execute();

              print "Content-type: text/html\n\n";
              print "<HTML>\n";

              print "<BODY BGCOLOR=#FFFFFF>\n";
              print "<CENTER>\n";
              print "<b>Inhalt der DB :</b><BR><br>\n";

              while($Row=$Abfrage->fetchrow_hashref)
              {
              #  print "$Row->{name} \n $Row->{email}\n";
                 print "$Row->{name}   $Row->{email} <br>";

              }

              print "\n";

              print "</CENTER>\n";
              print "</BODY></HTML>";

              und das ist die fehlermeldung die kommt!!!
              DBD::ODBC::st execute failed: [Microsoft][ODBC SQL Server Driver][SQL Server]Lin
              e 1: Incorrect syntax near '-'. (SQL-42000)
              [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepare
              d. (SQL-42000)(DBD: st_execute/SQLExecute err=-1) at D:\Apacheroot\Jan-Test\sql-
              select.pl line 15.
              Content-type: text/html

              <HTML>
              <BODY BGCOLOR=#FFFFFF>
              <CENTER>
              <b>Inhalt der DB :</b><BR><br>
              DBD::ODBC::st fetchrow_hashref failed: (DBD: no select statement currently execu
              ting err=-1) at D:\Apacheroot\Jan-Test\sql-select.pl line 24.

              1. Hi Jan,

                my $SQL = "SELECT * FROM sql-test;";
                DBD::ODBC::st execute failed: [Microsoft][ODBC SQL Server Driver][SQL Server]Lin
                e 1: Incorrect syntax near '-'. (SQL-42000)

                eben - das hilft doch schon mal weiter. Der Server scheint nicht in der Lage zu sein, die beiden Tabellen "sql" und "test" voneinander zu subtrahieren ...

                Viele Grüße
                      Michael

                --
                T'Pol: I apologize if I acted inappropriately.
                V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
                (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
                 => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
                Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
                1. Hi

                  Das ist der Name der TAbelle!! sql-test
                  Der soll auch nichts subtrahieren!

                  mfg

                  Jan

                  1. Hi Jan,

                    Das ist der Name der TAbelle!! sql-test
                    Der soll auch nichts subtrahieren!

                    das glaubst Du vielleicht. Die Datenbank ist anderer Meinung ... woraus ich schließe, daß in _ihrem_ Universum das Zeichen "-" kein Bestandteil eines legalen Tabellennamens sein darf. (RTFM)

                    Viele Grüße
                          Michael

                    --
                    T'Pol: I apologize if I acted inappropriately.
                    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
                    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
                     => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
                    Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
                  2. Hi,

                    Das ist der Name der TAbelle!! sql-test
                    Der soll auch nichts subtrahieren!

                    Das "-" ist in DB-Namen nicht erlaubt.

                    Viele Grüße
                    Torsten