Rückgabewert von SQL Funktionene in MFC abfragen



  • danke für deine Antwort. Diese Möglichkeit habe ich auch schon in Betracht genommen sie hat aber einen Nachteil.
    Meine Functionen dienen zum erstellen , ändern und löschen von Datensaätzen in unterschiedlichen Tabellen.
    Wenn ich nun jede "Aktion" in einer seperaten Tabelle abspeichere muss ich ja wissen welcher Nutzer welche Aktion ausgeführt hat.
    Da das Programm im Netz betrieben werden Soll.

    Trotzdem vielen
    Dank



  • Dann mach doch die Spalte mit in die Tabelle:
    User | Returnwert | Funktionsname | PC | ...
    Das kannst du dir doch frei gestalten.

    Und falls du mit Transactions arbeiten kannst, sieht sowieso kein anderer was sich da tut, bis du Commit machst. 😃

    Solltest du einen eleganteren Weg finden, wird der übrigens in die FAQ aufgenommen - mir ist leider auch nichts bekannt.
    Ich arbeite daher einfach nicht so viel in der Datenbank, sondern mache möglichst viel im Programm. 😞
    Hier und da mal ein Trigger, den Rest macht das Programm. Da stehen zwar jedem Datenbankentwickler die Haare zu Berge, aber es ist pflegeleicht. 😉



  • ähm was erwartest du den für nen Rückgabewert? Bei Fehlern fliegt ne Exception. Die kann/sollte man fangen. Aber ansonsten is ja nix weiter



  • Ich will über die Funktionen datensätze änder einfügen und löschen.
    Diese Datensätze können nur einmal vorkommen. ist der datensatz schon vorhanden gibt die Funktion eine 0 zurück sonst eine 1 . der befehl führt zu keinem fehler bei einem bereits vorhandenen eintrag .

    Vielen Dank



  • Dann wirf den Rückgabewert, den kannst du dann im code fangen. Hat Pellaeon ja schon erwähnt. 🙂



  • Wie realisert man das In der SQL Funktion.
    Kenne nur Return .

    Danke



  • Ich meine "throw" mal gesehen zu haben.



  • Also entweder holst du dir die ODBC-Handles aus der Klasse und benutzt ODBC-API direkt. Würde ich aber als schlechten Weg einstufen.

    Wenn keine Datensätze doppel vorkommen dürfen, dann klingt das nach nem Primary Key -> sprich Tabellenstruktur anpassen.
    Und wenn du jetzt versuchst nen neuen Datensatz anzulegen mit nem PK, den es schon gibt, dann fliegt automatisch ne Exception in CDatabase.



  • Erst einmal Danke,
    das was dur gesagt hast ist richtig und funktioniert auch. ALlerdings sind die Fehlermeldungen auf Englisch und für einen normalen Nutzer nicht Nachzuvollziehen. Habe ich die Möglichkeit dies zu ändern ?

    Vielen Dank



  • Normalerweise kann man in der ODBC Datenquelle eine Sprache einstellen.
    Wenn nicht, hast du vielleicht blos einen englischen Treiber und müsstest einen deutschen suchen.

    Oder du wertest die Fehlernummern aus und gibst eigene Texte aus.
    Die Datenbankmeldungen sind sowieso zu kryptisch für normale User. 😉



  • Bank für diese Hinweise.
    Die Sprache konnte ich verstellen aber leider sind die Fehler immer noch auf Englisch.
    Wie kann ich diese Fehlermeldungen abfangen um eigene zu erzeugen.
    Muss ich das auf Datanbankebene tun oder im Programm

    Danke



  • Das geht im Programm mit

    try
    {
    // mach was in der Datenbank
    }
    catch (CDBException* e)
    {
    	e->ReportError();
    }
    

    Es gibt dann noch TRY und CATCH, aber ob und wo da Unterschiede sind, habe ich noch nicht geguckt. Ich nehme einfach das kleine (ist fauler 😉 ).



  • Danke

    Habe das bei mir so gemacht :

    try
    {
    db.ExecuteSQL(sql_befehl);
    }
    catch (CDBException ex)
    {
    ex.ReportError(MB_OK,1);
    }

    Leider wird immer noch die Standardfehlermeldung der DB angezeigt,

    Danke



  • Okay, dann hast du den winkenden Zaunpfahl übersehen. 🙄
    Schau dir mal die Klasse CDBException und ihre Member und die der Basisklasse an.



  • Hab es hinbekommen. Hatte in der DB zu viel Logik.Vielen Dank euch allen


Anmelden zum Antworten