![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase
Not in edit mode
Hallo zusammen.
Ich steh grad auf dem Schlauch mit der Fehlermeldung, die kommt, unmittelbar nachdem ich das Dataset in den Edit-Mode gesetzt habe. Dataset.state ist dsEdit. Vielleicht seh den Wald vor lauter Bäumen nicht. Wär schön wenn einer von euch die passende Axt auspacken könnte. Danke im voraus.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var Tnr, Inr, Gnr : Integer; begin if not Form1.tabuecher.InTransaction then Form1.tabuecher.StartTransaction; Form1.dsTitel.Close; Form1.dsTitel.SelectSQL.Text := 'select TitelNr, Genre from Titel where Sammelband = ' +QuotedStr('J'); Form1.dsTitel.Open; Tnr := Form1.dsTitel.FieldByName('TitelNr').Value; Gnr := Form1.dsTitel.FieldByName('Genre').Value; Form1.dsInhalt.Close; Form1.dsInhalt.SelectSQL.Text := 'select InhaltNr, Genre from Inhalt order by InhaltNr'; Form1.dsInhalt.Open; repeat Form1.qyRTitelInhalt.Close; Form1.qyRTitelInhalt.SQL.Text := 'select TitelNr, InhaltNr from RTitelInhalt where TitelNr = :nr'; Form1.qyRTitelInhalt.ParamByName('nr').Value := Tnr; Form1.qyRTitelInhalt.Open; repeat Inr := Form1.qyRTitelInhalt.FieldByName('InhaltNr').Value; Form1.dsInhalt.Edit; >>>hier kommt der Fehler>>> if Form1.dsInhalt.Locate('InhaltNr', Inr, []) then Form1.dsInhalt.FieldByName('Genre').Value := Gnr else Begin ShowMessage('In die Tabelle Inhalt konnte in den Datensatz mit der Nummer ' + IntToStr(Inr) + 'kein Wert für Genre eingetragen werden' +#13+ 'Programm wird abgebrochen.'); Form1.tabuecher.Rollback; Break; End; Form1.qyRTitelInhalt.Next; until Form1.qyRTitelInhalt.Eof; Form1.dsTitel.Next; until Form1.dsTitel.Eof; Form1.tabuecher.Commit; Form1.Close; end; end. |
AW: Not in edit mode
Das Locate hebt den Modus auf.
Erst navigieren, dann Editmode aktivieren. (Für einen Datensatz). |
AW: Not in edit mode
Danke für die schnelle Hilfe. Klappt wunderbar!
Grüße karolus |
AW: Not in edit mode
Und ich rate dazu ein paar Dinge zu ändern.
QuotedStr ist keine Funktion, um einen SQL-String zu maskieren, denn das ist ausschließlich für Pascal-Strings und kennt z.B. keinen
Delphi-Quellcode:
.
\
Am Besten wird mit Parametern in der SQL-Komponente gearbeitet, oder man sucht in den Units dieser Komponente nach der "richtigen" Escape-Funktion. > Repeat-Until Warum kein While-Do? Kannst du sicherstellen, dass immer mindestens ein Datensatz überall drin ist, weil du nicht zu Beginn prüfst? Die sinnlose Variable aus deinem Code zu entfernen. > Form1 Sowie den falschen ungünstigen Zeilenumbruch loszuwerden. > #13 ![]() |
AW: Not in edit mode
Zitat:
mfg |
AW: Not in edit mode
OK, dann nennen wir es besser mal "grob fahrlässig", wenn dir dieses Bezeichnung besser gefällt.
Innerhalb eines Objektes/Klasse greift man niemals über externe blöse globale Variablen auf sich selbst zu. Einfach das "Form1" weglassen und sollte man doch mal einen Zeiger benötigen, dann verwendet man den impliziten/unsichtbaren Parameter "Self", welchen jede Methode einer Klasse als Ersten besitzt. (abgesehn von Static-Class-Methoden) Grund: Erstell mal deine Form das Objekt doppelt, dann greift die eine Instanz nicht auf sich zu, sondern auf die Andere. Es gab schon welche die im so leere Edits ausgelesen hatten, obwohl sie in der Form etwas eingaben. FormCreate war ausversehn on der DPR doppelt drin. Die erste Instanz war die, welche angezeigt wurde, aber die Zweite stand in der Variable, weil sie sich zuletzt dort rein schrieb. |
AW: Not in edit mode
Wenn das nicht ein einfahces "wegwerf" Testprogramm ist, wonach es jetzt nicht aussieht, sollte
eine Form-Variable eher nicht Form1 sondern irgendwie sinnvoller heißen. |
AW: Not in edit mode
Zitat:
Habe mal eben die Form1 rausgenommen, mit dem Erfolg, daß ich nun jede Menge 'Undeklarierte Bezeichner' habe. Zitat:
mfg |
AW: Not in edit mode
Zitat:
|
AW: Not in edit mode
Ja, den Punkt auch.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz