sexta-feira, 13 de julho de 2007

Rotinas em DELPHI para uma inserção completa de tuplas: Caso de Usuários de um Sistema


As seguintes rotinas computacionais destinam-se à realização de um processo completo de inserção de tuplas em uma dada tabela de um banco de dados.



A interface que controla a coleção de usuários do sistema é apresentada na figura. Vários controles de verificação são realizados antes da inserção de uma tupla no banco de dados. Observe com atenção. Você pode fazer diferente, você pode fazer melhor... Temos aqui uma "dica" para ser usada como ponto de partida.

Lá vai...

private
{ Private declarations }
//-------
alx_int_user_id : Integer;
alx_str_user_nome : String;
alx_int_user_na_id : Integer;
alx_int_usuario_id_em_foco: Integer; //... descrição do usuário que receberá o foco logo após ser inserido ou alterado, ou ainda, excluído ...
//-------
function alx_boo_Usuario_Inserido_Com_Sucesso(): Boolean;
function alx_boo_Usuario_Tem_Permissao_Para_Insercao_Novo_Usuario(): Boolean;
function alx_boo_Verificacao_Ok(): Boolean;
function alx_int_Pegar_Nivel_Acesso_Id(alx_str_nivel_acesso_nome: String): Integer;
function alx_int_Pegar_Usuarios_Novo_Id(): Integer;
//-------
procedure alx_voi_Atualizar_Cartao_Usuario();
procedure alx_voi_Colocar_Cursor_Sobre_Usuario_Inserido_Ou_Alterado();
procedure alx_voi_Bloquear_Botoes_Para_Insercao(alx_boo_bloquear: Boolean);
procedure alx_voi_Controlar_Processo_Insercao_Usuario();
procedure alx_voi_Liberar_Edits_Para_Edicao(alx_boo_liberar: Boolean);
procedure alx_voi_Limpar_Campos_Cartao_Usuario();
procedure alx_voi_Popular_Combobox_Nivel_Acesso();
procedure alx_voi_Popular_Grid_Usuarios();
procedure alx_voi_Registrar_Entrada_Usuario(alx_int_usuario_id: Integer ; alx_str_nome: String ; alx_int_na_id: Integer);
procedure alx_voi_Registrar_Status_Bar_Usuario();
public
{ Public declarations }
constructor alx_voi_Create(alx_obj_owner: TComponent ; alx_int_usuario_id: Integer ; alx_str_user_name: String ; alx_int_nivel_acesso_id: Integer);
end;



implementation

