Hilfe mit SQL Rückgabe

  • Servus zusammen,

    durch einen Arbeitskollegen bin ich auf diese "Script" Sprache gekommen, aber ich habe damit folgendes Problem.
    Ich habe eine SQL Abfrage fuer einen "MS SQL Server" definiert.

    Hier die Funktion:

    Func db_read()
    $sql = _SQLCon($DBserver, $DBuser, $DBpw, $DBname)
    $sql_query_hnum = _SQLQuery($sql, "Select dbo.xxx.Preload,dbo.x.FileName,dbo.xxx.SKU FROM dbo.[File] CROSS JOIN dbo.xxx WHERE dbo.xxx.Preload = '" & $cut_hnum & "' AND dbo.x.FileName = '" & $cut_imagenum & "' And dbo.xxx.SKU = '" & $cut_sku & "'")

    With $sql_query_hnum

    $db_out_preload = .Fields("Preload").value
    $db_out_imgnr = .Fields("FileName").value
    $db_out_langk = .Fields("SKU").value

    Endwith

    $db_hnum = "R" & $db_out_preload & $db_out_langk
    $db_imagenum = $db_out_imgnr

    db_ini_compare()
    EndFunc


    Mein Problem ist jetzt folgendes:

    Wenn in dieser ini Datei die ausgelesen wird, die Image Nummer bzw. die Abfragen aus der SQL Datenbank nicht zutreffen, kann er das logischer weise nicht in die einzelnen Variablen uebergeben und muesste somit den User einen Fehler ausgeben. In C++ usw gab es den try and catch was sich hier ja nicht realisieren laesst.
    Kann ich irgendwie in die Funktion einen Abfrage einbauen, die sagt, wenn alles zutrifft soll er es abarbeiten und wenn einzelne Dinge nicht zutreffen soll er einen Fehler ausgeben und nicht das Programm mit einem crit error beenden.

    Ich hoffe ihr koennt mir da helfen, momentan habe ich dafuer keine Lösung bzw keinerlei Ansatz X(

    Einmal editiert, zuletzt von Pay (17. Dezember 2008 um 11:56)

  • Das gibt mir mein Editor aus wenn ich nen "Run" fahre
    Dabei ist zu beachten, dass die Werte die er per SQL Abfrage sucht, nicht in der Datenbank vorhanden sind bzw zwar vorhanden sind, aber nicht dem suchkriterium der SQL Abfrage entsprechen.

    $db_out_preload = .Fields("Preload").value
    $db_out_preload = .Fields("Preload").value^ ERROR

    mit dem @error habe ich schon herum gespielt, aber hier funktioniert das nicht, warum... keine Ahnung

    Einmal editiert, zuletzt von Pay (16. Dezember 2008 um 14:51)

    • Offizieller Beitrag

    Ich habe leider kein MySQL, hoffe aber dir vom Ansatz her helfen zu können. "$sql_query_hnum = _SQLQuery($sql, "Select dbo.xxx......" - Was gibt dieses Query zurück? Ich verwende nach Möglichkeit Execute für das Query um ein Recordset zu erhalten. Das hat den Vorteil, dass bei einer erfolglosen Abfrage dann halt ein leeres Recordset zurückgegeben wird. Und das kannst du dann leicht abfragen.

    Hier mal noch die kpl. Errorfunktion:

    Spoiler anzeigen
    [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
    ;...
    ;...
    Func MyErrFunc()
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext )
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc

    [/autoit]
  • Danke dir fuer den noch geposteten Code.
    Ich habe gestern Abend noch einen Error Handler geschrieben, aber das ist noch nicht die Lösung die ich suche :)
    Aber vom Grundsatz her ist das Problem hier gelöst.
    Danke an die beiden vorposter für den Denkanstoß.

    Mein Ziel ist es das ganze nicht ueber den Errorhandler zu realisieren, sondern schon im Vorfeld in der SQL Abfrage zu definieren, ob Werte vorhanden sind, die mit der Select Abfrage übereinstimmen.

    Aber wie gesagt, merci euch zwei!
    Setze das Thema hier mal auf "gelöst"