AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Not in edit mode

Ein Thema von karolus · begonnen am 8. Aug 2020 · letzter Beitrag vom 9. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2   
karolus

Registriert seit: 4. Sep 2007
Ort: Tostedt
34 Beiträge
 
Delphi 2007 Professional
 
#1

Not in edit mode

  Alt 8. Aug 2020, 18:23
Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.974 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Not in edit mode

  Alt 8. Aug 2020, 18:40
Das Locate hebt den Modus auf.
Erst navigieren, dann Editmode aktivieren. (Für einen Datensatz).
Gruß, Jo
  Mit Zitat antworten Zitat
karolus

Registriert seit: 4. Sep 2007
Ort: Tostedt
34 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Not in edit mode

  Alt 8. Aug 2020, 18:53
Danke für die schnelle Hilfe. Klappt wunderbar!

Grüße karolus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.932 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Not in edit mode

  Alt 8. Aug 2020, 22:11
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 \ .
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 8. Aug 2020 um 22:25 Uhr)
  Mit Zitat antworten Zitat
karolus

Registriert seit: 4. Sep 2007
Ort: Tostedt
34 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Not in edit mode

  Alt 9. Aug 2020, 11:01
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.932 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Not in edit mode

  Alt 9. Aug 2020, 11:21
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.780 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Not in edit mode

  Alt 9. Aug 2020, 11:23
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.
  Mit Zitat antworten Zitat
karolus

Registriert seit: 4. Sep 2007
Ort: Tostedt
34 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Not in edit mode

  Alt 9. Aug 2020, 11:52
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen
Online

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
521 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Not in edit mode

  Alt 9. Aug 2020, 12:05
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?
Roland
  Mit Zitat antworten Zitat
karolus

Registriert seit: 4. Sep 2007
Ort: Tostedt
34 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Not in edit mode

  Alt 9. Aug 2020, 12:19
Ja, den Punkt auch.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf