Posts
29/09/2015
Raimundo Pereira
var TABLE_TMP : TClientDataSet;
begin
TABLE_TMP := TClientDataSet.Create(Self);
TABLE_TMP.Close;
TABLE_TMP.FieldDefs.Clear;
TABLE_TMP.FieldDefs.add(´CODIGO´,ftInteger);
TABLE_TMP.FieldDefs.add(´NOME´,ftString,50);
TABLE_TMP.CreateDataSet;
end;
Rodrigo, boa tarde grande.
Nesse teu caso seria mais interessante você criar um tipo que implementa a classe DBSystem, por que essa alteração sendo realizada diretamente no componente pode acarretar algum erro por conta do restante do pacote distribuído que vai ser compilado. No caso o que te aconselho é criar um tipo mesmo, essa propriedade vai precisar ser preenchida no Form de tua aplicação ou pode ser preenchida em tempo de execução? Por que se for algo que realmente necessite ser preenchido no Form, realmente é mais interessante que um informação estática seja criada e apresentada durante a execução como uma mensagem, porém é mais interessante usar tipagem em caso que não precisamos colocar configuração em componentes, operações ou informações simples.
Bom Ronaldo, na minha aplicação eu tenho um controle que habilita ou não os campos quando em inclusão ou alteração. Criei um componente herdado do ClientDataSet e coloquei uma propriedade nova que é o modo de pesquisa. Dessa forma na própria tela de cadastro que é usado para incluir e alterar também uso para pesquisa(Filtro). A minha intensão é para cada campo mostrado na tela eu defino em tempo de projeto se permite inclusão, alteração ou pesquisa (se o campo só permite inclusão por exemplo, quando o usuário for fazer uma alteração, o campo em questão vai ser mostrado, mas vai está desabilitado). Hoje eu controlo com a propriedade tag, mas eu gostaria que ao adicionar fields(TStringField, TIntegerField etc) seja no ClientDataSet ou em uma Query, aparecesse no object inspector novas propriedades como (incluir, alterar, pesquisar) e aí definir se é true ou false. Ficaria mais intuitivo para o programador. Já vi isto ser feito, uma empresa em que trabalhei faz assim. Se alterar o Db.pas na classe TField pode funcionar , mas eu não sei como compilar este novo db.pas para que a IDE no Delphi passa a enxergar, ou se tem outra maneira. desde agradeço
Ok entendi direito agora. No caso se você já fez a alteração, no projeto que você alterou deve conter um arquivo com a extensão .groupproj, para compilar basta abrir esse arquivo pelo Delphi, irá aparecer uma tela pequena com os componentes daquele grupo listados, basta clicar duas vezes no componente que você alterou e clicar em construir ou clicar com o botão direito e executar a operação de construção, após isso basta clicar em instalar. Geralmente quando preciso fazer isso com algum componente proprietário da empresa onde trabalho, eu desinstalo o componente e depois realizo esse procedimento que descrevi.
Só continuando, se por acaso o Delphi em que você esteja trabalhando for o 7, só muda que a extensão do arquivo é .dpk e você terá que selecionar o o arquivo de pacotes que você fez a alteração. Pro exemplo fiz uma alteração gráfica e na pasta existem os arquivos core.dpk e design.dpk, o que eu vou ter que abrir e compilar é o design.dpk.
Não funcionou meu amigo. É que os TFields não são componentes. eles são mostrados quando você os adiciona dentro do tClientDataSet ou uma TQuery. O TClientDataSet aí sim, que é um componente, é fácil adicionar novas propriedades. O db.pas pertence ao delphi e não sei como modificá-lo. De qualquer forma muito obrigado mesmo!!
Boa tarde grande, realmente peço desculpa, não tinha percebido que o que você queria alterar era o TField, esse componente realmente não pode ser alterado, a compilação dele é diferente da dos componentes distribuídos por terceiros (instaláveis), no caso o que oriento a fazer é o mesmo que falei anteriormente, criar um tipo herdando do TField onde você poderá adicionar a propriedade que deseja e na hora de usar vc pode fazer um cast em execução do tipo que a query usa para esse tipo que você criou e trabalhar com ele. Peço desculpas novamente n]ao havia percebido onde seria realizada a alteração.
Que isso amigo, sem problemas, valeu mesmo