Fórum DELPHI FIREBIRD - Tratar de MSG de Exceção #367158
15/12/2008
0
Olá pessoal! Será que alguém poderia me ajudar nesse problema?
É o seguinte: na tabela USUARIOS o campo MATRICULA é ´chave primária´ e o campo USERNAME é ´Unique´, para que não haja possibilidade de inserir dois USERNAMES iguais.
Como nenhum dos campos pode ficar me branco, consegui fazer o tratamento para a mensagem de erro ´Field value required.´
[b:c4f7228ab6]AGORA O PROBLEMA:[/b:c4f7228ab6] Quando testo inserindo um USERNAME que já existe na tabela USUARIOS, o DELPHI exibe as mensagens ´violation of PRIMARY or UNIQUE KEY constraint ´UNQ1_USUARIOS´ on table ´USUARIOS´´. Clico RUN e aí vem ´Unable to find record. No key specified´ e eu não consigo tratá-las. Parece que o sistema não captura as mensagens.
Já pesquisei muito aqui tentei vários métodos mas nada funciona.
Para os campos em branco a mensagem vem normalmente, mas para a duplicidade de USERNAME o sistema passa direto e exibe a mensagem de ´Cadastro / Alteração efetuados com sucesso.´, apesar de - corretamente - não gravar no banco.
Seguem abaixo os códigos do formulário principal da aplicação e do formulário de cadastro de usuários.
Desde já agradeço a quem puder colaborar.
[b:c4f7228ab6]FORM PRINCIPAL:[/b:c4f7228ab6]
unit UnitPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, AppEvnts;
type
TFormPrincipal = class(TForm)
MenuPrincipal: TMainMenu;
MenuCadastro: TMenuItem;
MenuManutencao: TMenuItem;
MenuRelatorios: TMenuItem;
MenuAjuda: TMenuItem;
CadastroUsuarios: TMenuItem;
N1: TMenuItem;
CadastroClientes: TMenuItem;
CadastroFornecedores: TMenuItem;
CadastroPedidos: TMenuItem;
N2: TMenuItem;
CadastroPedidosDeClientes: TMenuItem;
CadastroPedidosAFornecedores: TMenuItem;
N3: TMenuItem;
CadastroFRMP: TMenuItem;
CadastroNotaFiscalEntrada: TMenuItem;
CadastroNotaFiscalEntradaDeFornecedores: TMenuItem;
CadastroNotaFiscalEntradaDaZERMATT: TMenuItem;
CadastroNotaFiscalSaida: TMenuItem;
AjudaTopicos: TMenuItem;
AjudaSobre: TMenuItem;
AlteraUSUARIOS: TMenuItem;
ExcluiUSUARIOS: TMenuItem;
N4: TMenuItem;
ApplicationEvents1: TApplicationEvents;
procedure AjudaSobreClick(Sender: TObject);
procedure CadastroUsuariosClick(Sender: TObject);
procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPrincipal: TFormPrincipal;
implementation
uses UnitSobre, UnitCadastroUsuarios, UnitDados;
{$R *.dfm}
procedure TFormPrincipal.AjudaSobreClick(Sender: TObject);
begin
FormSobre.ShowModal;
end;
procedure TFormPrincipal.CadastroUsuariosClick(Sender: TObject);
begin
CadastraUSUARIOS.ShowModal;
end;
procedure TFormPrincipal.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if Pos(UpperCase(´Field value required.´), UpperCase(e.Message)) <> 0 then
ShowMessage(´Os campos ´Nome´, ´Cargo´, ´Username´ e ´Senha´ devem ser preenchidos.´);
end;
end.
[b:c4f7228ab6]FORM CADASTRA USUARIOS[/b:c4f7228ab6]
unit UnitCadastroUsuarios;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBXpress, FMTBcd, StdCtrls, Mask, DBCtrls, DB, SqlExpr, ExtCtrls,
Buttons, jpeg, DBClient, Provider, AppEvnts;
type
TCadastraUSUARIOS = class(TForm)
DBEditMATRICULAUSUARIO: TDBEdit;
DBEditNOMEUSUARIO: TDBEdit;
DBEditUSENAMEUSUARIO: TDBEdit;
DBEditSENHAUSUARIO: TDBEdit;
DBComboBoxCargoUSUARIO: TDBComboBox;
EditPesquisaNomeUSUARIO: TEdit;
DBNavigatorUSUARIOS: TDBNavigator;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
BotaoOK: TButton;
GroupBox2: TGroupBox;
Label7: TLabel;
Image1: TImage;
BotaoFechar: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBEditMATRICULAUSUARIOKeyPress(Sender: TObject;
var Key: Char);
procedure DBEditNOMEUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBEditCARGOUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBEditUSENAMEUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBComboBoxCargoUSUARIOKeyPress(Sender: TObject;
var Key: Char);
procedure EditPesquisaNomeUSUARIOChange(Sender: TObject);
procedure BotaoOKClick(Sender: TObject);
procedure BotaoFecharClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
CadastraUSUARIOS: TCadastraUSUARIOS;
implementation
uses UnitDados;
{$R *.dfm}
procedure TCadastraUSUARIOS.FormShow(Sender: TObject);
begin
DBEditNOMEUSUARIO.SetFocus;
Dados.SimpleDatasetUSUARIOS.Open;
EditPesquisaNomeUSUARIO.Clear;
Dados.SimpleDatasetUSUARIOS.Append;
end;
procedure TCadastraUSUARIOS.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Dados.SimpleDatasetUSUARIOS.Delete;
end;
procedure TCadastraUSUARIOS.DBEditMATRICULAUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = #13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditNOMEUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditCARGOUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditUSENAMEUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBComboBoxCargoUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = #13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.EditPesquisaNomeUSUARIOChange(Sender: TObject);
begin
Dados.SimpleDataSetUSUARIOS.Locate(´NOMEFUNC´,VarArrayOf([EditPesquisaNomeUSUARIO.Text]),[loPartialKey,LocaseInsensitive]);
end;
procedure TCadastraUSUARIOS.BotaoOKClick(Sender: TObject);
begin
Dados.SimpleDatasetUSUARIOS.Post;
Dados.SimpleDatasetUSUARIOS.ApplyUpdates(0);
Dados.SimpleDatasetUSUARIOS.Append;
DBEditNOMEUSUARIO.SetFocus;
Showmessage(´ Cadastro / Alteração efetuados com sucesso! ´)
end;
procedure TCadastraUSUARIOS.BotaoFecharClick(Sender: TObject);
begin
CadastraUSUARIOS.Close;
end;
end.
É o seguinte: na tabela USUARIOS o campo MATRICULA é ´chave primária´ e o campo USERNAME é ´Unique´, para que não haja possibilidade de inserir dois USERNAMES iguais.
Como nenhum dos campos pode ficar me branco, consegui fazer o tratamento para a mensagem de erro ´Field value required.´
[b:c4f7228ab6]AGORA O PROBLEMA:[/b:c4f7228ab6] Quando testo inserindo um USERNAME que já existe na tabela USUARIOS, o DELPHI exibe as mensagens ´violation of PRIMARY or UNIQUE KEY constraint ´UNQ1_USUARIOS´ on table ´USUARIOS´´. Clico RUN e aí vem ´Unable to find record. No key specified´ e eu não consigo tratá-las. Parece que o sistema não captura as mensagens.
Já pesquisei muito aqui tentei vários métodos mas nada funciona.
Para os campos em branco a mensagem vem normalmente, mas para a duplicidade de USERNAME o sistema passa direto e exibe a mensagem de ´Cadastro / Alteração efetuados com sucesso.´, apesar de - corretamente - não gravar no banco.
Seguem abaixo os códigos do formulário principal da aplicação e do formulário de cadastro de usuários.
Desde já agradeço a quem puder colaborar.
[b:c4f7228ab6]FORM PRINCIPAL:[/b:c4f7228ab6]
unit UnitPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, AppEvnts;
type
TFormPrincipal = class(TForm)
MenuPrincipal: TMainMenu;
MenuCadastro: TMenuItem;
MenuManutencao: TMenuItem;
MenuRelatorios: TMenuItem;
MenuAjuda: TMenuItem;
CadastroUsuarios: TMenuItem;
N1: TMenuItem;
CadastroClientes: TMenuItem;
CadastroFornecedores: TMenuItem;
CadastroPedidos: TMenuItem;
N2: TMenuItem;
CadastroPedidosDeClientes: TMenuItem;
CadastroPedidosAFornecedores: TMenuItem;
N3: TMenuItem;
CadastroFRMP: TMenuItem;
CadastroNotaFiscalEntrada: TMenuItem;
CadastroNotaFiscalEntradaDeFornecedores: TMenuItem;
CadastroNotaFiscalEntradaDaZERMATT: TMenuItem;
CadastroNotaFiscalSaida: TMenuItem;
AjudaTopicos: TMenuItem;
AjudaSobre: TMenuItem;
AlteraUSUARIOS: TMenuItem;
ExcluiUSUARIOS: TMenuItem;
N4: TMenuItem;
ApplicationEvents1: TApplicationEvents;
procedure AjudaSobreClick(Sender: TObject);
procedure CadastroUsuariosClick(Sender: TObject);
procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPrincipal: TFormPrincipal;
implementation
uses UnitSobre, UnitCadastroUsuarios, UnitDados;
{$R *.dfm}
procedure TFormPrincipal.AjudaSobreClick(Sender: TObject);
begin
FormSobre.ShowModal;
end;
procedure TFormPrincipal.CadastroUsuariosClick(Sender: TObject);
begin
CadastraUSUARIOS.ShowModal;
end;
procedure TFormPrincipal.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if Pos(UpperCase(´Field value required.´), UpperCase(e.Message)) <> 0 then
ShowMessage(´Os campos ´Nome´, ´Cargo´, ´Username´ e ´Senha´ devem ser preenchidos.´);
end;
end.
[b:c4f7228ab6]FORM CADASTRA USUARIOS[/b:c4f7228ab6]
unit UnitCadastroUsuarios;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBXpress, FMTBcd, StdCtrls, Mask, DBCtrls, DB, SqlExpr, ExtCtrls,
Buttons, jpeg, DBClient, Provider, AppEvnts;
type
TCadastraUSUARIOS = class(TForm)
DBEditMATRICULAUSUARIO: TDBEdit;
DBEditNOMEUSUARIO: TDBEdit;
DBEditUSENAMEUSUARIO: TDBEdit;
DBEditSENHAUSUARIO: TDBEdit;
DBComboBoxCargoUSUARIO: TDBComboBox;
EditPesquisaNomeUSUARIO: TEdit;
DBNavigatorUSUARIOS: TDBNavigator;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
BotaoOK: TButton;
GroupBox2: TGroupBox;
Label7: TLabel;
Image1: TImage;
BotaoFechar: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBEditMATRICULAUSUARIOKeyPress(Sender: TObject;
var Key: Char);
procedure DBEditNOMEUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBEditCARGOUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBEditUSENAMEUSUARIOKeyPress(Sender: TObject; var Key: Char);
procedure DBComboBoxCargoUSUARIOKeyPress(Sender: TObject;
var Key: Char);
procedure EditPesquisaNomeUSUARIOChange(Sender: TObject);
procedure BotaoOKClick(Sender: TObject);
procedure BotaoFecharClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
CadastraUSUARIOS: TCadastraUSUARIOS;
implementation
uses UnitDados;
{$R *.dfm}
procedure TCadastraUSUARIOS.FormShow(Sender: TObject);
begin
DBEditNOMEUSUARIO.SetFocus;
Dados.SimpleDatasetUSUARIOS.Open;
EditPesquisaNomeUSUARIO.Clear;
Dados.SimpleDatasetUSUARIOS.Append;
end;
procedure TCadastraUSUARIOS.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Dados.SimpleDatasetUSUARIOS.Delete;
end;
procedure TCadastraUSUARIOS.DBEditMATRICULAUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = #13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditNOMEUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditCARGOUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBEditUSENAMEUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = 13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.DBComboBoxCargoUSUARIOKeyPress(Sender: TObject;
var Key: Char);
begin
if (key = #13) then
begin
key := 0;
SelectNext((sender as TWinControl),True,True);
end;
end;
procedure TCadastraUSUARIOS.EditPesquisaNomeUSUARIOChange(Sender: TObject);
begin
Dados.SimpleDataSetUSUARIOS.Locate(´NOMEFUNC´,VarArrayOf([EditPesquisaNomeUSUARIO.Text]),[loPartialKey,LocaseInsensitive]);
end;
procedure TCadastraUSUARIOS.BotaoOKClick(Sender: TObject);
begin
Dados.SimpleDatasetUSUARIOS.Post;
Dados.SimpleDatasetUSUARIOS.ApplyUpdates(0);
Dados.SimpleDatasetUSUARIOS.Append;
DBEditNOMEUSUARIO.SetFocus;
Showmessage(´ Cadastro / Alteração efetuados com sucesso! ´)
end;
procedure TCadastraUSUARIOS.BotaoFecharClick(Sender: TObject);
begin
CadastraUSUARIOS.Close;
end;
end.
Cleberlucio
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)