Controle de Locadora
Boa Noite!!!
Gostaria de saber se alguém ja acompanhou as video aulas do luciano Pimenta:
Delphi 7 - Sistema completo de Locadora com Delphi, dbExpress e Firebird 2.0
Estou na aula 11 e aparece um erro no programa quando vou fazer um novo registro (botão novo) tanto na tela de cadastro de fitas quanto de clientes , o erro é o seguinte: "Project Locadora.exe raised exception class EDataBaseErro with message ''''cdsClientes: Dataset not in edit or insert mode''''. Process stopped. Use Step or Run to continue. Como resolvo?
Obrigado
Gostaria de saber se alguém ja acompanhou as video aulas do luciano Pimenta:
Delphi 7 - Sistema completo de Locadora com Delphi, dbExpress e Firebird 2.0
Estou na aula 11 e aparece um erro no programa quando vou fazer um novo registro (botão novo) tanto na tela de cadastro de fitas quanto de clientes , o erro é o seguinte: "Project Locadora.exe raised exception class EDataBaseErro with message ''''cdsClientes: Dataset not in edit or insert mode''''. Process stopped. Use Step or Run to continue. Como resolvo?
Obrigado
Wagner
Curtidas 0
Respostas
Junior Miranda
02/12/2010
Boa noite!
A mensagem indica que o seu clientDataset não se encontra em modo de inserção! Não sendo possível fazer uma atribuição. Verifique se antes do Insert/Append, você não está tentando atribuir um valor.
[]'s
A mensagem indica que o seu clientDataset não se encontra em modo de inserção! Não sendo possível fazer uma atribuição. Verifique se antes do Insert/Append, você não está tentando atribuir um valor.
[]'s
GOSTEI 0
Wagner
02/12/2010
Pode me ajudar como fazer pois estou começando agora, Como faço isso?
Obrigado.
Obrigado.
GOSTEI 0
Junior Miranda
02/12/2010
Boa tarde!
Claro! Posta aqui, todo o código do seu botão novo.
[]'s
Claro! Posta aqui, todo o código do seu botão novo.
[]'s
GOSTEI 0
Wagner
02/12/2010
Segue.
unit uCadastroEx;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons, AppEvnts, uLocalizarEx, ImgList,
DB, DBActns, ActnList, Menus, ufraImage, uDBDateTimePicker,
SqlExpr, DBCtrls, FMTBcd;
type
TfrmCadastroEx = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Relatrio1: TMenuItem;
N1: TMenuItem;
Sair1: TMenuItem;
ActionList1: TActionList;
Excluir: TAction;
Localizar: TAction;
DataSource1: TDataSource;
LocalizarEx: TLocalizarEx;
ApplicationEvents1: TApplicationEvents;
btnLocalizar: TBitBtn;
btnCancelar: TBitBtn;
btnSalvar: TBitBtn;
btnExcluir: TBitBtn;
btnNovo: TBitBtn;
StatusBar1: TStatusBar;
Relatorio: TAction;
Novo: TAction;
Salvar: TAction;
Cancelar: TAction;
Alterar: TAction;
btnAlterar: TBitBtn;
ImageList1: TImageList;
procedure TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure btnNovoEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SalvarExecute(Sender: TObject);
procedure LocalizarExecute(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Sair1Click(Sender: TObject);
procedure LocalizarExAfterSearch(Sender: TObject;
AModalResult: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure NovoExecute(Sender: TObject);
procedure ExcluirExecute(Sender: TObject);
procedure CancelarExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure AlterarExecute(Sender: TObject);
procedure RelatorioExecute(Sender: TObject);
private
{ Private declarations }
public
FFile: string;
FPagina: string;
function VerificaCampo: Boolean;
procedure EnterEx (Sender: TObject);
procedure ExitEx (Sender: TObject);
procedure EnableDisableControls (Value: Boolean);
procedure EnableDisableButtons (Value: Boolean);
function FieldsWrithe (DtSrc: TDataSource): Boolean;
procedure MudaFoco;
procedure PermissoesForm; virtual;
procedure Restricoes ;virtual;
procedure GetDataSources; virtual;
end;
var
frmCadastroEx: TfrmCadastroEx;
implementation
uses uLibrary, ufrmCadClientes;
{$R *.dfm}
{ TForm1 }
procedure TfrmCadastroEx.EnableDisableButtons(Value: Boolean);
begin
{ Habilita/desabilita os botões }
Novo.Enabled := Value;
Excluir.Enabled := Value;
Salvar.Enabled := Value;
Localizar.Enabled := Value;
Cancelar.Enabled := Value;
end;
procedure TfrmCadastroEx.EnableDisableControls(Value: Boolean);
var
i : integer;
begin
inherited;
{: faz um laço em todos os componentes}
for i := 0 to ComponentCount -1 do
begin
if (Components[i] is TCustomEdit) then
(Components[i] as TCustomEdit).Enabled := Value;
if (Components[i] is TBitBtn) then
(Components[i] as TBitBtn).Enabled := Value;
if (Components[i] is TfraImage) then
begin
(Components[i] as TfraImage).ButtonInsertEnabled :=Value;
(Components[i] as TfraImage).ButtonDeleteEnabled :=Value;
end;
if (Components[i] is TDBDateTimePicker) then
(Components[i] as TDBDateTimePicker).Enabled := Value;
if (Components[i] is TDBRadioGroup) then
(Components[i] as TDBRadioGroup).Enabled := Value;
if (Components[i] is TDBLookupComboBox) then
(Components[i] as TDBLookupComboBox).Enabled := Value;
end;
btnNovo.Enabled := True;
btnLocalizar.Enabled := True;
btnAlterar.Enabled := True;
end;
function TfrmCadastroEx.FieldsWrithe(DtSrc: TDataSource): Boolean;
var
i : integer;
{: verifica quais os campos que estão em branco no cadastro}
begin
inherited;
Result := True; {: assume que estão todos preenchidos}
for i := 0 to DtSrc.DataSet.FieldCount - 1 do
if DtSrc.DataSet.Fields[i].Required then
if (DtSrc.DataSet.Fields[i].IsNull) Or (DtSrc.DataSet.Fields[i].AsString = '') then
begin
MessageDlg('Preencha o campo " '+ DtSrc.DataSet.Fields[i].DisplayLabel + '"', mtWarning,[mbOk], 0);
Result := False;
DtSrc.DataSet.Fields[i].FocusControl; {: coloca o foco no controle}
Break;
end;
end;
procedure TfrmCadastroEx.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
{: limpa a StatusBar}
StatusBar1.Panels[0].Text := '';
end;
procedure TfrmCadastroEx.btnNovoEnter(Sender: TObject);
begin
StatusBar1.Panels[0].Text := (Sender as TControl).Hint;
end;
procedure TfrmCadastroEx.FormCreate(Sender: TObject);
begin
MudaFoco;
end;
procedure TfrmCadastroEx.SalvarExecute(Sender: TObject);
begin
{: salvo as dados se os campos estiverem preenchidos}
if FieldsWrithe(DataSource1) and (DataSource1.State in [dsEdit, dsInsert]) then
begin
DataSource1.DataSet.Post;
MessageDlg(MSG_OK, mtInformation, [mbOK], 0);
end;
end;
procedure TfrmCadastroEx.LocalizarExecute(Sender: TObject);
begin
{: verifica se esta em modo de edição ou inserção}
if DataSource1.State in [dsEdit, dsInsert] then
case MessageDlg('Deseja salvar as alterações realizados no Cadastro?', mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
mrYes: btnSalvar.Click;
mrNo: DataSource1.DataSet.Cancel;
end
else
LocalizarEx.Execute;
end;
procedure TfrmCadastroEx.EnterEx(Sender: TObject);
begin
{: altera a cor do componente quando receber o foco }
if (Sender is TEdit) then
(Sender as TEdit).Color := clInfoBk;
if (Sender is TMemo) then
(Sender as TMemo).Color := clInfoBk;
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := clInfoBk;
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := clInfoBk;
StatusBar1.Panels[0].Text := (Sender as TControl).Hint;
end;
procedure TfrmCadastroEx.ExitEx(Sender: TObject);
begin
{: altera a cor do componente quando sair o foco }
if (Sender is TEdit) then
(Sender as TEdit).Color := clWindow;
if (Sender is TMemo) then
(Sender as TMemo).Color := clWindow;
{: altera a cor do componente quando sair o foco }
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := clWindow;
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := clWindow;
end;
function TfrmCadastroEx.VerificaCampo: Boolean;
var
i: integer;
{: função para verificar os Edits obrigatórios}
begin
Result := False;
for i := 0 to componentCount -1 do
if Components[i] is TEdit then
{: se o componente for um Edit e estiver em branco}
if (TEdit(Components[i]).AutoSize) And
(TEdit(Components[i]).Text = '') then
begin
{: coloca o foco no Edit e mostra uma msg}
Result := True;
TEdit(Components[i]).SetFocus;
MessageDlg(MSG_CAMPO_OBR, mtWarning, [mbOk], 0);
Break;
end;
end;
procedure TfrmCadastroEx.FormKeyPress(Sender: TObject; var Key: Char);
begin
{: troca ENTER por TAB}
if key = #13 then
begin
Perform (CM_DialogKey, VK_TAB, 0);
key:=#0;
end
end;
procedure TfrmCadastroEx.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_Escape then
Close;
end;
procedure TfrmCadastroEx.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
{: limpa a StatusBar}
StatusBar1.Panels[0].Text := '';
end;
procedure TfrmCadastroEx.MudaFoco;
var
i: integer;
begin
{: muda o foco dos componentes do formulário }
for i := 0 to ComponentCount -1 do
begin
{: se for um Edit }
if (Components[i] is TEdit) then
begin
(Components[i] as TEdit).OnExit := ExitEx;
(Components[i] as TEdit).OnEnter := EnterEx;
end;
{: se for um Memo }
if (Components[i] is TMemo) then
begin
(Components[i] as TMemo).OnExit := ExitEx;
(Components[i] as TMemo).OnEnter := EnterEx;
end;
{: se for um DBEdit }
if (Components[i] is TDBEdit) then
begin
(Components[i] as TDBEdit).OnExit := ExitEx;
(Components[i] as TDBEdit).OnEnter := EnterEx;
end;
{: se for um DBMemo }
if (Components[i] is TDBMemo) then
begin
(Components[i] as TDBMemo).OnExit := ExitEx;
(Components[i] as TDBMemo).OnEnter := EnterEx;
end;
end;
end;
procedure TfrmCadastroEx.Sair1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmCadastroEx.LocalizarExAfterSearch(Sender: TObject;
AModalResult: Integer);
begin
if AModalResult = mrOK then
begin
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
end;
procedure TfrmCadastroEx.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
{: verifica se esta em modo de edição ou inserção}
if DataSource1.State in [dsEdit,dsInsert] then
case MessageDlg('Deseja salvar as alterações realizados no Cadastro ?', mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
mrYes: begin
{: verifica se tem permissão para salvar}
if not btnSalvar.Enabled then
begin
MessageDlg(MSG_PERMISOES, mtWarning, [mbOk], 0);
CanClose := False;
end
else
begin
btnSalvar.Click;
CanClose := True;
end;
end;
mrNo: begin
DataSource1.DataSet.Cancel;
CanClose := True;
end;
mrCancel: CanClose := False;
end;
end;
procedure TfrmCadastroEx.PermissoesForm;
begin
{: implementado nos forms descendentes }
end;
procedure TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
procedure TfrmCadastroEx.ExcluirExecute(Sender: TObject);
begin
{: deleta se houver dados no DataSet }
if (DataSource1.DataSet.Active) and (DataSource1.DataSet.RecordCount > 0) then
begin
if MessageDlg('Tem certeza que deseja excluir o registro ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
DataSource1.DataSet.Delete;
end;
EnableDisableControls(False);
end;
procedure TfrmCadastroEx.CancelarExecute(Sender: TObject);
begin
{: cancela e desabilita os componentes }
DataSource1.DataSet.Cancel;
EnableDisableControls(False);
end;
procedure TfrmCadastroEx.FormShow(Sender: TObject);
begin
{: habilita/desabilita os componentes e verifica permissões/restrições }
GetDataSources;
EnableDisableControls(False);
btnAlterar.Enabled := True;
PermissoesForm;
Restricoes;
end;
{Excluir.Enabled := (not DataSource1.DataSet.IsEmpty) Or
(DataSource1.DataSet.RecordCount <=0);}
procedure TfrmCadastroEx.AlterarExecute(Sender: TObject);
begin
{: habilita/desabilita os componentes e verifica permissões/restrições }
if not DataSource1.DataSet.IsEmpty then
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
procedure TfrmCadastroEx.RelatorioExecute(Sender: TObject);
begin
{: implementado em cada form, descendente }
end;
procedure TfrmCadastroEx.Restricoes;
begin
{: implementado nos forms descendentes }
end;
procedure TfrmCadastroEx.GetDataSources;
begin
{: para preencher o DataSet dos DataSources e componentes Localiza }
end;
end.
unit uCadastroEx;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons, AppEvnts, uLocalizarEx, ImgList,
DB, DBActns, ActnList, Menus, ufraImage, uDBDateTimePicker,
SqlExpr, DBCtrls, FMTBcd;
type
TfrmCadastroEx = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Relatrio1: TMenuItem;
N1: TMenuItem;
Sair1: TMenuItem;
ActionList1: TActionList;
Excluir: TAction;
Localizar: TAction;
DataSource1: TDataSource;
LocalizarEx: TLocalizarEx;
ApplicationEvents1: TApplicationEvents;
btnLocalizar: TBitBtn;
btnCancelar: TBitBtn;
btnSalvar: TBitBtn;
btnExcluir: TBitBtn;
btnNovo: TBitBtn;
StatusBar1: TStatusBar;
Relatorio: TAction;
Novo: TAction;
Salvar: TAction;
Cancelar: TAction;
Alterar: TAction;
btnAlterar: TBitBtn;
ImageList1: TImageList;
procedure TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure btnNovoEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SalvarExecute(Sender: TObject);
procedure LocalizarExecute(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Sair1Click(Sender: TObject);
procedure LocalizarExAfterSearch(Sender: TObject;
AModalResult: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure NovoExecute(Sender: TObject);
procedure ExcluirExecute(Sender: TObject);
procedure CancelarExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure AlterarExecute(Sender: TObject);
procedure RelatorioExecute(Sender: TObject);
private
{ Private declarations }
public
FFile: string;
FPagina: string;
function VerificaCampo: Boolean;
procedure EnterEx (Sender: TObject);
procedure ExitEx (Sender: TObject);
procedure EnableDisableControls (Value: Boolean);
procedure EnableDisableButtons (Value: Boolean);
function FieldsWrithe (DtSrc: TDataSource): Boolean;
procedure MudaFoco;
procedure PermissoesForm; virtual;
procedure Restricoes ;virtual;
procedure GetDataSources; virtual;
end;
var
frmCadastroEx: TfrmCadastroEx;
implementation
uses uLibrary, ufrmCadClientes;
{$R *.dfm}
{ TForm1 }
procedure TfrmCadastroEx.EnableDisableButtons(Value: Boolean);
begin
{ Habilita/desabilita os botões }
Novo.Enabled := Value;
Excluir.Enabled := Value;
Salvar.Enabled := Value;
Localizar.Enabled := Value;
Cancelar.Enabled := Value;
end;
procedure TfrmCadastroEx.EnableDisableControls(Value: Boolean);
var
i : integer;
begin
inherited;
{: faz um laço em todos os componentes}
for i := 0 to ComponentCount -1 do
begin
if (Components[i] is TCustomEdit) then
(Components[i] as TCustomEdit).Enabled := Value;
if (Components[i] is TBitBtn) then
(Components[i] as TBitBtn).Enabled := Value;
if (Components[i] is TfraImage) then
begin
(Components[i] as TfraImage).ButtonInsertEnabled :=Value;
(Components[i] as TfraImage).ButtonDeleteEnabled :=Value;
end;
if (Components[i] is TDBDateTimePicker) then
(Components[i] as TDBDateTimePicker).Enabled := Value;
if (Components[i] is TDBRadioGroup) then
(Components[i] as TDBRadioGroup).Enabled := Value;
if (Components[i] is TDBLookupComboBox) then
(Components[i] as TDBLookupComboBox).Enabled := Value;
end;
btnNovo.Enabled := True;
btnLocalizar.Enabled := True;
btnAlterar.Enabled := True;
end;
function TfrmCadastroEx.FieldsWrithe(DtSrc: TDataSource): Boolean;
var
i : integer;
{: verifica quais os campos que estão em branco no cadastro}
begin
inherited;
Result := True; {: assume que estão todos preenchidos}
for i := 0 to DtSrc.DataSet.FieldCount - 1 do
if DtSrc.DataSet.Fields[i].Required then
if (DtSrc.DataSet.Fields[i].IsNull) Or (DtSrc.DataSet.Fields[i].AsString = '') then
begin
MessageDlg('Preencha o campo " '+ DtSrc.DataSet.Fields[i].DisplayLabel + '"', mtWarning,[mbOk], 0);
Result := False;
DtSrc.DataSet.Fields[i].FocusControl; {: coloca o foco no controle}
Break;
end;
end;
procedure TfrmCadastroEx.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
{: limpa a StatusBar}
StatusBar1.Panels[0].Text := '';
end;
procedure TfrmCadastroEx.btnNovoEnter(Sender: TObject);
begin
StatusBar1.Panels[0].Text := (Sender as TControl).Hint;
end;
procedure TfrmCadastroEx.FormCreate(Sender: TObject);
begin
MudaFoco;
end;
procedure TfrmCadastroEx.SalvarExecute(Sender: TObject);
begin
{: salvo as dados se os campos estiverem preenchidos}
if FieldsWrithe(DataSource1) and (DataSource1.State in [dsEdit, dsInsert]) then
begin
DataSource1.DataSet.Post;
MessageDlg(MSG_OK, mtInformation, [mbOK], 0);
end;
end;
procedure TfrmCadastroEx.LocalizarExecute(Sender: TObject);
begin
{: verifica se esta em modo de edição ou inserção}
if DataSource1.State in [dsEdit, dsInsert] then
case MessageDlg('Deseja salvar as alterações realizados no Cadastro?', mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
mrYes: btnSalvar.Click;
mrNo: DataSource1.DataSet.Cancel;
end
else
LocalizarEx.Execute;
end;
procedure TfrmCadastroEx.EnterEx(Sender: TObject);
begin
{: altera a cor do componente quando receber o foco }
if (Sender is TEdit) then
(Sender as TEdit).Color := clInfoBk;
if (Sender is TMemo) then
(Sender as TMemo).Color := clInfoBk;
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := clInfoBk;
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := clInfoBk;
StatusBar1.Panels[0].Text := (Sender as TControl).Hint;
end;
procedure TfrmCadastroEx.ExitEx(Sender: TObject);
begin
{: altera a cor do componente quando sair o foco }
if (Sender is TEdit) then
(Sender as TEdit).Color := clWindow;
if (Sender is TMemo) then
(Sender as TMemo).Color := clWindow;
{: altera a cor do componente quando sair o foco }
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := clWindow;
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := clWindow;
end;
function TfrmCadastroEx.VerificaCampo: Boolean;
var
i: integer;
{: função para verificar os Edits obrigatórios}
begin
Result := False;
for i := 0 to componentCount -1 do
if Components[i] is TEdit then
{: se o componente for um Edit e estiver em branco}
if (TEdit(Components[i]).AutoSize) And
(TEdit(Components[i]).Text = '') then
begin
{: coloca o foco no Edit e mostra uma msg}
Result := True;
TEdit(Components[i]).SetFocus;
MessageDlg(MSG_CAMPO_OBR, mtWarning, [mbOk], 0);
Break;
end;
end;
procedure TfrmCadastroEx.FormKeyPress(Sender: TObject; var Key: Char);
begin
{: troca ENTER por TAB}
if key = #13 then
begin
Perform (CM_DialogKey, VK_TAB, 0);
key:=#0;
end
end;
procedure TfrmCadastroEx.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_Escape then
Close;
end;
procedure TfrmCadastroEx.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
{: limpa a StatusBar}
StatusBar1.Panels[0].Text := '';
end;
procedure TfrmCadastroEx.MudaFoco;
var
i: integer;
begin
{: muda o foco dos componentes do formulário }
for i := 0 to ComponentCount -1 do
begin
{: se for um Edit }
if (Components[i] is TEdit) then
begin
(Components[i] as TEdit).OnExit := ExitEx;
(Components[i] as TEdit).OnEnter := EnterEx;
end;
{: se for um Memo }
if (Components[i] is TMemo) then
begin
(Components[i] as TMemo).OnExit := ExitEx;
(Components[i] as TMemo).OnEnter := EnterEx;
end;
{: se for um DBEdit }
if (Components[i] is TDBEdit) then
begin
(Components[i] as TDBEdit).OnExit := ExitEx;
(Components[i] as TDBEdit).OnEnter := EnterEx;
end;
{: se for um DBMemo }
if (Components[i] is TDBMemo) then
begin
(Components[i] as TDBMemo).OnExit := ExitEx;
(Components[i] as TDBMemo).OnEnter := EnterEx;
end;
end;
end;
procedure TfrmCadastroEx.Sair1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmCadastroEx.LocalizarExAfterSearch(Sender: TObject;
AModalResult: Integer);
begin
if AModalResult = mrOK then
begin
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
end;
procedure TfrmCadastroEx.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
{: verifica se esta em modo de edição ou inserção}
if DataSource1.State in [dsEdit,dsInsert] then
case MessageDlg('Deseja salvar as alterações realizados no Cadastro ?', mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
mrYes: begin
{: verifica se tem permissão para salvar}
if not btnSalvar.Enabled then
begin
MessageDlg(MSG_PERMISOES, mtWarning, [mbOk], 0);
CanClose := False;
end
else
begin
btnSalvar.Click;
CanClose := True;
end;
end;
mrNo: begin
DataSource1.DataSet.Cancel;
CanClose := True;
end;
mrCancel: CanClose := False;
end;
end;
procedure TfrmCadastroEx.PermissoesForm;
begin
{: implementado nos forms descendentes }
end;
procedure TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
procedure TfrmCadastroEx.ExcluirExecute(Sender: TObject);
begin
{: deleta se houver dados no DataSet }
if (DataSource1.DataSet.Active) and (DataSource1.DataSet.RecordCount > 0) then
begin
if MessageDlg('Tem certeza que deseja excluir o registro ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
DataSource1.DataSet.Delete;
end;
EnableDisableControls(False);
end;
procedure TfrmCadastroEx.CancelarExecute(Sender: TObject);
begin
{: cancela e desabilita os componentes }
DataSource1.DataSet.Cancel;
EnableDisableControls(False);
end;
procedure TfrmCadastroEx.FormShow(Sender: TObject);
begin
{: habilita/desabilita os componentes e verifica permissões/restrições }
GetDataSources;
EnableDisableControls(False);
btnAlterar.Enabled := True;
PermissoesForm;
Restricoes;
end;
{Excluir.Enabled := (not DataSource1.DataSet.IsEmpty) Or
(DataSource1.DataSet.RecordCount <=0);}
procedure TfrmCadastroEx.AlterarExecute(Sender: TObject);
begin
{: habilita/desabilita os componentes e verifica permissões/restrições }
if not DataSource1.DataSet.IsEmpty then
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
procedure TfrmCadastroEx.RelatorioExecute(Sender: TObject);
begin
{: implementado em cada form, descendente }
end;
procedure TfrmCadastroEx.Restricoes;
begin
{: implementado nos forms descendentes }
end;
procedure TfrmCadastroEx.GetDataSources;
begin
{: para preencher o DataSet dos DataSources e componentes Localiza }
end;
end.
GOSTEI 0
Junior Miranda
02/12/2010
Vamos limitar o universo a ser analisado! Coloca um breakPoint no método abaixo e acompanha para saber exatamente onde o erro ocorre.
Depois disto, posta as sua observações.
[]'s
TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
Depois disto, posta as sua observações.
[]'s
GOSTEI 0
Wagner
02/12/2010
Amigo nunca utilizei o breakpoint não sei se fiz certo mas da o seguinte erro:
[Hint] ufrLocalizarEx.pas(46): Private symbol 'DBGridClick' declared but never used
Obrigado
[Hint] ufrLocalizarEx.pas(46): Private symbol 'DBGridClick' declared but never used
Obrigado
GOSTEI 0
Junior Miranda
02/12/2010
Lembra o método execute que eu cite no post anterior? Selecione a primeira linha dentro do begin/end. É a linha da abertura(Open), depois pressione a tecla F5. Pronto, colocou um breakpoint. Execute o projeto, quando você clicar no botão novo, você entrará no método execute. Vc irá pressionar a tecla F7 ou F8 para acompanhar passo a passo a execução. Como isso poderemos perceber onde o erro está acontecendo.
Segue um link para uma apóstila. Dê uma olhada a partir da página 19. Explica de forma simples o Debugg
[]'s
Segue um link para uma apóstila. Dê uma olhada a partir da página 19. Explica de forma simples o Debugg
[]'s
GOSTEI 0
Junior Miranda
02/12/2010
Só lembrando, Após colocar o breakpoint, execute o projeto utilizando o RUN (Tecla F9). E segue o link para apóstila.
http://sistemas.baladaperfeita.com.br/Delphi/Borland.Delphi.Super.Basica.Prof.Cesar.Rodrigo.CSEG.pdf
[]'s
http://sistemas.baladaperfeita.com.br/Delphi/Borland.Delphi.Super.Basica.Prof.Cesar.Rodrigo.CSEG.pdf
[]'s
GOSTEI 0
Alex Bahiano
02/12/2010
Tive um problema desse tipo semana passada, o que aconteceu comigo, é que quando os botões estão todos ativados, na hora da execução, ai vc vai clica em gravar ele gera esse erro, aqui fiz o seguinte para os botões
no evento onchange do data source coloque
procedure TfrmCadFornecedor.dtsdoseuformStateChange(Sender: TObject);
var ativado : Boolean;
begin
ativado := false;
if (dtsdoseuformState in [dsInsert, dsEdit]) then
ativado := True;
PngBitBtn1.Enabled := not ativado; // botão inserir
PngBitBtn2.Enabled := not ativado; // botão excluir
PngBitBtn3.Enabled := ativado; // botão gravar
PngBitBtn4.Enabled := not ativado; //botão editar
PngBitBtn5.Enabled := ativado; //botão cancelar
end;
no botão novo
vc pode fazer direto a inserção
dtsseuform.dataset.insert
pode tbm criar uma variavél do tipo novo: boolean e jogar o dts pra lá
mas veja ai o que nosso amigo Junior Miranda falou, coloque o BP pra ver onde para.
depois post aqui a dúvida.
no evento onchange do data source coloque
procedure TfrmCadFornecedor.dtsdoseuformStateChange(Sender: TObject);
var ativado : Boolean;
begin
ativado := false;
if (dtsdoseuformState in [dsInsert, dsEdit]) then
ativado := True;
PngBitBtn1.Enabled := not ativado; // botão inserir
PngBitBtn2.Enabled := not ativado; // botão excluir
PngBitBtn3.Enabled := ativado; // botão gravar
PngBitBtn4.Enabled := not ativado; //botão editar
PngBitBtn5.Enabled := ativado; //botão cancelar
end;
no botão novo
vc pode fazer direto a inserção
dtsseuform.dataset.insert
pode tbm criar uma variavél do tipo novo: boolean e jogar o dts pra lá
mas veja ai o que nosso amigo Junior Miranda falou, coloque o BP pra ver onde para.
depois post aqui a dúvida.
GOSTEI 0
Wagner
02/12/2010
Obrigado pela apostila vai me ajudar muito.
Para na seguinte linha quando clicono botão novo do formulário de cadastro de fita:
TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de cliente:
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
cdsFitasSTATUS.AsString := 'D';
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de fita:
TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de cliente:
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
cdsFitasSTATUS.AsString := 'D';
end;
GOSTEI 0
Wagner
02/12/2010
Obrigado pela apostila vai me ajudar muito.
Para na seguinte linha quando clicono botão novo do formulário de cadastro de fita:
TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de cliente:
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
cdsFitasSTATUS.AsString := 'D';
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de fita:
TfrmCadastroEx.NovoExecute(Sender: TObject);
begin
{: novo registro}
DataSource1.DataSet.Open;
DataSource1.DataSet.Insert;
EnableDisableControls(True);
PermissoesForm;
Restricoes;
end;
Para na seguinte linha quando clicono botão novo do formulário de cadastro de cliente:
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
cdsFitasSTATUS.AsString := 'D';
end;
No cadastro de cliente deletei a linha:
cdsFitasSTATUS.AsString := 'D';
e esta funcionando legal, o problema continua no cadastro da fita agora.
GOSTEI 0
Junior Miranda
02/12/2010
Execute o debugg só que utilizando o F7 (Trace Into) para entrar nos métodos e assim poder identificar o que de fato ocorre no cadastro de fitas. Outra coisa, dá uma olhada no evento onNew do clientdataset de fitas, coloca um breakpoint lá também (caso tenha alguma coisa). É um trabalho de paciência e testes.
[]'s
[]'s
GOSTEI 0
Wagner
02/12/2010
Dei uma olhada no cds de fitas e cliente e vi que ambos utilizão o mesmo, lembrando que o formulário de fitas e clientes forão erdados.
Quando altero o dm para fitas funciona o cadastro de fitas
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsFitasID_FITAS.ASInteger := 0;
end;
Quando altero o dm para clientes funciona o cadastro de clientes.
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
end;
Deveria ser separado?
Quando altero o dm para fitas funciona o cadastro de fitas
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsFitasID_FITAS.ASInteger := 0;
end;
Quando altero o dm para clientes funciona o cadastro de clientes.
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
end;
Deveria ser separado?
GOSTEI 0
Alex Bahiano
02/12/2010
Vc esta deletando parte do código? faça isso não fio, vá traçando com F8 o break point. quando o software abrir ai vc vê onde esta o erro.
GOSTEI 0
Wagner
02/12/2010
Não estou deletando. veja:
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsFitasID_FITAS.ASInteger := 0;
end;
Quando altero o dm para clientes funciona o cadastro de clientes.
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
end;
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsFitasID_FITAS.ASInteger := 0;
end;
Quando altero o dm para clientes funciona o cadastro de clientes.
procedure TDM.cdsClientesNewRecord(DataSet: TDataSet);
begin
cdsClientesID_CLIENTES.AsInteger := 0;
end;
GOSTEI 0
Wagner
02/12/2010
Resolvido, era isto mesmo fita e cliente estavão usando o mesmo cds.
Obrigado aos amigos vou continuar qualquer coisa posto ai novamente.
Abraços.
Obrigado aos amigos vou continuar qualquer coisa posto ai novamente.
Abraços.
GOSTEI 0