Discussion:
Zugriffsverletzung in DBgrid bei Tastenkombination Strg-Pos1 - Strg-Ende
(zu alt für eine Antwort)
Perlsau
2011-05-05 03:27:10 UTC
Permalink
Moin allerseits,

seit einiger Zeit erhalte ich in einem meiner Projekte eine
Zugriffsverletzung, wenn ich in der Haupttabelle mit der
Tastenkombination Strg-Pos1 an den Anfang bzw. mit Strg-Ende an das Ende
der Tabelle springen will. Der Cursor springt, aber die
Zugriffsverletzung erscheint, sobald ich die Strg-Taste loslasse.

Ich such mich seit Stunden dumm und dämlich und kann den Auslöser nicht
finden ...

Arbeite mit RadStudio 2009 pro, Firebird 2.1, FibPlus, Jedi
Matthias Frey
2011-05-06 05:33:54 UTC
Permalink
Post by Perlsau
Moin allerseits,
Guten Morgen
Post by Perlsau
seit einiger Zeit erhalte ich in einem meiner Projekte eine
Zugriffsverletzung, wenn ich in der Haupttabelle mit der
Tastenkombination Strg-Pos1 an den Anfang bzw. mit Strg-Ende an das Ende
der Tabelle springen will. Der Cursor springt, aber die
Zugriffsverletzung erscheint, sobald ich die Strg-Taste loslasse.
Ich such mich seit Stunden dumm und dämlich und kann den Auslöser nicht
finden ...
Vielleicht suchst du falsch?
Wo bleibt der Debugger stehen? Bei welcher Quelltextzeile?
Call Stack?
Post by Perlsau
Arbeite mit RadStudio 2009 pro, Firebird 2.1, FibPlus, Jedi
Matthias
Perlsau
2011-05-06 06:00:39 UTC
Permalink
Post by Matthias Frey
Guten Morgen
Auch dir einen guten Morgen!
Post by Matthias Frey
Vielleicht suchst du falsch?
Damit liegst du vollkommen richtig.
Post by Matthias Frey
Wo bleibt der Debugger stehen? Bei welcher Quelltextzeile?
Call Stack?
Gar nicht. Es erscheint einfach nur die Fehlermeldung, das Programm wird
nicht unterbrochen.

Korrekterweise müßte ich aber schreiben "es schien", denn ich habe den
Fehler heute morgen gefunden – nachdem ich "richtig" gesucht habe.
(Morgenstund hat also doch Gold im Mund.)

Mir war nämlich zwischenzeitlich aufgefallen, daß die Fehlermeldung nur
bei ganz bestimmten Spalten erscheint. Das hat mich daran erinnert, daß
ich einige zig Code-Sessions zuvor eine einfache Suche via Tabelle
implementiert hatte und zu diesem Zweck DBgrid.OnKeyUp abfing. Und dort
wurden genau jene Spalten, in denen nicht gesucht werden soll/kann,
nicht korrekt von der Ereignisbehandlung ausgenommen. Nun sieht's so aus:

procedure TFormMain.DBGrid_TitelKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
VAR
Spalte : INTEGER;
begin
IF Shift <> [] THEN EXIT;

Spalte := DBGrid_Titel.SelectedIndex;
IF (Spalte < 1) OR (Spalte > 13) THEN EXIT;
{statt zuvor IF Spalte < 0, was ja grottenfalsch war,
es gibt keine Spalte kleiner Null}

TabellenEintragFinden(0, Spalte, Key);
end;

Alle Spalten zwischen 0 und 14 (von 1 bis 13) können durchsucht werden,
die anderen nicht. Die Methode TabellenEintragFinden stellt nämlich für
die ausgenommenen Spalten keine Algorithmen bereit, was dann zur
Fehlermeldung führte.

Ich glaubte anfangs, es handle sich vielleicht um ein bekanntes Problem
mit DBgrid. Wie allermeistens saß der Fehler aber wieder vor dem
Bildschirm ;-)

Ich danke dir dennoch herzlich für deine Antwort.

Perlsau

www.pcheil.de - www.delphiman.de - www.irwish.de

Lesen Sie weiter auf narkive:
Loading...