Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   try? (https://www.delphipraxis.net/149070-try.html)

Sanguis 13. Mär 2010 15:00


try?
 
Hallo,

ich nutze folgenden Code im onClick eines DBNavigator:

Delphi-Quellcode:
bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount);
Jetzt gibt es Situationen, wo ein Button des DBNavigator nicht enabled ist. Geklickt werden, kann darauf aber trotzdem. Dann gibts eine AccessViolation... ich wollte es mit einem try Block abfangen, der wird aber leider ignoriert. Es kommt trotzdem die AccessViolation...

Gruß,
Andreas

DeddyH 13. Mär 2010 15:02

Re: try?
 
Ich kann im Moment nicht erkennen, was der Code mit einem DBNavigator zu tun hat. Und es wäre vielleicht ganz interessant, Deinen "try-Block" einmal zu sehen.

himitsu 13. Mär 2010 15:07

Re: try?
 
Zitat:

ich wollte es mit einem try Block abfangen, der wird aber leider ignoriert. Es kommt trotzdem die AccessViolation...
Wie immer die beliebte und wichtige Frage:
Wird diese Exception NUR vom Debugger angezeigt, oder wird sie wirklich im Programm ausgelöst/ausgegeben?

Sanguis 13. Mär 2010 16:42

Re: try?
 
Hallo,

ich will in einem SkinLabel darstellen welcher Datensatz von wievielen der DBNavigator grad anzeigt. Um dies aktuell zu halten, hab ich es im DBNavigator onClick eingetragen.
Mein Code mit try ist folgender:

Delphi-Quellcode:
try
 bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount);
except
 showmessage('test');
end;
Aber das fängt die AccessViolation leider nicht ab.

Gruß,
Andreas

DeddyH 13. Mär 2010 16:48

Re: try?
 
Dann formuliere ich himitsus Frage mal anders: wird auch dann eine Exception ausgelöst, wenn Du das Programm außerhalb der IDE startest?

Sanguis 13. Mär 2010 16:59

Re: try?
 
Ja, leider... Ich bekomme sie einfach nicht abgefangen.

DeddyH 13. Mär 2010 17:00

Re: try?
 
Dann zeig uns doch einmal die komplette OnClick-Methode.

Sanguis 13. Mär 2010 17:39

Re: try?
 
Hab ich schon. Aber hier nochmal die komplette Procedure:

Delphi-Quellcode:
procedure TForm1.bsSkinDBNavigator1Click(Sender: TObject;
  Button: TbsNavigateBtn);
begin
try
 bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount);
except
 showmessage('test');
end;
Eigentlich nix großes... ich kapier das nicht...

DeddyH 13. Mär 2010 17:46

Re: try?
 
Ich kenne jetzt die SQLite-Komponenten nicht, aber besitzt die Table eine Eigenschaft Active oder so ähnlich? Dann würde ich das einmal so versuchen:
Delphi-Quellcode:
procedure TForm1.bsSkinDBNavigator1Click(Sender: TObject;
  Button: TbsNavigateBtn);
begin
  if ASQLite3Table1.Active then
    if ASQLite3Table1.RecordCount > 0 then
      try
        bsSkinLabel1.Caption := IntToStr({form1.}ASQLite3Table1.RecNo) + ' / ' + IntToStr({form1.}ASQLite3Table1.RecordCount);
      except
        on E: Exception do
          MessageBox(0,PChar('Es ist ein Fehler aufgetreten:' + sLineBreak + E.Message), 'Oops',MB_OK or MB_ICONERROR);
      end;
end;

Sanguis 13. Mär 2010 18:09

Re: try?
 
Danke. Ja, die Table hat ein Active Attribut.
Aber auch so wird leider die AccessViolation ausgelöst. Mit und ohne IDE...

DeddyH 13. Mär 2010 18:14

Re: try?
 
Dann hilft nur: Breakpoint setzen, Durchsteppen, fehlerauslösende Zeile ermitteln und nachsehen, woran es liegen könnte.

Sanguis 13. Mär 2010 18:40

Re: try?
 
Ich weiß woran es liegt, das die AcessViolation auftritt. Eben daran das ich auf inaktive Buttons des DBNavigator klicke. Die Frage ist nicht, wie ich das Auslösen der AV verhindere sondern wie ich es abfange.

fatalerror 13. Mär 2010 19:08

Re: try?
 
Zitat:

Zitat von Sanguis
Ich weiß woran es liegt, das die AcessViolation auftritt. Eben daran das ich auf inaktive Buttons des DBNavigator klicke. Die Frage ist nicht, wie ich das Auslösen der AV verhindere sondern wie ich es abfange.

Sorry, aber deine Erklärung für die AV ist nicht einleuchtend.
Ein Klick auf einen inaktiven Button löst keine Aktion bzw keinen Event aus.
Oder verwendest du nicht den mit Delphi ausgelieferten DBNavigator? Dann würde der Fehler allenfalls in dieser Komponente liegen, was ich mir aber nicht richtig vorstellen kann.

Sanguis 13. Mär 2010 19:31

Re: try?
 
Die AV wird ausgelöst, weil ich meinen Quelltext im onClich des DBNavigator habe.

fatalerror 13. Mär 2010 19:40

Re: try?
 
Zitat:

Die AV wird ausgelöst, weil ich meinen Quelltext im onClich des DBNavigator habe.
Genau das stimmt nicht bei einem Standard DBNavigator.
Bei einem Klick auf einen inaktiven Button im DBNavigator wird keine Aktion ausgelöst.

Sanguis 13. Mär 2010 19:47

Re: try?
 
So, hab es gelöst. Ich hab meinen Code in die onDataChange Routine des DataSource gepackt. Im onClick steht jetzt nichts mehr, es wird auch keine AV ausgelöst.

Gruß,
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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