_SQLite_Query crasht Script

  • Hallo !

    Auch auf die Gefahr hin das ich mal wieder nur knapp daneben liege...
    Wenn ich folgende SQLite Query mache klappt alles

    Code
    _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='Ichbindoof';",$Query)

    (Angenommen der Eigentuemer "Ichbindoof" existiert)

    Code
    _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='Ichbindooff';",$Query)

    Hier stürzt das Scritp ab da es "Ichbindoof2" nicht gibt.
    Wie kann ich hier unterscheiden ob es den Eintrag gibt ohne ihn nachzuschlagen (da sonst crash) ?

    Mein workaround dafür wäre die ganze tabelle zu holen und es einzeln abzugleichen.
    Gefällt mir aber nicht.

    (Mehr code ist nicht nötig - das Beispiel stellt das Problem gut dar.)
    Hat jemand noch ne andere idee ?

    -

  • (Mehr code ist nicht nötig - das Beispiel stellt das Problem gut dar.)

    Doch - ist durchaus nötig.
    Wenn die Abfrage der SQL-Syntax entspricht und alle Bezeichner existieren und das einzige "Problem" ist, dass eine Nullmenge zurückgegeben wird dann stürzt nichts ab.
    Wenn dein Skript also abstürzt muss der Fehler also woanders liegen.

    Mit Crash meinst du, das Skript stürzt einfach ohne irgendeine Meldung ab?

  • Ja genau. Crashed ohne Fehlermeldung.

    Folgendes wurde versucht

    Code
    If _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='"&GUICtrlRead($Eigentuemer)&"';",$Query) == $SQLITE_OK Then _SQLite_FetchData($Query,$Rows)
    Code
    _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='"&GUICtrlRead($Eigentuemer)&"';",$Query)
    If  not @error Then _SQLite_FetchData($Query,$Rows)
    Code
    _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='"&GUICtrlRead($Eigentuemer)&"';",$Query)
    If IsDeclared($Query) Then _SQLite_FetchData($Query,$Rows)
    Code
    _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='"&GUICtrlRead($Eigentuemer)&"';",$Query)
    If $Query<>"" Then _SQLite_FetchData($Query,$Rows)


    Das es an einer allgemeinen Fehlimplementierung liegt glaube ich nicht, da es ja funktioniert sobald ein Wert eingetragen ist.
    Dachte außerdem zuerst das es an FetchData liegt weswegen ich die obrigen Methoden versucht habe.

    //€dit : Source code besser eingerückt

    Ich lass es dir gern per PM zukommen - veröffentlichen will ichs aber nicht.

    -

  • was liefert denn $REturn = _SQLite_Query($database,"SELECT * FROM Eigent WHERE Eigentuemer=='"&GUICtrlRead($Eigentuemer)&"';",$Query) ?
    und was sagt @error nach dem Befehl?

    Klingt so als wäre die Tabelle nicht vorhanden/erreichbar oder sowas in der Richtung...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • hmm,
    laut SQLite ist das sozusagen dasselbe ;)
    https://www.sqlite.org/lang_expr.html

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Kannst du vielleicht eine Mini-DB mit Minimalbeispiel erstellen welche den Fehler für uns reproduzierbar macht?

    Wenn es wirklich nur eine Abfrage wäre, die eine Nullmenge zurückgeben würde dann würde _SQLite_Query dennoch $SQLITE_OK zurückgeben (also ohne @error).
    Ob die Menge leer ist würde man erst mit dem Rückgabewert des ersten _SQLite_FetchData() herausfinden.

  • Die Lösung ist

    [autoit]

    $database = _SQLite_Open("SB-database.sqlite")

    [/autoit]

    mit dem Prefix

    [autoit]

    Global

    [/autoit]

    zu versehen.

    Außerdem DARF NICHT

    [autoit]

    ' '

    [/autoit]


    diese Anführungszeichen verwendet werden, wenn bereits _SQLite_Escape(...) verwendet wird !
    (Um den zu suchenden String)
    Danke an alle die sich hier einen Kopf gemacht haben !

    -

    2 Mal editiert, zuletzt von Nachid (28. November 2014 um 20:36)