dbedit selbst aktualisieren



  • hallo,

    ich habe zwei felder in meiner datenbank, über die ich einen primärschlüssel beziehe. einmal ein feld namens 'nummer' und eines namens 'jahr'. natürlich sind auch andere felder vorhanden, unter anderem auch ein datumsfeld namens 'datum'. für das jahr benötige ich aus einem anderen feld immer die letzten beiden jahres ziffern. z.b. "05","04","06".

    in meiner applikation möchte ich das datumsfeld anzeigen und ändern lassen, jedoch muss ich dort die letzten beiden zahlen nach änderung dieses maskfeldes sofort in die tabelle in das feld namens 'jahr' schreiben, um dort unter umständen zu überprüfen, ob referentielle integrietät gewahrt wurde, oder verletzt wird.

    gedacht habe ich mir nun folgendes:

    sowie das datum in dem maskedit geändert wird schneide ich die letzten beiden ziffern ab, und schiebe sie in ein "unsichtbares" db-feld namens dbtxtJahr. wenn das maskfeld nun den focus verliert, so soll er das unsuchtbare feld auch in der db aktualisieren, um eine eventuelle exception auszuführen wegen der ref. integr. anhand dessen kann ich das datumsfeld zurücksetzen, und den focus erneut darauf platzieren. klar könnte ich nen query senden, aber edit felder aktualisieren ja eh,wenn der focus es verlässt, nur wie rufe ich diese methode für ein unsichtbares dbedit auf?

    beispiel:

    nummer: 000001
    jahr: 05
    datum: 14.02.2005
    2.
    nummer: 000005
    jahr: 05
    datum: 21.02.2005

    wenn jetzt 1 bearbeitet wird, so stellt das feld jahr und nummer zusammen den primär schlüssel(da ich dort nur das jahr benötige, und nicht das komplette datum bringt es mir nichts das datum als primär mit zu definieren). jetzt gibt der benutzer beispielsweise nummer:000005 und jahr: 18.01.2005 ein, dann ist nummer und jahr mit nummer:000005 und jahr:05 belegt, löst also eine exception aus, so sollte es sein, nur das jahr feld soll nicht direkt editierbar sein.

    kann mir dort jemand helfen?

    nachtrag

    ok, mir fällt ein, ich kann die frage ziemlich abkürzen:

    wie rufe ich die aktualisierungsmehtode für ein dbedit selbst auf, sodass er bestehende daten, welche in dbedit->text eingeschrieben sind sofort in db packen will, also per knopfdruck oder so?

    nachtrag-ende

    vielen dank im voraus.

    gruß gerd



  • Hallo

    laß das unsichtbae TDBEdit weg und benutzt direkte SQL-Kommandos wie UPDATE

    UPDATE <TABLE> SET <FIELDNAME> = <VALUE> WHERE <PRIMARYKEYFIELD> = <PRIMARYKEY>
    

    du kannst auch mehrere Felder gleichzeitug beschreiben, einfach durch Kommas trennen.
    So ein Kommando dann mit TQuery->ExecSQL() ausführen, fertig

    bis bald
    akari



  • danke erstmal,

    wie gesagt, das mit dem query wäre mir klar, dass ich es darüber lösen kann, nur wollte ich mal wissen, wie man die „Update-Methode” eines z.b. DBEdit aufruft?

    gruß gerd



  • Hallo

    nromalerweise sollte das DBEdit jede Änderung an Text merken und automatisch an DataSource weitergeben.
    Solange die Verbindung zu einen modifizierbarem Datensatz da ist, versteht sich.

    bis bald
    akari



  • tut es ja gerade nicht! 🙂

    deshalb frage ich ja.

    gruß gerd



  • Hallo

    hast du schon mal die Eigenschaft ReadOnly des Edits überprüft/gesetzt?
    Wenn es nicht automatisch geht, sehe ich keine Möglichkeit für manuelle Zwangsausführung.
    Btw : da unsichtbare Controls keinen Fokus bekommen können, können sie auch keinen verlieren...

    bis bald
    akari



  • steht auf false, also beschreibbar!

    gruß gerd



  • BCB-Hilfe schrieb:

    TDataSource::AutoEdit

    Determines if a data source component automatically calls a dataset’s Edit method when a data-aware control associated with the data source receives focus. [...]

    Solltest du dir mal auf der Zunge zergehen lassen.



  • bin wahrscheinlich zu doof es zu kapieren?

    kannste mir das mal auf deutsch erklären?

    gibt es jetzt einen weg?

    mein datasource hat autoedit=true

    gruß gerd



  • Hallo

    es geht darum, das das DBEdit den verbunden Datensatz in den Editmodus versetzt, wenn es den Fokus bekommt, das dann Vorraussetzung dafür ist, das Änderungen beim Verlassen des Controls gespeichert werden.
    Was bei deinem unsichtbarem Control nicht der Fall ist. Also mußt du auf Update der SQL-Kommando umbauen.

    bis bald
    akari



  • Hallo akari, gib Dir keine weitere Mühe, ich habe ihm schon vor Wochen genau das empfohlen... Also lass es ihn auf die Harte Tour lernen.



  • achso, schade, naja, wenn es denn keinen anderen ausweg gibt, dann eben doch so.

    danke trotzdem

    @ joe:
    ups, habe nur eine mail für antwort bekommen, und gar nicht gesehen, dass es noch eine von dir gab:

    erstmal "vor wochen" ist eine her! 🙂
    ok, zu dem thema schreibe ich im richtigen thread dazu weiter...

    wen es interessiert:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-101964.html

    gruß gerd



  • habe es gelöst mittels sql-update.



  • akari schrieb:

    es geht darum, das das DBEdit den verbunden Datensatz in den Editmodus versetzt, wenn es den Fokus bekommt, das dann Vorraussetzung dafür ist, das Änderungen beim Verlassen des Controls gespeichert werden.

    Ich dachte eher daran, die Edit-Methode des DataSet von Hand aufzurufen, oder zur Not den Fokus kurzfristig auf ein anderes, mit derselben Source verbundenes data-aware control auf der Form zu setzen.



  • haste nen konkretes kurzes beispiel? versteh ich noch nicht richtig 😞

    gruß gerd



  • DBEdit->DataSource->DataSet->Edit();
    


  • alles klar, jedes habe ich verstanden, werde ich mal ausprobieren.

    ciao gerd


Anmelden zum Antworten