Entwickler-Ecke

Datenbanken - TDBEdit - Zugriffsverletzung


Josef-B - Mi 20.04.11 06:01
Titel: TDBEdit - Zugriffsverletzung
Hallo,

ich hab folgendes Problem:

Ich hab Tdbedit Felder an ein TIB-Dataset.

Das Dataset hat noch ein Detail-Dataset verknüpft.

Wenn ich ein Master-Feld im TDBEdit ändern möchte bekomme ich eine Zugriffsverletzung.
Was kann das sein?

Kann man anhand der Zahlen in der Fehlermeldung herausbekommen, was es genau für ein
Fehler ist?

Die Meldung lautet genau: Zugriffsverletzung bei Adresse 0082C228. Lesen von Adresse
000000D0


zuma - Mi 20.04.11 06:45

Ist das IBDataset bzw. das Masterfield auch erzeugt worden ?


Josef-B - Mi 20.04.11 06:52

also ich erzeuge es ja nicht zur Laufzeit.

Hab die entsprechenden Komponenten ja auf meinem Formular

Wie kann ich es feststellen?

Wenn ich auf das TDbEdit klicke wird das Event on Enter ausgelöst.
Sobald ich aber was eingebe in dem Feld kommt die Zugriffsverletzung.


zuma - Mi 20.04.11 07:01

Zeig mal etwas von deinem Code (wo der Fehler auftritt und ggf. was du zum erzeugen/Öffnen des Datasets gecodet hast)


jasocul - Mi 20.04.11 07:31

Das endet hier nur in einem Ratespiel.
Es gibt zu viele mögliche Gründe für so einen Fehler.

Hast du das denn schon mal mit dem Debugger geprüft, um die Fehlerstelle einzugrenzen?
Ich würde dabei bevorzugt erst mal die Stellen prüfen, wo sich Änderungen bei der Eingabe auswirken:


Josef-B - Mi 20.04.11 08:19

Hört sich jetzt völlig verrückt an, ich weiss:

Die Daten des Details werden in einem Devexpress QuantumGrid angezeigt.
Das Liegt auf einem Pagecontrol auf dem zweiten Tabsheet
Auf dem ersten Tabsheet die Master-Daten mit den DBedit Feldern.

Das komische ist, wenn ich jetzt das Grid mal rausnehme, aber die Dataset drin lasse,
also die Detail-Daten nicht angezeigt werden, dann kommt die Zugriffsverletzung nicht.
Und sie kommt auch nicht, wenn man einmal auf die zweite Seite des Pagecontrols geht und
dann zurück auf die erste.

Wieso kommt die Zugriffsverletzung denn bei den Master-Daten wenn das Grid die Detail-Daten
darstellt.

Bin da total verwirrt.

Irgendwie denke ich es hängt mit dem Grid zusammen.


jasocul - Mi 20.04.11 08:46

- Benutzt du vielleicht persistente Felder, die auch noch Einstellungen (Formatierung, etc.) haben?
- Aktivierst du die Details-Daten vielleicht erst, wenn du die Seite im PageControl wechselst?


Josef-B - Mi 20.04.11 09:18

Jasocul:

Ich denke ich habs: Dein Tip mit Key down wars :-)

Hatte die ganze Zeit auch bei den Datenbank-Kompos und so geschaut.

Er wollte auf das View im Grid zugreifen, das ging nicht.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TFAuftrag.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//Steuerung wenn erste Seite des Pagecontrols aktiv ist
if pagecontrol.ActivePage = tabsheetkopf then
  begin
  if (Key = VK_Return) then
    begin
    self.Perform(WM_Nextdlgctl, 00);
    end;
  end;

if pagecontrol.ActivePage = tabsheetpos then //<------ das war nicht drin
  begin
  //Steuerung für Weiterspringen im Mastergrid
  //letzte Spalte dann wenn erfasst wird, nächste Position anlegen
  if (ViewArt.Controller.FocusedColumn.IsLast = true) and  (is_erfassen = true) then
    begin
    dsp.append;
    end;
  end;
end;


zuma - Mi 20.04.11 09:30

user profile iconJosef-B hat folgendes geschrieben Zum zitierten Posting springen:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TFAuftrag.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ViewArt.Controller.FocusedColumn.IsLast = true) and  (is_erfassen = true) then
end;



Ne kleinigkeit am Rande:
Fällt dir auf, was du da machst ?
wenn man das mal auflöst, sieht deine If-Zeile so

Delphi-Quelltext
1:
if (True = True) and (True = True) then                    

oder z.b so

Delphi-Quelltext
1:
if (False = True) and (True = True) then                    

aus ...