Witam,
mam następujący problem, korzystam z ZEOSów i chciałbym obsłużyć wyjątki, oto kod:
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, INIFiles, ComCtrls, Buttons;
type
TLogowanie_do_MySQL = class(TForm)
pass: TLabeledEdit;
login: TLabeledEdit;
Label1: TLabel;
okbutton: TBitBtn;
StatusBar1: TStatusBar;
procedure okbuttonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure MyAppException(Sender: TObject; E : Exception);
public
{ Public declarations }
baza:string;
end;
EZSQLException = class(Exception);
EERROR_ACCESS_DENIED=ezsqlexception;
EERROR_ACCESS_DENIED_FOR_USER=class(Exception);
ESQL_ERROR=class(Exception);
var
Logowanie_do_MySQL: TLogowanie_do_MySQL;
implementation
uses Unit1;
{$R *.dfm}
procedure TLogowanie_do_MySQL.MyAppException(Sender: TObject; E: Exception);
begin
{ wyświetlenie komunikatów wyjątków }
// Application.ShowException(E);
statusbar1.SimpleText:=E.Message;
if E is EERROR_ACCESS_DENIED then
begin
ShowMessage('zle dane do logowania');
end;
end;
procedure TLogowanie_do_MySQL.FormCreate(Sender: TObject);
begin
Application.OnException := MyAppException;
end;
procedure TLogowanie_do_MySQL.okbuttonClick(Sender: TObject);
var
zapytanie:String;
INI : TINIFile;
host, login, passwd:string;
logged:boolean;
x:Integer;
begin
logged:=true;
INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try
host := INI.ReadString('Baza', 'Host','');
baza := INI.ReadString('Baza', 'Baza','');
finally
INI.Free;
end;
if ((host='') or (baza='')) then showmessage('blad danych') else
with test.ZConnection1 do
begin
try
Connected:= False;
LoginPrompt := false;
HostName := host;
user:=Logowanie_do_MySQL.login.Text;
Password:=Logowanie_do_MySQL.pass.Text;
Connected:=true;
test.polaczony:=true;
except
on EERROR_ACCESS_DENIED do
begin
ShowMessage('zle dane do logowania');
test.polaczony:=false;
end;
end;
end;
begin
zapytanie:='';
zapytanie:='CREATE DATABASE ' +baza+';';
test.ZQuery3.SQL.Clear;
test.ZQuery3.SQL.Add(zapytanie);
test.ZQuery3.ExecSQL;
test.ZConnection1.Database:=baza;
ShowMessage('Utworzono baze danych');
Logowanie_do_MySQL.Visible:=false;
test.okbuttonClick(sender);
end;
end;
problem w tym że wyjątki nie są przechwytywane, albo ja nie umiem ich poprawnie przechwycić?
Chodzi o sytuację, gdy użykownik poda niepoprawne dane do logowania na serwer MySQL, co prawda program wyświetla (w moim przypadku na Statusbar) komunikat "Access denided"
ale nie wyświetla Message - "'zle dane do logowania".
Dlateog proszę was o pomoc. Może ktoś już się spotkał z po podobnym problemem?