{$R *.dfm}
//==============================================================================
constructor Talx_frm_sgc_users.alx_voi_Create(alx_obj_owner: TComponent ; alx_int_usuario_id: Integer ; alx_str_user_name: String ; alx_int_nivel_acesso_id: Integer);
begin
inherited Create(alx_obj_owner);
self.alx_voi_Registrar_Entrada_Usuario(alx_int_usuario_id , alx_str_user_name , alx_int_nivel_acesso_id);
self.alx_voi_Popular_Grid_Usuarios(); //... popular grid usuarios...
self.alx_voi_Atualizar_Cartao_Usuario(); //... atualizar cartão de usuários ...
self.alx_voi_Registrar_Status_Bar_Usuario();
self.Show();
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Popular_Grid_Usuarios();
var
alx_str_sql_text: TStrings;
begin
try
alx_str_sql_text:= TStringList.Create();
alx_str_sql_text.Add('SELECT USER_ID , USER_NOME, USER_APELIDO, USER_NA_ID, NA_APELIDO, USER_ATIVO ');
alx_str_sql_text.Add('FROM USERS , NIVEIS_ACESSO ' );
alx_str_sql_text.Add('WHERE USER_NA_ID = NA_ID ' );
alx_str_sql_text.Add('ORDER BY USER_NOME ;');
self.ADOQuery_Usuarios.Active:= False;
self.ADOQuery_Usuarios.SQL.Clear();
self.ADOQuery_Usuarios.SQL:= alx_str_sql_text;
self.ADOQuery_Usuarios.Active:= True;
except
on E: Exception do begin
showmessage('Ôpa, ocorreu um erro ao popular o combo de Contas Bancárias! Veja: ' + E.Message);
end;
end;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Atualizar_Cartao_Usuario();
begin
try
self.Edit2.Text := self.ADOQuery_Usuarios.Fields[0].AsString;
self.Edit3.Text := self.ADOQuery_Usuarios.Fields[1].AsString;
self.Edit4.Text := self.ADOQuery_Usuarios.Fields[2].AsString;
self.Edit5.Text := self.ADOQuery_Usuarios.Fields[3].AsString;
self.ComboBox1.Text := self.ADOQuery_Usuarios.Fields[4].AsString;
self.Edit6.Text := 'senha_1';
self.Edit7.Text := 'senha_2';
self.CheckBox1.Checked:= self.ADOQuery_Usuarios.Fields[5].AsBoolean;
self.ComboBox1.Items.Clear();
self.ComboBox1.Enabled:= False;
except
on E:Exception do begin
self.Edit2.Text := 'erro'; self.Edit3.Text:= 'erro'; self.Edit4.Text:= 'erro' ; self.Edit5.Text:= 'erro';
self.ComboBox1.Text := 'erro'; self.Edit6.Text:= 'erro_1'; self.Edit7.Text:= 'erro_2'; self.CheckBox1.Checked:= False;
showmessage('Ôpa, ocorreu um erro ao atualizar o cartão de Usuários! Veja: ' + E.Message);
end;
end;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Registrar_Entrada_Usuario(alx_int_usuario_id: Integer ; alx_str_nome: String ; alx_int_na_id: Integer);
begin
self.alx_int_user_id := alx_int_usuario_id;
self.alx_str_user_nome := alx_str_nome;
self.alx_int_user_na_id := alx_int_na_id;
self.alx_int_usuario_id_em_foco:= 0; //... código de um usuário recém inserido, ou alterado, para amnter o foco logo após a inserção ou alteração ...
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Registrar_Status_Bar_Usuario();
begin
self.StatusBar1.Panels[0].Text:= ' Usuário: ' + self.alx_str_user_nome;
self.StatusBar1.Panels[1].Text:= ' Nível de Acesso: ' + inttostr(self.alx_int_user_na_id);
self.StatusBar1.Panels[2].Text:= ' ';
self.StatusBar1.Panels[3].Text:= ' ';
self.StatusBar1.Panels[4].Text:= ' Sistema Saturno';
self.StatusBar1.Panels[5].Text:= ' AlexS - Software para Engenharia';
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Controlar_Processo_Insercao_Usuario();
begin
if((self.BitBtn11.Caption = 'inserir') and (self.alx_boo_Usuario_Tem_Permissao_Para_Insercao_Novo_Usuario()) ) then begin
self.alx_voi_Limpar_Campos_Cartao_Usuario(); //... limpar campos ...
self.alx_voi_Liberar_Edits_Para_Edicao(True); //... liberar edits para edição ...
self.alx_voi_Bloquear_Botoes_Para_Insercao(True); //... bloquear botões ...
self.Edit2.Text:= inttostr(self.alx_int_Pegar_Usuarios_Novo_Id()); //... anuncia um provável código novo para a futura inserção ...
self.alx_voi_Popular_Combobox_Nivel_Acesso(); //... popular o combobox do nivel de acesso ...
self.BitBtn11.Caption:= 'salvar';
end
else if ((self.BitBtn11.Caption = 'salvar') and (self.alx_boo_Verificacao_Ok()) ) then begin //...testar antes os campos...
if(self.alx_boo_Usuario_Inserido_Com_Sucesso()) then begin //... somente se a inserção foi um sucesso ...
self.alx_voi_Popular_Grid_Usuarios(); //... realiza um refresh no grid ...
self.alx_voi_Colocar_Cursor_Sobre_Usuario_Inserido_Ou_Alterado(); //... coloca o cursor sobre o usuário recém inserido
self.alx_voi_Atualizar_Cartao_Usuario(); //... atualiza o cartão d usuário ...
self.alx_voi_Liberar_Edits_Para_Edicao(False); //... não-liberar edits para edição ...
self.alx_voi_Bloquear_Botoes_Para_Insercao(False); //... desbloquear botões ...
self.BitBtn11.Caption:= 'inserir';
end;
end;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Limpar_Campos_Cartao_Usuario();
begin
self.Edit2.Text := '';
self.Edit3.Text := '';
self.Edit4.Text := '';
self.Edit5.Text := '';
self.ComboBox1.Text := '';
self.Edit6.Text := '';
self.Edit7.Text := '';
self.ComboBox1.Text := 'escolha um nível de acesso';
self.CheckBox1.Checked:= True;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Liberar_Edits_Para_Edicao(alx_boo_liberar: Boolean);
begin
self.Edit1.ReadOnly := alx_boo_liberar;
self.Edit2.ReadOnly := True;
self.Edit3.ReadOnly := not(alx_boo_liberar);
self.Edit4.ReadOnly := not(alx_boo_liberar);
self.Edit5.ReadOnly := True;
self.Edit6.ReadOnly := not(alx_boo_liberar);
self.Edit7.ReadOnly := not(alx_boo_liberar);
self.CheckBox1.Enabled:= alx_boo_liberar;
self.ComboBox1.Enabled:= alx_boo_liberar;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Bloquear_Botoes_Para_Insercao(alx_boo_bloquear: Boolean);
begin
self.BitBtn1.Enabled := not(alx_boo_bloquear);
self.BitBtn2.Enabled := not(alx_boo_bloquear);
self.BitBtn3.Enabled := not(alx_boo_bloquear);
self.BitBtn4.Enabled := not(alx_boo_bloquear);
self.BitBtn5.Enabled := not(alx_boo_bloquear);
self.BitBtn6.Enabled := not(alx_boo_bloquear);
self.BitBtn7.Enabled := not(alx_boo_bloquear);
self.BitBtn8.Enabled := not(alx_boo_bloquear);
self.BitBtn9.Enabled := not(alx_boo_bloquear);
self.BitBtn10.Enabled:= not(alx_boo_bloquear);
self.BitBtn11.Enabled:= True;
self.BitBtn12.Enabled:= not(alx_boo_bloquear);
self.BitBtn13.Enabled:= not(alx_boo_bloquear);
self.BitBtn14.Enabled:= True;
self.CheckBox1.Enabled:= False;
end;
//==============================================================================
function Talx_frm_sgc_users.alx_int_Pegar_Usuarios_Novo_Id(): Integer;
var
alx_str_sql_text: TStrings;
alx_int_apoio : Integer;
begin
try
alx_str_sql_text:= TStringList.Create();
alx_str_sql_text.Add('SELECT MAX(USER_ID) FROM USERS ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Active:= True;
//-----------------
alx_int_apoio:= self.ADOQuery_Apoio.Fields[0].AsInteger + 1;
self.ADOQuery_Apoio.Active:= False;
//-----------------
except
on E: Exception do begin
alx_int_apoio:= 0;
showmessage('Ôpa, ocorreu um erro ao buscar o novo código para um USUÁRIO! Veja: ' + E.Message);
end;
end;
result:= alx_int_apoio;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Popular_Combobox_Nivel_Acesso();
var
alx_str_sql_text: TStrings;
begin
try
alx_str_sql_text:= TStringList.Create();
alx_str_sql_text.Add('SELECT NA_APELIDO ');
alx_str_sql_text.Add('FROM NIVEIS_ACESSO ');
alx_str_sql_text.Add('WHERE NA_ATIVO = TRUE ');
alx_str_sql_text.Add('ORDER BY NA_APELIDO ; ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Active:= True;
//-----------------
self.ComboBox1.Items.Clear();
while not(self.ADOQuery_Apoio.Eof) do begin
self.ComboBox1.Items.Add(self.ADOQuery_Apoio.Fields[0].AsString);
self.ADOQuery_Apoio.Next();
end;
self.ComboBox1.Text:= 'escolha um nível de acesso';
self.Edit5.Text:= '';
//-----------------
self.ADOQuery_Apoio.Active:= False;
//-----------------
except
on E: Exception do begin
showmessage('Ôpa, ocorreu um erro ao popular o combo de Níveis de Acesso! Veja: ' + E.Message);
end;
end;
end;
//==============================================================================
function Talx_frm_sgc_users.alx_int_Pegar_Nivel_Acesso_Id(alx_str_nivel_acesso_nome: String): Integer;
var
alx_str_sql_text: TStrings;
alx_int_apoio : Integer;
begin
try
alx_str_sql_text:= TStringList.Create();
alx_str_sql_text.Add('SELECT NA_ID FROM NIVEIS_ACESSO WHERE NA_APELIDO = : ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Parameters[0].Value:= alx_str_nivel_acesso_nome;
self.ADOQuery_Apoio.Active:= True;
//-----------------
alx_int_apoio:= self.ADOQuery_Apoio.Fields[0].AsInteger;
self.ADOQuery_Apoio.Active:= False;
//-----------------
except
on E: Exception do begin
alx_int_apoio:= 0;
showmessage('Ôpa, ocorreu um erro ao buscar o código para um apelido de Nível de Acesso escolhido! Veja: ' + E.Message);
end;
end;
result:= alx_int_apoio;
end;
//==============================================================================
function Talx_frm_sgc_users.alx_boo_Usuario_Inserido_Com_Sucesso(): Boolean;
var
alx_str_sql_text : TStrings;
alx_boo_apoio : Boolean;
alx_int_user_id : Integer;
alx_str_user_nome : String;
alx_str_user_apelido: String;
alx_str_senha : String;
alx_int_user_na_id : Integer;
begin
try
alx_int_user_id := self.alx_int_Pegar_Usuarios_Novo_Id();
alx_str_user_nome := self.Edit3.Text;
alx_str_user_apelido:= self.Edit4.Text;
alx_str_senha := self.edit6.Text;
alx_int_user_na_id := strtoint(self.Edit5.Text);
//--------------
alx_str_sql_text := TStringList.Create();
alx_str_sql_text.Add('INSERT INTO USERS VALUES (:, :, :, :, :, True) ; ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Parameters[0].Value := alx_int_user_id;
self.ADOQuery_Apoio.Parameters[1].Value := alx_str_user_nome;
self.ADOQuery_Apoio.Parameters[2].Value := alx_str_user_apelido;
self.ADOQuery_Apoio.Parameters[3].Value := alx_str_senha;
self.ADOQuery_Apoio.Parameters[4].Value := alx_int_user_na_id;
//--------------
self.ADOQuery_Apoio.ExecSQL();
alx_boo_apoio:= True;
self.alx_int_usuario_id_em_foco:= alx_int_user_id; //... informa o id do usuário que foi inserido ...
//--------------
except
on E: Exception do begin
alx_boo_apoio := False;
self.alx_int_usuario_id_em_foco:= 0;
ShowMessage('Ôpa, ocorreu um erro ao realizar a transação que insere um novo usuário no sistema! Veja: ' + E.Message);
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
procedure Talx_frm_sgc_users.alx_voi_Colocar_Cursor_Sobre_Usuario_Inserido_Ou_Alterado();
var
alx_int_apoio: Integer;
begin
try
self.ADOQuery_Usuarios.First();
while not(self.ADOQuery_Usuarios.Eof) do begin
alx_int_apoio:= self.ADOQuery_Usuarios.Fields[0].AsInteger;
if (alx_int_apoio = self.alx_int_usuario_id_em_foco) then begin
break;
end
else begin
self.ADOQuery_Usuarios.Next();
end;
end;
except
on e:Exception do begin
showmessage('Ôpa, ocorreu um erro ao colocar o cursor sobre o usuário recém inserido ou alterado! Veja: ' + E.Message);
end;
end;
end;
//==============================================================================
function Talx_frm_sgc_users.alx_boo_Verificacao_Ok(): Boolean;
var
alx_boo_apoio: Boolean;
begin
try
alx_boo_apoio:= True;
if not(self.Edit3.Text <> '') then begin
alx_boo_apoio:= False;
showmessage('Você deve digitar um nome para o usuário!');
self.Edit3.SetFocus();
end
else if not(self.Edit4.Text <> '') then begin
alx_boo_apoio:= False;
showmessage('Você deve digitar um apelido para o usuário!');
self.Edit4.SetFocus();
end
else if not(self.Edit5.Text <> '') then begin
alx_boo_apoio:= False;
showmessage('Você deve escolher um nível de acesso para esse usuário!');
self.ComboBox1.SetFocus();
end
else if not(self.Edit6.Text <> '') then begin
alx_boo_apoio:= False;
showmessage('A primeira senha não pode ser vazia!');
self.Edit6.SetFocus();
end
else if not(self.Edit7.Text <> '') then begin
alx_boo_apoio:= False;
showmessage('A segunda senha não pode ser vazia!');
self.Edit7.SetFocus();
end
else if not(self.Edit6.Text = self.Edit7.Text) then begin
alx_boo_apoio:= False;
showmessage('As senhas devem possuir mesmo valor (devem ser iguais). Digite-as novamente!');
self.Edit7.Text:= '';
self.Edit6.SetFocus();
end;
except
on E: Exception do begin
alx_boo_apoio:= False;
showmessage('Ôpa, ocorreu um erro ao verificar a possibilidade de inserir ou alterar dados de um usuário! Veja: ' + E.Message);
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
function Talx_frm_sgc_users.alx_boo_Usuario_Tem_Permissao_Para_Insercao_Novo_Usuario(): Boolean;
var
alx_boo_apoio: Boolean;
begin
if ((self.alx_int_user_na_id = 1) or (self.alx_int_user_na_id = 2) or (self.alx_int_user_na_id = 6)) then begin
alx_boo_apoio:= True;
end
else begin
alx_boo_apoio:= False;
showmessage('você não tem permissão para inserir usuários. Procure o admiistrador do sistema para essa operação!');
end;
result:= alx_boo_apoio;
end;
//==============================================================================
procedure Talx_frm_sgc_users.BitBtn1Click(Sender: TObject);
begin
self.Close();
end;

procedure Talx_frm_sgc_users.FormClose(Sender: TObject; var Action: TCloseAction);
begin
self.Destroy;
end;

procedure Talx_frm_sgc_users.Fechar1Click(Sender: TObject);
begin
self.Close();
end;

procedure Talx_frm_sgc_users.DBGrid1CellClick(Column: TColumn);
begin
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.BitBtn2Click(Sender: TObject);
begin
self.ADOQuery_Usuarios.First();
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.BitBtn3Click(Sender: TObject);
begin
self.ADOQuery_Usuarios.Prior();
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.BitBtn4Click(Sender: TObject);
begin
self.ADOQuery_Usuarios.Next();
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.BitBtn5Click(Sender: TObject);
begin
self.ADOQuery_Usuarios.Last();
self.alx_voi_Atualizar_Cartao_Usuario();
end;

procedure Talx_frm_sgc_users.BitBtn11Click(Sender: TObject);
begin
self.alx_voi_Controlar_Processo_Insercao_Usuario();
//... transferir o controle para uma procedure de alteração ...
end;

procedure Talx_frm_sgc_users.ComboBox1Select(Sender: TObject);
begin
self.Edit5.Text:= inttostr(self.alx_int_Pegar_Nivel_Acesso_Id(self.ComboBox1.Text));
end;

end.

quarta-feira, 4 de julho de 2007

Rotinas em DELPHI para operacionalização de uma Transação com ADO

Saudações alunos e interessados,

abaixo segue um conjunto de rotinas computacionais cujo principal objetivo é realizar duas tarefas específicas que fazem parte de uma certa transação sobre um banco de dados, por meio dos componentes "ADOConnection" e "ADOQuery".

Basicamente, esta TRANSAÇÃO controla as seguintes atualizações no banco de dados:
Tarefa_1: responsável pela inserção de um novo lançamento contábil de uma receita, cuja conta bancária e conta de nível_4 precisa ser especificada, juntamente com o valor do lançamento, em uma tabela denominada "Lançamentos";
Tarefa_2: responsável pela inserção dos elementos, presentes em uma lista, que representam as atividades que irão participar de um "rateio" e que estão associados ao lançamento inserido na tarefa anterior. Cada rateio mapeia um código exclusivo, uma atividade específica e um valor parcial, na tabela denominada "Rateios".
Então, a transação somente se completará se as duas tarefas forem realizadas com sucesso. Se não, um RollBack_trans é solicitado.

Seguem os artefatos de software:

//==============================================================================
procedure Talx_frm_sgc_lancamentos_receitas.alx_voi_Operar_Transacao_Insercao();
begin
try
alx_frm_data_module.ADOConnection_SGC.BeginTrans();
//----------------
if( self.alx_boo_Tarefa_1_Transacao_Realizada_Com_Sucesso() ) then begin //... insere o novo lançamento ...
if( self.alx_boo_Tarefa_2_Transacao_Realizada_Com_Sucesso() ) then begin //... insere as atividades associadas ...
alx_frm_data_module.ADOConnection_SGC.CommitTrans();
showmessage('O lançamento foi inserido no banco de dados com sucesso!');
end
else begin
alx_frm_data_module.ADOConnection_SGC.RollbackTrans();
showmessage('a transação NÃO completou-se: O lançamento NÃO foi inserido no banco de dados! você deve reespecificá-lo novamente.');
end;
end;
//----------------
//... preparar mensagens e botões adequados à pos-transação (sucesso ou não...)
//----------------
except
on E:Exception do begin
showmessage('Ôpa, ocorreu um erro ao realizar a transação de inserção de nova receita com contas para rateio! Veja: ' + E.Message);
end;
end;
end;
//==============================================================================
function Talx_frm_sgc_lancamentos_receitas.alx_boo_Tarefa_1_Transacao_Realizada_Com_Sucesso(): Boolean;
var
alx_str_sql_text : TStrings;
alx_boo_apoio : Boolean;
alx_int_lan_id : Integer;
alx_dat_lan_data : TDate;
alx_int_lan_cn4_id : Integer;
alx_int_lan_cb_id : Integer;
alx_flo_lan_valor : Real;
alx_str_lan_doc : String;
alx_str_lan_obs : String;
alx_int_lan_user_id: Integer;
begin
try
alx_int_lan_id := self.alx_int_Pegar_Lancamentos_Novo_Id();
alx_dat_lan_data := strtodate(self.Edit3.Text);
alx_int_lan_cn4_id := strtoint(self.Edit1.Text);
alx_int_lan_cb_id := strtoint(self.Edit2.Text);
alx_flo_lan_valor := strtofloat(self.Edit6.Text);
alx_str_lan_doc := self.Edit4.Text;
alx_str_lan_obs := self.Edit5.Text;
alx_int_lan_user_id:= self.alx_int_user_id;
//--------------
alx_str_sql_text := TStringList.Create();
alx_str_sql_text.Add('INSERT INTO LANCAMENTOS VALUES (:, :, :, :, :, :, :, :, True) ; ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Parameters[0].Value := alx_int_lan_id;
self.ADOQuery_Apoio.Parameters[1].DataType:= FTDate;
self.ADOQuery_Apoio.Parameters[1].Value := alx_dat_lan_data;
self.ADOQuery_Apoio.Parameters[2].Value := alx_int_lan_cn4_id;
self.ADOQuery_Apoio.Parameters[3].Value := alx_int_lan_cb_id;
self.ADOQuery_Apoio.Parameters[4].DataType:= FTFloat;
self.ADOQuery_Apoio.Parameters[4].Value := alx_flo_lan_valor;
self.ADOQuery_Apoio.Parameters[5].Value := alx_str_lan_doc;
self.ADOQuery_Apoio.Parameters[6].Value := alx_str_lan_obs;
self.ADOQuery_Apoio.Parameters[7].Value := alx_int_user_id;
//--------------
self.ADOQuery_Apoio.ExecSQL();
alx_boo_apoio:= True;
self.Edit10.Text:= inttostr(alx_int_lan_id); //... fornece o verdadeiro id do lançamento que foi inserido ...
//--------------
except
on E: Exception do begin
alx_boo_apoio:= False;
ShowMessage('Ôpa, ocorreu um erro ao realizar a Tarefa_1 da transação que insere um lançamento de receita! Veja: ' + E.Message);
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
function Talx_frm_sgc_lancamentos_receitas.alx_boo_Tarefa_2_Transacao_Realizada_Com_Sucesso(): Boolean;
var
alx_int_i : Integer;
alx_int_rateio_lan_id : Integer;
alx_int_rateio_ae_id : Integer;
alx_flo_rateio_parcial: Real;
alx_boo_apoio : Boolean;
begin
try
alx_int_rateio_lan_id := strtoint(self.Edit10.Text);
for alx_int_i:= 0 to (self.alx_lst_lista_atividades.Count - 1) do begin
alx_int_rateio_ae_id := strtoint( (TObject(self.alx_lst_lista_atividades.Items[alx_int_i]) as TStrings).Strings[0] );
alx_flo_rateio_parcial:= strtofloat( (TObject(self.alx_lst_lista_atividades.Items[alx_int_i]) as TStrings).Strings[2] );
if (self.alx_boo_Tarefa_2_Transacao_Rateio_Inserido_Com_Sucesso(alx_int_rateio_lan_id, alx_int_rateio_ae_id, alx_flo_rateio_parcial)) then begin
alx_boo_apoio:= True;
end
else begin
alx_boo_apoio:= False;
break;
end;
end;
except
on E:Exception do begin
alx_boo_apoio:= False;
showmessage('Ôpa, ocorreu um erro ao preparar a Tarefa_2 da transação de lançamento de nova receita! Veja: ' + E.Message);
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
function Talx_frm_sgc_lancamentos_receitas.alx_boo_Tarefa_2_Transacao_Rateio_Inserido_Com_Sucesso(alx_int_lan_id: Integer ; alx_int_atividade_id: Integer ; alx_flo_valor: Real ): Boolean;
var
alx_str_sql_text : TStrings;
alx_int_rateio_id: Integer;
alx_boo_apoio : Boolean;
begin
try
alx_int_rateio_id:= self.alx_int_Pegar_Rateios_Novo_Id();
alx_str_sql_text := TStringList.Create();
alx_str_sql_text.Add('INSERT INTO RATEIOS VALUES (:, :, :, :, True); ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Parameters[0].Value := alx_int_rateio_id;
self.ADOQuery_Apoio.Parameters[1].Value := alx_int_lan_id;
self.ADOQuery_Apoio.Parameters[2].Value := alx_int_atividade_id;
self.ADOQuery_Apoio.Parameters[3].DataType:= FTFloat;
self.ADOQuery_Apoio.Parameters[3].Value := alx_flo_valor;
//--------------
self.ADOQuery_Apoio.ExecSQL();
alx_boo_apoio:= True;
//--------------
except
on E:Exception do begin
alx_boo_apoio:= False;
showmessage('Ôpa, ocorreu um erro ao inserir um registro em Rateios! Veja: ' + E.Message);
end;
end;
result:= alx_boo_apoio;
end;
//==============================================================================
function Talx_frm_sgc_lancamentos_receitas.alx_int_Pegar_Rateios_Novo_Id(): Integer;
var
alx_str_sql_text: TStrings;
alx_int_apoio : Integer;
begin
try
alx_str_sql_text:= TStringList.Create();
alx_str_sql_text.Add('SELECT MAX(RATEIO_ID) FROM RATEIOS ');
self.ADOQuery_Apoio.Active:= False;
self.ADOQuery_Apoio.SQL.Clear();
self.ADOQuery_Apoio.SQL:= alx_str_sql_text;
self.ADOQuery_Apoio.Active:= True;
//-----------------
alx_int_apoio:= self.ADOQuery_Apoio.Fields[0].AsInteger + 1;
self.ADOQuery_Apoio.Active:= False;
//-----------------
except
on E: Exception do begin
alx_int_apoio:= 0;
showmessage('Ôpa, ocorreu um erro ao buscar o novo código para um Rateio! Veja: ' + E.Message);
end;
end;
result:= alx_int_apoio;
end;
//==============================================================================