Fórum Declaração de variaveis.... Como adaptar melhor? #227704
23/04/2004
0
Bom dia Amigos....
Veja se podem me ajudar...
Estou desenvolvendo um sistema, utilizando herança, e estou tentando ao máximo parametriza-lo para ficar com o codigo o mais objetivo possivel.
Tenho uma unit que centraliza todos os procedimentos relacionados a dados, tais como: Atualização do Banco de Dados, Validação de campos em branco, Localização de dados, enfim..... Está tudo centralizado nesta unit, de forma que eu declaro ela na use dos forms(Pai) da herança, então todos os forms filhos tem acesso a ela. Isso é ótimo no sentido de que o codigo fica praticamente todo parametrizado e quando preciso fazer uma chamada as procedures, basta passar os parametros e pronto, tá tudo resumido.
Acontece que nesta unit eu uso as mesmas variaveis em diversas procedures, tal como, o parametro que indica o nome da query em uso no momento da chamada a procedure.
Então estas variaveis ficam declaradas como globais na unit.
O problema é que devido a esta logica de programação estou tendo que declarar muitas variaveis nesta unit (como globais), e estou com receio que isso possa me dar problemas futuros.
Vejam abaixo o inicio da unit e a declaração das variaveis: O que me preocupa, são a quantidade de variaveis.
//**** Esta Unit centraliza procedimentos relacionados a Dados - Abertura e Manipulação
unit Procs_Dados;
interface
uses
DBClient, DB, StdCtrls, Forms, DbGrids, Buttons, DBXpress, Dialogs, SqlExpr, SysUtils,
Windows,ExtCtrls;
//Atualiza fisicamente informações no Banco de Dados - Isolamento Transacional
procedure AtualizaBanco(var DataSetA: TClientDataSet; TypeOp: Byte);
//Gera autoincremento em cadastros
procedure AutoInc(Tabela: String; Campo: TIntegerField);
//Gera o autoincremento para exibir ao usuario no campo codigo - Para não ficar em branco durante o cadastro
procedure AutoIncTela(Tabela: String; Campo: TEdit);
//Abre CDS para localizacao e manipulação de registros
procedure AbrirCDS(Codigo: Integer; DataSet: TClientDataSet; E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11 : TEdit;
Cbx1,Cbx2,Cbx3,Cbx4,Cbx5,Cbx6,Cbx7,Cbx8,Cbx9,Cbx10 : TComboBox;
cpo1_i : TIntegerField;
cpo1_s,cpo2_s,cpo3_s,cpo4_s,cpo5_s,cpo6_s,cpo7_s,cpo8_s,cpo9_s,cpo10_s : TStringField);
//Procedimento para passagem de dados dos edit´s dos forms aos TFields das tabelas
procedure PassaDados(DataSet_Atual: TClientDataSet;
E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11 : TEdit;
Cbx1,Cbx2,Cbx3,Cbx4,Cbx5,Cbx6,Cbx7,Cbx8,Cbx9,Cbx10 : TComboBox;
Ch_E1, Ch_E2, Ch_E3, Ch_E4 : Integer;
cpo1_i,cpo2_i,cpo3_i,cpo4_i,cpo5_i: TIntegerField;
cpo1_s,cpo2_s,cpo3_s,cpo4_s,cpo5_s,cpo6_s,cpo7_s,cpo8_s,cpo9_s,cpo10_s : TStringField);
//Inicializa variaveis e parametros para posterior recebimento de dados no show dos forms de cadastros heranca
procedure InicializaParametros;
var
{****** Variaveis usadas como parametros em chamdas nos forms de cadastros. Os valores
são setados no show dos forms filhos e utilizadas na Heranca (procedimentos chamados via parametros) ****}
Atual_DataSet : TClientDataSet; // Utilizada para setar o nome do CDS para busca direta via codigo - btnLocCodigoClick(pai) na chamada feita nos mesmos esta variavel guarda o nome que é citado na heranca para executar a procedure de abertura dos CDS
Tabela : String; // Usado na procedure AutoIncTela para gerar o incremento do codigo no edit CODIGO do Form para o usuario ver - Senão fica em branco
NomeForm : TForm; // Nome do form filho - Será utilizado nos processos - HabilitaBotao - OnShow(Pai)
Achou : Boolean; // Variavel que traz o resultado de uma localização (AbridCDS - BtnLocCodigo)
SqlLocalizacao : String; // Instrução SQl passada à Query de Localização
GridAtual : TDBgrid; // DbGrid que será ativado no form de Localização
E1,E2,E3,E4,E5, // *** Inicio - Declaracao dos parametros
E6,E7,E8,E9,E10,
E11 : TEdit; //Edit´s para passagem e recebimentos de dados
Cbx1,Cbx2,Cbx3,
Cbx4,Cbx5,Cbx6,
Cbx7,Cbx8,Cbx9,
Cbx10 : TComboBox; //Combobox´s para passagem e recebimentos de dados
// ATENÇAO - Se aumentar o numero de variaveis para controle de chaves estrangeiras, não esquecer de atualizar todos processos de armazenamento de variaveis de apoio
// nos subcadastros - procedure carregavalores(). E tambem de criar mais variaveis de apoio como as da sequencia abaixo.
Ch_E1,Ch_E2, //Ch_E..., Var´s que Armazenam o codigo de lookups para gravacao em Chaves Estrangeiras
Ch_E3,Ch_E4 : Integer;
ApoioCh_E1,
ApoioCh_E2, //variaveis de apoio para chaves estrangeiras. No caso de no meio do cadastro principal, já tiverem algumas chaves estrangeiras armazenadas
ApoioCh_E3, //qdo se inicia um subcadastro as variaveis principais de armazenamento de chaves estranegiras são substituidas para efetuar os subcadastros
ApoioCh_E4 : Integer; //Para que não se perca o que já estava armazenado até o momento de acesso do subcadstro então usa-se estas variaveis. São acessadas para os armazenamentos na inicializacao de subcdastros
// *** fim do trecho de atencao
cpo1_i,cpo2_i, //Campos integer da tabela que receberao chave primaria e estrangeiras
cpo3_i,cpo4_i, //
cpo5_i : TIntegerField; //
cpo1_s,cpo2_s, //Campos String da tabela que receberao Strings de edit´s e outros
cpo3_s,cpo4_s, //
cpo5_s,cpo6_s, //
cpo7_s,cpo8_s, //
cpo9_s,cpo10_s : TStringField; // *** Fim - Declaracao dos parametros
Comp1_s, Comp2_s,
Comp3_s, Comp4_s, //CompN_s - Respeita uma tabela de componentes
Comp5_s, Comp6_s, //1 para edit, 2 para combobox ou 3 para origem de variaveis - Para testes na hora de acionar a proc. passadados()
Comp7_s, Comp8_s, //para saber de onde será extraida a propriedade text ou o conteudo para armazenamento dos dados
Comp9_s, Comp10_s : Integer;
vApoio1,vApoio2,
vApoio3,vApoio4,
vApoio5,vApoio6, // Variaveis usadas na procedure passadados() - Ligada as declaracoes acima - O conteudo para armazenamento nas variaveis usadas para
vApoio7,vApoio8, // passagem dos dados na procedure passadados podem vir de edits, combobs ou variaveis, no caso de variaveis serão usadas estas para guardar os valores para passagem
vApoio9,vApoio10 : String;
BtnNovo,BtnAlt,
BtnExc, BtnOk,
BtnCanc,BtnSair: TBitBtn; // Procedure IniciaNovoProcesso - Botoes para controle(TAG)
Grp1,Grp2 : TgroupBox; // Procedure IniciaNovoProcesso - GroupBox´s para habilitação e desabilitação
FocoInicial : TEdit; // Procedure IniciaNovoProcesso - Campo que receberá o foco após iniciar o novo processo
TituloForm_Loc : String; // Armazena o Titulo do Form de Localização do Cadastro Atual
Foto1 : TImage; // Armazena Imagens em Cadastros
Fone : Boolean; // Indicará se haverá controle de fone no cadastro
ModCad2_Inc,
ModCad2_Alt : Boolean; // Indicadores para cadastro (modelo2 - Ex: Fone) para indicar se está em inclusao ou alteração
XXCodigo : integer; // Codigo do cadastro em execução para chaves estrangeiras em subcadastros(modelo 2) Ex: Telefones
Identificacao : String; // Utilizado em conjunto com a var de cima - Guarda a string de identificacao
{****** Fim dos parametros para heranca entre forms de cadastros ****}
implementation
uses U_DtmDados;
*** continuação.. implementação das procedures....
Existe alguma forma de trabalhar melhor estas declarações de variaveis? Existe algum limite de variaveis? Esta quantidade de variaveis pode me dar problemas futuros?
Se puderem me ajudar ficarei muito grato.
Um grande abraço a todos.
Pablo - Marília/SP
Veja se podem me ajudar...
Estou desenvolvendo um sistema, utilizando herança, e estou tentando ao máximo parametriza-lo para ficar com o codigo o mais objetivo possivel.
Tenho uma unit que centraliza todos os procedimentos relacionados a dados, tais como: Atualização do Banco de Dados, Validação de campos em branco, Localização de dados, enfim..... Está tudo centralizado nesta unit, de forma que eu declaro ela na use dos forms(Pai) da herança, então todos os forms filhos tem acesso a ela. Isso é ótimo no sentido de que o codigo fica praticamente todo parametrizado e quando preciso fazer uma chamada as procedures, basta passar os parametros e pronto, tá tudo resumido.
Acontece que nesta unit eu uso as mesmas variaveis em diversas procedures, tal como, o parametro que indica o nome da query em uso no momento da chamada a procedure.
Então estas variaveis ficam declaradas como globais na unit.
O problema é que devido a esta logica de programação estou tendo que declarar muitas variaveis nesta unit (como globais), e estou com receio que isso possa me dar problemas futuros.
Vejam abaixo o inicio da unit e a declaração das variaveis: O que me preocupa, são a quantidade de variaveis.
//**** Esta Unit centraliza procedimentos relacionados a Dados - Abertura e Manipulação
unit Procs_Dados;
interface
uses
DBClient, DB, StdCtrls, Forms, DbGrids, Buttons, DBXpress, Dialogs, SqlExpr, SysUtils,
Windows,ExtCtrls;
//Atualiza fisicamente informações no Banco de Dados - Isolamento Transacional
procedure AtualizaBanco(var DataSetA: TClientDataSet; TypeOp: Byte);
//Gera autoincremento em cadastros
procedure AutoInc(Tabela: String; Campo: TIntegerField);
//Gera o autoincremento para exibir ao usuario no campo codigo - Para não ficar em branco durante o cadastro
procedure AutoIncTela(Tabela: String; Campo: TEdit);
//Abre CDS para localizacao e manipulação de registros
procedure AbrirCDS(Codigo: Integer; DataSet: TClientDataSet; E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11 : TEdit;
Cbx1,Cbx2,Cbx3,Cbx4,Cbx5,Cbx6,Cbx7,Cbx8,Cbx9,Cbx10 : TComboBox;
cpo1_i : TIntegerField;
cpo1_s,cpo2_s,cpo3_s,cpo4_s,cpo5_s,cpo6_s,cpo7_s,cpo8_s,cpo9_s,cpo10_s : TStringField);
//Procedimento para passagem de dados dos edit´s dos forms aos TFields das tabelas
procedure PassaDados(DataSet_Atual: TClientDataSet;
E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11 : TEdit;
Cbx1,Cbx2,Cbx3,Cbx4,Cbx5,Cbx6,Cbx7,Cbx8,Cbx9,Cbx10 : TComboBox;
Ch_E1, Ch_E2, Ch_E3, Ch_E4 : Integer;
cpo1_i,cpo2_i,cpo3_i,cpo4_i,cpo5_i: TIntegerField;
cpo1_s,cpo2_s,cpo3_s,cpo4_s,cpo5_s,cpo6_s,cpo7_s,cpo8_s,cpo9_s,cpo10_s : TStringField);
//Inicializa variaveis e parametros para posterior recebimento de dados no show dos forms de cadastros heranca
procedure InicializaParametros;
var
{****** Variaveis usadas como parametros em chamdas nos forms de cadastros. Os valores
são setados no show dos forms filhos e utilizadas na Heranca (procedimentos chamados via parametros) ****}
Atual_DataSet : TClientDataSet; // Utilizada para setar o nome do CDS para busca direta via codigo - btnLocCodigoClick(pai) na chamada feita nos mesmos esta variavel guarda o nome que é citado na heranca para executar a procedure de abertura dos CDS
Tabela : String; // Usado na procedure AutoIncTela para gerar o incremento do codigo no edit CODIGO do Form para o usuario ver - Senão fica em branco
NomeForm : TForm; // Nome do form filho - Será utilizado nos processos - HabilitaBotao - OnShow(Pai)
Achou : Boolean; // Variavel que traz o resultado de uma localização (AbridCDS - BtnLocCodigo)
SqlLocalizacao : String; // Instrução SQl passada à Query de Localização
GridAtual : TDBgrid; // DbGrid que será ativado no form de Localização
E1,E2,E3,E4,E5, // *** Inicio - Declaracao dos parametros
E6,E7,E8,E9,E10,
E11 : TEdit; //Edit´s para passagem e recebimentos de dados
Cbx1,Cbx2,Cbx3,
Cbx4,Cbx5,Cbx6,
Cbx7,Cbx8,Cbx9,
Cbx10 : TComboBox; //Combobox´s para passagem e recebimentos de dados
// ATENÇAO - Se aumentar o numero de variaveis para controle de chaves estrangeiras, não esquecer de atualizar todos processos de armazenamento de variaveis de apoio
// nos subcadastros - procedure carregavalores(). E tambem de criar mais variaveis de apoio como as da sequencia abaixo.
Ch_E1,Ch_E2, //Ch_E..., Var´s que Armazenam o codigo de lookups para gravacao em Chaves Estrangeiras
Ch_E3,Ch_E4 : Integer;
ApoioCh_E1,
ApoioCh_E2, //variaveis de apoio para chaves estrangeiras. No caso de no meio do cadastro principal, já tiverem algumas chaves estrangeiras armazenadas
ApoioCh_E3, //qdo se inicia um subcadastro as variaveis principais de armazenamento de chaves estranegiras são substituidas para efetuar os subcadastros
ApoioCh_E4 : Integer; //Para que não se perca o que já estava armazenado até o momento de acesso do subcadstro então usa-se estas variaveis. São acessadas para os armazenamentos na inicializacao de subcdastros
// *** fim do trecho de atencao
cpo1_i,cpo2_i, //Campos integer da tabela que receberao chave primaria e estrangeiras
cpo3_i,cpo4_i, //
cpo5_i : TIntegerField; //
cpo1_s,cpo2_s, //Campos String da tabela que receberao Strings de edit´s e outros
cpo3_s,cpo4_s, //
cpo5_s,cpo6_s, //
cpo7_s,cpo8_s, //
cpo9_s,cpo10_s : TStringField; // *** Fim - Declaracao dos parametros
Comp1_s, Comp2_s,
Comp3_s, Comp4_s, //CompN_s - Respeita uma tabela de componentes
Comp5_s, Comp6_s, //1 para edit, 2 para combobox ou 3 para origem de variaveis - Para testes na hora de acionar a proc. passadados()
Comp7_s, Comp8_s, //para saber de onde será extraida a propriedade text ou o conteudo para armazenamento dos dados
Comp9_s, Comp10_s : Integer;
vApoio1,vApoio2,
vApoio3,vApoio4,
vApoio5,vApoio6, // Variaveis usadas na procedure passadados() - Ligada as declaracoes acima - O conteudo para armazenamento nas variaveis usadas para
vApoio7,vApoio8, // passagem dos dados na procedure passadados podem vir de edits, combobs ou variaveis, no caso de variaveis serão usadas estas para guardar os valores para passagem
vApoio9,vApoio10 : String;
BtnNovo,BtnAlt,
BtnExc, BtnOk,
BtnCanc,BtnSair: TBitBtn; // Procedure IniciaNovoProcesso - Botoes para controle(TAG)
Grp1,Grp2 : TgroupBox; // Procedure IniciaNovoProcesso - GroupBox´s para habilitação e desabilitação
FocoInicial : TEdit; // Procedure IniciaNovoProcesso - Campo que receberá o foco após iniciar o novo processo
TituloForm_Loc : String; // Armazena o Titulo do Form de Localização do Cadastro Atual
Foto1 : TImage; // Armazena Imagens em Cadastros
Fone : Boolean; // Indicará se haverá controle de fone no cadastro
ModCad2_Inc,
ModCad2_Alt : Boolean; // Indicadores para cadastro (modelo2 - Ex: Fone) para indicar se está em inclusao ou alteração
XXCodigo : integer; // Codigo do cadastro em execução para chaves estrangeiras em subcadastros(modelo 2) Ex: Telefones
Identificacao : String; // Utilizado em conjunto com a var de cima - Guarda a string de identificacao
{****** Fim dos parametros para heranca entre forms de cadastros ****}
implementation
uses U_DtmDados;
*** continuação.. implementação das procedures....
Existe alguma forma de trabalhar melhor estas declarações de variaveis? Existe algum limite de variaveis? Esta quantidade de variaveis pode me dar problemas futuros?
Se puderem me ajudar ficarei muito grato.
Um grande abraço a todos.
Pablo - Marília/SP
Pablo_lima
Curtir tópico
+ 0
Responder
Posts
23/04/2004
Beppe
Eu não sei se ajudará em algo, mas se substituir variaveis V1, V2, V3...VN por V: array[1..N], e usar loops no seu código, isto deve compactar um pouco seu código.
Para evitar problemas com variáveis globais, escolha nomes sempre significativos, e as mantenha inicializadas e integras. Se for o caso de uma variável depender de outra, oculte ambas(passe para implementation), e use funções para usar e definir os valores delas, assim evita etados inconsistentes.
Quando ao limite, pode até haver, mas deve ser bem alto.
Para evitar problemas com variáveis globais, escolha nomes sempre significativos, e as mantenha inicializadas e integras. Se for o caso de uma variável depender de outra, oculte ambas(passe para implementation), e use funções para usar e definir os valores delas, assim evita etados inconsistentes.
Quando ao limite, pode até haver, mas deve ser bem alto.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)