Editfeld geändert?
-
Hiho,
Ich hab einen Dialog mit 70 Editfeldern. Beim Aufruf des Dialogs werden die mit Werten (double) aus einer Access97-Datenbank gefüllt.
Zum Füllen werden SQL-Statements ausgeführt und die entsprechenden Werte (zb. 1.5) werden angezeigt. Liefert das SQL-Statement kein Ergebnis, weil kein entsprechender Datensatz in der Datenbank gefunden wurde, schreibt er ne 0 in das Editfeld.
So weit, so gut. Läuft alles.Jetzt will ich aber überprüfen, ob ein Wert geändert wurde. Wurde jetzt z.b der Wert 1.5, der aus der DB ausgelesen wurde, in 2.5 geändert, soll er den überschreiben. Und wenn ein bisher mit 0 belegtes Feld geändert wurde, soll er den neuen Datensatz in die Datenbank einfügen.
Ich weiss jetzt nicht weiter, wie ich überprüfen, ob ein Feld geändert wurde (EN_CHANGE?) und wie ich dann den Datensatz in der DB aktualisiere oder einen neuen hinzufüge.
Ich nutze DAO unter VC++ 6.0.Ich hab leider nur wenig Zeit dafür und darf daher nicht viel Zeit mit rumprobieren verlieren...

Ich bin dankbar für jede Hilfe!

-
EN_CHANGE ist schon ein guter Ansatz - oder halt bei ON_OK alles vergleichen.
Zum Datenbankkram: Mir hat das das Visual C++ in 21 Tagen geholfen (wider Erwarten). Kapitel 15 glaube ich. Geh mal auf www.mut.de in die Leseecke. (Ich brauchte aber ODBC, DAO ist das nächste Kapitel glaube ich.)
-
Hi,
Hab das jetzt mit EN_CHANGE probiert. Funktioniert eigentlich auch.
Allerdings gibt es ein Problem, wenn ich einen Komma-Wert eingeben möchte. Hier erstmal der bisherige Code (vereinfacht):if(m_Pro1Mo == 0) { CDaoDatabase db; db.Open("Database.mdb"); CTabelleMain rs(&db); rs.Open(); UpdateData(TRUE); rs.AddNew(); rs.m_Dauer = m_Pro1Mo; rs.Update(); rs.Close(); db.Close(); } else { MessageBox("Fehler!"); }In diesem Fall überprüfe ich, ob das Feld vorher mit 0 belegt war, also ein neuer Datensatz eingefügt werden soll. Wenn ich jetzt z.b. "1.3" eingeben möchte für die Dauer (double), dann wird die Überprüfung jeweils für die "1", den "." und die "3" durchgeführt. Dann geht der nach der "1" ins else, weil im das if nicht mehr stimmt.
Wie kann ich das ändern, damit ich auch 1.3 eingeben kann?

-
Du könntest das ja auch machen, wenn man mit der Eingabe fertig ist, also bei Kill_focus. Wie wäre das? En_Change kommt bei jedem Tastendruck in dem Feld.
-
Wenn ich killfocus benutze, passiert gar nix... Es wird weder etwas in die DB geschrieben, noch das else wird ausgeführt.
Was wird bei Kill Focus genau gemacht? Nach meinem Code (siehe oben) prüfe ich ja erst, ob in dem Editfeld eine 0 drin steht oder nicht. Und wenn ich mich jetzt nicht irre, würde bei Kill Focus diese Überprüfung erst durchgeführt werden, wenn der neue Wert schon drin ist.
Diese Überprüfung ist wichtig, weil bei einer 0 ein neuer Datensatz in die Datenbank eingefügt werden muss und wenn etwas anderes als 0 drin steht, dann muss ein vorhandener Datensatz aktualisiert werden.
Hm, war das jetzt verständlich? Hab irgendwie Probleme mit der deutschen Sprache heute...

Trotzdem danke erstmal!

-
Ich hab jetzt mal ein paar MessageBoxen eingebaut und rumgetestet. Dabei fiel mir auf, dass das Killfocus erst ausgeführt wird, wenn ich ein paar Mal wild durch die Gegend geklickt hab.
Warum?

-
Kill_Focus bedeutet, dass du das Editfeld verlassen hast. Also im Prinzip, wenn du die Eingabe beendest.
Was vorher drin stand solltest du dir natürlich vorher merken...
-
Das hab ich inzwischen gemacht. Ich speicher das was vorher in der Variable steht mit dem was drin steht, wenn Kill_Focus ausgeführt wird.
Das Problem ist jetzt, dass er das nicht sofot ausführt, sondern erst, wenn ich ein paar Mal in andere Edit-Felder geklickt hab...
-
LeByDo schrieb:
Das Problem ist jetzt, dass er das nicht sofot ausführt, sondern erst, wenn ich ein paar Mal in andere Edit-Felder geklickt hab...
Dann hast du deinen Code entweder in das falsche OnKillFocus geschrieben (von einem anderen Editfeld) oder du hast einen Copy-and-Past-Fehler von einem anderen OnKillFocus drin.
-
Oh Shit...

Ich glaub ich pack meine Koffer und fahr erstmal ein halbes Jahr in Urlaub! Ich hab das falsche Edit benutzt... Peinlich!
Naja, danke für den Hinweis!
