Datensatz kann nicht in DBGrid mittels DBNavigator aus einer Menge von zwei Tabellen gespeichert werden



  • Hallo,

    dir sollte die Klasse TUpdateSQL dabei helfen, s. Datenmenge mit TUpdateSQL aktualisieren - damit kannst du individuelle SQL-Anweisungen ausführen.

    Bei deinen jetzigen beiden Test-Tabellen wäre jedoch ein JOIN überflüssig, da du doch alle Informatione direkt aus der Tabelle MELDUNGEN holen könntest (aber ich nehme an, daß deine echten Tabellen einen JOIN benötigen würden ;-).



  • Danke für den Tip!

    doch leider bekomme ich beim ModifySQL immer die Fehlermeldung
    "Die Feldnamen für MELDUNGEN konnten nicht erkannt werden"

    Was mach ich falsch?

    So wie ich jetzt die Komponente UPDATESQL verstanden habe, gebe ich folgendes im
    Modify an.

    UPDATE MELDUNGEN (<- dies bezieht sich doch auf die zu aktualiesierende Tabelle)
    SET FehlerMeldung = :FehlerMeldung (<- die Spalte die den neuen Wert bekommt)
    WHERE IFEHLERNR = :OLD_IFEHLERNR (<- Schlüsselfeld zur Identifizeirung des Feldes)

    Leider bekomme ich immer die obige Fehlermeldung! 😞 😞 😞



  • Sollte es nicht "FEHLERNR" (statt "IFEHLERNR") als Spaltenname sein?



  • Da hast du vollkommen Recht.
    Habe mich leider verschrieben.
    Nichtsdestotrozt ist der Fehler da.



  • Es handelts sich bei meinen DB-Komponenten um eine OraSession, mit der ich die Konnektivität zur DB aufgebaut habe.
    Diese steht auch.

    Dazu habe ich ein OraQuery die das SQL-Statment mit dem JOIN beinhaltet und ein
    DataSource, das als Bindegleid zum DBGrid fungiert.

    Jetzt habe ich versucht, die UpdateSQL-Komponente zu nutzen.
    Doch leider erhalte ich die genannte Fehlermeldung.

    Zudem kann ich im Feld UpdateOject der OraQuery-Komponente die UpdateSQL-Komponente nicht auswählen.

    Und wenn ich CachedUpdet beim Query auf true setzte sind alle Daten aus dem Grid verschwunden.

    Habt ihr vllt eine Idee woran das leigen könnte?
    Können die besagten Komponenten nicht miteinader kommunizieren?



  • Kann mir keiner der komponenten Fachleute helfen?
    Bin für jeden Hilfe und Hinweis dankbar!!!



  • Für Oracle gibt es wohl die spezielle TOraUpdateSQL-Komponente.

    Und dann noch Updating Data with ODAC Dataset Components...



  • Danke vielmals !!!

    Das war der Hinweis den ich gebraucht habe.
    Habe anscheinend den Wald vor lauter Bäumen nicht gesehen.

    Ich hätte da nur eine kleine Frage noch also
    OraUpdateSQL->->ExecSQL(ukModify); funktioniert jetzt perfekt.

    Wenn ich aber einen els Teil anbette z.B

    if ( Button == nbPost )
      {
        OraUpdateSQL1->ExecSQL(ukModify);
      }
    	 else if (Button == nbDelete)
    	{
        OraUpdateSQL1->ExecSQL(ukModify);
    

    Meldet mir der Compiler...
    [BCC32 Fehler] Unit3.cpp(34): E2015 Mehrdeutigkeit zwischen 'ukDelete' und 'Db::ukDelete'

    [BCC32 Warnung] Unit3.cpp(34): W8006 TUpdateKind wird mit TUpdateRecKind initialisiert

    Habe nachgeschaut. Sehe keine Mehrdeutigkeit bspw. in der Header.cpp
    Habe aber leider auch keine Ahnung wo sonst eine Mehrdeutigkeit zuz suchen wäre.



  • Josip Broz schrieb:

    Meldet mir der Compiler...
    [BCC32 Fehler] Unit3.cpp(34): E2015 Mehrdeutigkeit zwischen 'ukDelete' und 'Db::ukDelete'

    [BCC32 Warnung] Unit3.cpp(34): W8006 TUpdateKind wird mit TUpdateRecKind initialisiert

    Habe nachgeschaut. Sehe keine Mehrdeutigkeit bspw. in der Header.cpp...

    Das liegt an der absoluten C++ Builder-Abart das bei den Komponenten zwar Namensräume vorgesehen sind, diese aber global in den entsprechenden Headern mittels using namespace ausgeleert werden. Du musst dort den richtigen Namensraum vorstellen, welches das ist sollte indirekt über die Hilfe ermittelbar sein (Wenn man den Header ausfindig macht)...

    Zum TUpdateKind-Fehler kann ich dir aber nichts sagen.



  • Die Mehrdeutigkeit resultiert auch wieder aus einem Namespace-Problem.
    TUpdateRecKind ist der Name des Enums (mit ukModify etc.) der OracleDB Komponente und TUpdateKind heißt das Enum bei der IDB Komponente von Embarcadero (auch hier gibts ein ukModify). Du musst halt den richtigen Namespace verwenden. Zur Not schau einfach mal in die dazugehörige Headerdatei wo die Definitionen drin sind.


Anmelden zum Antworten