Thomas: Insert-Schleife "stürzt" nach dem 469. Satz ab

moin

ich habe in perl eine insert-Schleife die eigentlich prima funktioniert. jedoch bleibt das script nach dem 469. Satz stehen.
also zb. 400 sätze werden ohne probleme in meine mysql-DB geschrieben, aber eben wenns mehr als 469 sätze sind, passiert gar nichts mehr. auch keine fehlermeldung. dann muss ich perl abschiessen.

hier den perl-schnipsel:

$sth = $dbh->prepare("insert into lh_karte (y,x) values (?,?)");
foreach $y (0 .. $hoehe)
    {
    foreach $x (0 .. $breite)
        {
        $sth->execute($y,$x);
        (die "Fehler: $DBI::errstr") if $DBI::errstr ne "";
        }
    }

ich hab schon alles ausprobiert: autocommit an/aus, mit prepare, direkter insert...

hat wer von euch eine idee?
wäre ich sehr dankbar :)

  1. yo,

    um welches dbms handelt es sich den ?

    Ilja

    1. Hi,

      um welches dbms handelt es sich den ?

      'mysql-DB'?

      Nee, der Code scheint OK zu sein. Muss was Esoterisches sein, oder?

      Gruss,
      Ludger

      1. Muss was Esoterisches sein, oder?

        es tut immer noch nicht. langsam glaube ich an eine verschwörung!

        1. yo,

          da habe ich doch glatt übersehen, dass es sich um mysql handelt. wenn man eine bestimmte anzahl von datenbank-einträgen machen kann und es nach einigen nimmer funktioniert, das könnte darauf deuten, dass du vielleicht einen primary key hast, der zu klein dimensioniert wurde ?

          Ilja

  2. hier den perl-schnipsel:

    Es geht also um Perl, nicht um Datenbanken.

    $sth = $dbh->prepare("insert into lh_karte (y,x) values (?,?)");

    Du hast deinen code schlampig programmiert, gerade in der Entwicklungsphase ist die Benutzung von use strict und von Warnungen (der Parameter -w) dringend anzuraten.
    Darüber hinaus kannst du beim Verbinden mit der DB noch angeben welche Fehlermeldungen ausgegeben werden. (such mal nach raiseError in der Doku)

    foreach $y (0 .. $hoehe)
        {
        foreach $x (0 .. $breite)
            {
            $sth->execute($y,$x);
            (die "Fehler: $DBI::errstr") if $DBI::errstr ne "";

    Das geht auf jeden Fall einfacher:
    $sth->execute($y,$x) || die "Fehler: $DBI::errstr";

    Struppi.

    1. omg, ich brauch doch hilfe und kein anschiss!

      Es geht also um Perl, nicht um Datenbanken.

      nein es geht um die DB die abstürzt. ich glaub nicht dass das problem beim perl liegt!

      die Benutzung von use strict und von Warnungen (der Parameter -w) dringend anzuraten.

      das hab ich natürlich. aber ich hab ja auch nicht das ganze program gepostet.

      Darüber hinaus kannst du beim Verbinden mit der DB noch angeben welche Fehlermeldungen ausgegeben werden. (such mal nach raiseError in der Doku)

      das hab ich beim connect angegeben, hat jedoch nichts gebracht. aber ich werd mir das mal genauer anschauen...

      Das geht auf jeden Fall einfacher:
      $sth->execute($y,$x) || die "Fehler: $DBI::errstr";

      ja, würde hier gehen. aber nicht jeder db-befehl gibt einen rc zurück. deshlab mach ich es lieber einheitlich.

      1. omg, ich brauch doch hilfe und kein anschiss!

        Wer hat dich denn angeschissen?

        Es geht also um Perl, nicht um Datenbanken.
        nein es geht um die DB die abstürzt. ich glaub nicht dass das problem beim perl liegt!

        Ich denk du musst Perl abschiessen?

        die Benutzung von use strict und von Warnungen (der Parameter -w) dringend anzuraten.
        das hab ich natürlich. aber ich hab ja auch nicht das ganze program gepostet.

        Ich seh nirgendwo eine deklaration in der Form my $var also muss ich davon ausgehen das du es nciht verwendest.

        Darüber hinaus kannst du beim Verbinden mit der DB noch angeben welche Fehlermeldungen ausgegeben werden. (such mal nach raiseError in der Doku)
        das hab ich beim connect angegeben, hat jedoch nichts gebracht. aber ich werd mir das mal genauer anschauen...

        Nicht ausgeben, sondern du stellst IMHO ein, welche Fehlermeldungen zu einem Abbruch führen.

        Ich vermute nach wie vor eher ein Perl Problem als ein DB Problem, da 500 Datensätze kein Problem sind (ich benutze so ein skript um regelmäßimg ca. 13000 datensätze zu erneuern).

        Struppi.