Markus Trusk: mySQL - Keine Verbindung unter Windows

Hi,
Ich versuche jetzt mal ohne Firewall (weil was ich auch tue, ich komme nicht durch!) mit einem Perlscript einen Datensatz in meine lokale DB einzufügen. Hier wäre das Perlscript:

#!/usr/bin/perl -w

use DBI;
use CGI::Carp qw(fatalsToBrowser);
use strict;

my $database = 'test';
my $dbserver = 'xxxxx';
my $user = 'xxxx';
my $pass = 'xxxxxx';

my $input_vor = 'Markus';
my $input_nach = 'trusk';

my $dbh = DBI->connect("DBI:ODBC:$database:$dbserver", $user, $pass, {AutoCommit => 0}) or die "Cant connect: $DBI::errstr\n";
my $einfuegen = $dbh->prepare("INSERT INTO haupttabelle (vorname,nachname) VALUES (?,?)") or die $dbh->errstr;

$einfuegen->execute($input_vor,$input_nach) or die $dbh->errstr;
$einfuegen->finish;

print "Content-type:text/html\n\n";
print 'Fertig';
$dbh->disconnect;

..aber wenn ich das Script starte, bekomme ich folgende Fehlermeldung:
Cant connect: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben (SQL-IM002)(DBD: db_login/SQLConnect err=-1)

was soll das heißen? habe ich ODBC überhaupt installiert? Bei WinXP ist es doch dabei? Jedenfalls habe ich nach odbc auf der HD gesucht, und fand mehrere odbc.dll's. Ich habe auch das Perlmodul Modul DBD-ODBC installiert. Was ist überhaupt der Standardtreiber und wo soll ich den angeben? Hat jemand Ahnung, wo der Fehler liegt?

Markus Trusk.

  1. Von woher holst Du denn die Daten ?

    Von einem Provider ?
    Die lassen ein externes abrufen der mySQL Datenbank meist nicht zu.

    Christian

  2. Hi,

    wie Sven schon gesagt hast, kommst du zumeist nicht von extern auf Datenbanken eines Providers drauf. Sollte das nicht dein Problem sein, dann müsstest du vor allem erst mal nachgucken, ob du überhaupt einen mySQL-ODBC-Treiber hast. Den musste ich getrennt von der Seite herunterladen, installieren (Windows stellt bei Default nur die ODBC-Umgebung, nicht aber die konkreten Treiber für einzelne Datenbanken).
    Wenn du dann über so eine DSN verbinden willst, musst du - meines Wissens - in der ODBC-Konfiguration diese Datenquelle angeben. Dazu gehst du in die Systemsteuerung -> Verwaltung -> ODBC und legst du einer Benutzerdatenquelle an. Der Assistent führt dich dann durch die Konfiguration und am Ende kannst du auf diese DSN zugreifen.

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

      Systemsteuerung -> Verwaltung -> ODBC

      Ok da war ich jetzt mal, und habe versucht, eine Datenquelle zu einem SQl Server anzulegen. Egal wie ich es auch anstelle, es kommt immer ein "Test fehlgeschlagen" heraus, wenn ich die neu angelegte Datenquelle testen will :( ich glaube, ich fahre wirklich damit besser, wenn ich die Scripts ständig auf meinen Webspace hochlade, weil da funktioniert alles problemlos, oder ich werde wirklich so so XAAMMP, oeder wie das auch heißen mag, ausprobieren.

      Markus Trusk.

  3. Hi,

    was soll das heißen? habe ich ODBC überhaupt installiert? Bei WinXP ist es doch dabei? Jedenfalls habe ich nach odbc auf der HD gesucht, und fand mehrere odbc.dll's. Ich habe auch das Perlmodul Modul DBD-ODBC installiert. Was ist überhaupt der Standardtreiber und wo soll ich den angeben? Hat jemand Ahnung, wo der Fehler liegt?

    Jow, Du brauchst eine lokale ODBC Datenquelle, die musst Du als System DSN (Data Source Name) über die Systemsteuerung einrichten.

    (keine User - DSN!)

    Gruss, Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
  4. Hi nochmal,
    da ich überprüfen will, ob ein Datensatz gelöscht wurde oder nicht, will ich den Rückgabewert dazu verwenden. Eines ist aber seltsam. Wenn kein Datensatz gelöscht wurde, bekomme ich nicht den Rückgabewert 0, sondern 0E0? Warum ist das so?

    Hier die Sub:

    sub loeschen    {
    my ($vorname,$nachname) = @_;
    my $dbh = DBI->connect("DBI:mysql:$database:$dbserver", $user, $pass, {AutoCommit => 0}) or die "$!\n";
    my $loeschen = $dbh->prepare("DELETE FROM haupttabelle WHERE vorname = '$vorname' AND nachname = '$nachname'") or die $DBI::errstr;
    my $geloeschte_daten = $loeschen->execute() or die $DBI::errstr;
    $loeschen->finish;
    $dbh->disconnect;

    print $query->header;
    print $geloeschte_daten;
    }

    Markus Trusk.