Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Not in edit mode (https://www.delphipraxis.net/205173-not-edit-mode.html)

karolus 8. Aug 2020 17:23

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.

jobo 8. Aug 2020 17:40

AW: Not in edit mode
 
Das Locate hebt den Modus auf.
Erst navigieren, dann Editmode aktivieren. (Für einen Datensatz).

karolus 8. Aug 2020 17:53

AW: Not in edit mode
 
Danke für die schnelle Hilfe. Klappt wunderbar!

Grüße karolus

himitsu 8. Aug 2020 21:11

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
Delphi-Referenz durchsuchensLineBreak (#13#10 im Windows) oder maximal noch #10

karolus 9. Aug 2020 10:01

AW: Not in edit mode
 
Zitat:

Zitat von himitsu (Beitrag 1471401)
Und ich rate dazu ein paar Dinge zu ändern.

Die sinnlose Variable aus deinem Code zu entfernen.
> Form1

Wieso sinnlos? Und ggf wie mach ich das?
mfg

himitsu 9. Aug 2020 10:21

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.

TurboMagic 9. Aug 2020 10:23

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.

karolus 9. Aug 2020 10:52

AW: Not in edit mode
 
Zitat:

Zitat von himitsu (Beitrag 1471412)
OK, dann nennen wir es besser mal "grob fahrlässig", wenn dir dieses Bezeichnung besser gefällt......

Sorry, ich will dir nicht den Sonntag verderben, aber ich bin nur ein unbedarfter gelegenheits "Programmierer", weshalb ich etwas Probleme habe dir zu folgen.
Habe mal eben die Form1 rausgenommen, mit dem Erfolg, daß ich nun jede Menge 'Undeklarierte Bezeichner' habe.

Zitat:

Zitat von TurboMagic (Beitrag 1471413)
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.

Insofern schon 'wegwerf', weil ich mal eben vorhandene Daten in ein neues Feld einer weiteren Tabelle einfügen wollte. Normal nutze ich 'sprechende' Bezeichner.

mfg

blawen 9. Aug 2020 11:05

AW: Not in edit mode
 
Zitat:

Zitat von karolus (Beitrag 1471415)
Zitat:

Zitat von himitsu (Beitrag 1471412)
OK, dann nennen wir es besser mal "grob fahrlässig", wenn dir dieses Bezeichnung besser gefällt......

Sorry, ich will dir nicht den Sonntag verderben, aber ich bin nur ein unbedarfter gelegenheits "Programmierer", weshalb ich etwas Probleme habe dir zu folgen.
Habe mal eben die Form1 rausgenommen, mit dem Erfolg, daß ich nun jede Menge 'Undeklarierte Bezeichner' habe.

Den Punkt nach "Form1." auch?

karolus 9. Aug 2020 11:19

AW: Not in edit mode
 
Ja, den Punkt auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz