![]() |
try?
Hallo,
ich nutze folgenden Code im onClick eines DBNavigator:
Delphi-Quellcode:
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...
bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount);
Gruß, Andreas |
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.
|
Re: try?
Zitat:
Wird diese Exception NUR vom Debugger angezeigt, oder wird sie wirklich im Programm ausgelöst/ausgegeben? |
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:
Aber das fängt die AccessViolation leider nicht ab.
try
bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount); except showmessage('test'); end; Gruß, Andreas |
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?
|
Re: try?
Ja, leider... Ich bekomme sie einfach nicht abgefangen.
|
Re: try?
Dann zeig uns doch einmal die komplette OnClick-Methode.
|
Re: try?
Hab ich schon. Aber hier nochmal die komplette Procedure:
Delphi-Quellcode:
Eigentlich nix großes... ich kapier das nicht...
procedure TForm1.bsSkinDBNavigator1Click(Sender: TObject;
Button: TbsNavigateBtn); begin try bsSkinLabel1.Caption := IntToStr(form1.ASQLite3Table1.RecNo) + ' / ' + IntToStr(form1.ASQLite3Table1.RecordCount); except showmessage('test'); end; |
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; |
Re: try?
Danke. Ja, die Table hat ein Active Attribut.
Aber auch so wird leider die AccessViolation ausgelöst. Mit und ohne IDE... |
Re: try?
Dann hilft nur: Breakpoint setzen, Durchsteppen, fehlerauslösende Zeile ermitteln und nachsehen, woran es liegen könnte.
|
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.
|
Re: try?
Zitat:
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. |
Re: try?
Die AV wird ausgelöst, weil ich meinen Quelltext im onClich des DBNavigator habe.
|
Re: try?
Zitat:
Bei einem Klick auf einen inaktiven Button im DBNavigator wird keine Aktion ausgelöst. |
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