Um conhecimento só é válido quando compartilhado.

quarta-feira, 19 de outubro de 2016

ORMBr - Criando Lookup Field

No delphi desde sempre existiu o lookup field, e como não podemos deixar no ORMBr podemos criar lookup field de forma simples, é o que vamos mostrar nesse artigo de hoje.
No nosso modelos teremos uma propriedade que receberá o ID da tabela lookup, ficando assim o exemplo:
   
    ...
    [Column('detail_lookup_id', ftInteger)]
    [Dictionary('detail_lookup_id','Mensagem de validação','','','',taCenter)]
    property detail_lookup_id: Integer Index 0 read Flookup_id write Flookup_id;
    ...
Continuando, teremos a tabela que irá receber o ID da tabela lookup que vou representa-la pela variável oDetail, ela é quem terá a propriedade acima no seu modelo.
Também teremos a tabela lookup, que mostrará todos os seus registros para que possamos selecionar um, vou representa-la pela variável oLookup, ficando assim o exemplo:
    ... 
    var
      oLookup: IContainerDataSet< tlookup >;
      oDetail: IContainerDataSet< tdetail >;
    begin
      oDetail := TContainerClientDataSet< tdetail >.Create(oConn, CDSDetail);
      oLookup := TContainerClientDataSet< tlookup >.Create(oConn, CDSLookup);
      oDetail.DataSet.AddLookupField('lookup_field',
                                     'detail_lookup_id',
                                     oLookup.DataSet,
                                     'lookup_id',
                                     'lookup_description');
      ...
Observe que as variáveis oDetail e oLookup, foram instanciadas recebendo dois parâmetros, de conexão e um TClientDataset para fazer cache, até ai normal como já mostrado em outro artigo. O segredo está aqui nessa linha:
  oDetail.DataSet.AddLookupField('lookup_field',
                                 'detail_lookup_id',
                                 oLookup.DataSet,
                                 'lookup_id',
                                 'lookup_description');
Como o campo ID será recebida pela tabela oDetail como falei acima, o campo lookup será criado nela, chamando o método AddLookupField, esse método receberá todos os parâmetros necessários para configurar um TField do tipo Lookup, os parâmetros são:
    
    procedure AddLookupField(AFieldName: string;
                             AKeyFields: string;
                             ALookupDataSet: TObject;
                             ALookupKeyFields: string;
                             ALookupResultField: string);
AFieldName: Nome para o TField campo; 
AKeyFields: Nome do campo que receberá o valor do campo que será definido em LookupKeyFields que virá da tabela lookup; 
ALookupDataSet: A variável que foi instanciada e terá os registros lookup, no nosso caso oLookup; 
ALookupKeyFields: Nome do campo chave que será o retorno da tabela lookup, para ser armazenado no AKeyFields; 
ALookupResultField: Nome do campo result para ser visualizado.

terça-feira, 11 de outubro de 2016

ORMBr - Criando um Mestre-Detalhe

Mais uma dica do ORMBr.
Vamos hoje demonstrar como criar um mestre-detalhe de forma simples e eficaz, usando o ORMBr.
1o Passo: Criar a conexão com já mostrado no post ORMBr - Como criar uma conexão ? 
2o Passo: Adiciona em seu form dois TClientDataSet (podemos usar o TFDMemTable), vou usar o TClientDataSet nessa dica, adicione também dois TDataSource, em seguida configure suas propriedades ligando cada um ao seu TClientDataSet.
3o Passo:
 Adicione na clausula USES, as units:
ormbr.dependency.injection.clientdataset,
ormbr.dependecny.interfaces,
ormbr.factory.dbexpress;  // <= Aqui a fábrica de conexão escolhida por você.
4o Passo: Crie os modelos do mestre e do detalhe, veja o demo que segue junto aos fontes caso tenha dúvida nesse passo. 
5o Passo: Defina duas variáveis do tipo IContainerDataSet<T>, onde <T> devem ser os tipos dos modelos criados para mestre e detalhe, veja o código exemplo: 
oMestre: IContainerDataSet<TMestre>;
oDetalhe: IContainerDataSet<TDetalhe>;
6o Passo: No Create do Form, instancie a variável oMestre definida, passando para ela a variável de conexão, e o TClientDataSet1 que foi adicionado no inicio, veja o exemplo: 
oMestre := IContainerDataSet<TMestre>.Create(oConn, ClientDataSet1);
7o Passo: Também no Create do Form, instancie a variável oDetalhe definida, passando para ela a variável de conexão, e o TClientDataSet2 que foi adicionado no inicio e um terceiro parâmetro informando quem é o objeto MESTRE, veja o exemplo: 
oDetalhe := IContainerDataSet<TDetalhe>.Create(oConn, ClientDataSet2, oMestre);
8o Passo: Abra a tabela, chamando o método Open, veja o exemplo: 

oMestre.DataSet.Open;
A partir desse ponto, o ORMBr gerencia todo o resto, como abrir, relacionar, excluir e fechar a tabela DETALHE automaticamente.

terça-feira, 27 de setembro de 2016

ORMBr - Select com paginação de registros.

Sabemos que banco de dados nenhum, conseguirá oferecer seus benefícios, em questão aqui sua velocidade de busca, se além de não for bem arquitetado, também for usado de forma incoerente, por um sistema mal projetado.

No ORMBr, temos o recurso de paginação para resolver isso, quando formos fazer um select de muitos registros, paginação é um recurso fundamental para que o sistema reflita a velocidade de retorno, o qual o banco de dados não faria sozinho, para definirmos esse recurso no ORMBr, usaremos um terceiro parâmetro na class de conexão.
// DBExpress de 10 em 10
oConnection := TFactoryDBExpress.Create(SQLConnection1, dnSQLite, 10); 

// ZeosLib de 50 em 50
oConnection := TFactoryZeos.Create(ZConnection1, dnSQLite, 50);

// FireDAC de 100 em 100
oConnection := TFactoryFireDAC.Create(FDConnection1, dnSQLite, 100);
Demostrei em cada tipo de fábrica que pode ser usado no ORMBr, um valor diferente, para ficar bem claro que você é quem decidirá a paginação desejada, trazendo assim agilidade nos selects de seu sistema, principalmente se seu cliente tenha uma rede precária.

segunda-feira, 26 de setembro de 2016

ORMBr - Como Incluir, Alterar e Excluir ?

Mais uma dica do ORMBr, vimos em um dos artigos escrito por mim sobre como criar uma conexão, para quem ainda não leu acesse ORMBr - Como criar uma conexão ?
Vamos hoje demonstrar o que temos que fazer para que possamos ter um DBGrid, onde nesse poderemos fazer Inclusão, Alteração e Exclusão de uma unica tabela no banco de dados, esse exemplo estará usando o recurso mais simples do ORMBr.
1o Passo: Criar a conexão com já mostrado no link como criar uma conexão.
2o Passo: Adiciona em seu form um TClientDataSet, (podemos usar o TFDMemTable), mas vou usar o TClientDataSet, pois este, está em todas as versões do Delphi desde a versão 3, adicione também um TDataSource, em seguida configure suas propriedades.
3o Passo:
Adicione na clausula USES, as units:
ormbr.dependency.injection.clientdataset,
ormbr.dependecny.interfaces,
ormbr.factory.dbexpress;  // <= Aqui a fábrica de conexão escolhida por você.
4o Passo: Crie seu modelo, como exemplo abaixo:
unit ormbr.model.client;

interface

uses
  Classes, 
  DB, 
  SysUtils, 
  Generics.Collections, 
  /// orm 
  ormbr.mapping.attributes, 
  ormbr.mapping.classes,
  ormbr.types.nullable,
  ormbr.types.lazy,
  ormbr.types.mapping,
  ormbr.mapping.register;

type
  [Entity]
  [Table('client','')]
  [PrimaryKey('client_id', 'Chave primária')]
  [Indexe('idx_client_name','client_name')]
  Tclient = class
  private
    { Private declarations }
    Fclient_id: Integer;
    Fclient_name: String;
    Fclient_name_: String;
  public
    { Public declarations }
    [Restrictions([NoUpdate, NotNull])]
    [Column('client_id', ftInteger)]
    [Dictionary('client_id','Mensagem de validação','','','',taCenter)]
    property client_id: Integer Index 0 read Fclient_id write Fclient_id;

    [Column('client_name', ftString, 40)]
    [Dictionary('client_name','Mensagem de validação','','','',taLeftJustify)]
    property client_name: String Index 1 read Fclient_name write Fclient_name;
  end;

implementation

initialization
  TRegisterClass.RegisterEntity(Tclient);

end.
5o Passo: Defina uma variável do tipo IContainerDataSet<T>, onde <T> deve ser o tipo do modelo que será usado, exemplo IContainerDataSet<Tclient>, veja o código exemplo:
oClient: TContainerClientDataSet<Tclient>;
6o Passo: No Create do Form, instancie a variável definida, passando para ela a variável de conexão criada, e o TClientDataSet que foi adicionado no inicio, veja o exemplo:
oClient := TContainerTClientDataSet<Tclient>.Create(oConn, ClientDataSet1);
7o Passo: Abra a tabela, chamando o método Open, veja o exemplo:
oClient.DataSet.Open;
Com esse código você já está hapto a Inserir, Alterar e Excluir registro no banco de dados, aqui vocês poderão pensar, o Delphi faz o mesmo até de forma mais simples, mas o diferencial está no modelo, pois se observarem, não pedi para adicionar TFields no TClientDataSet, os TFields adicionados em designer são um caos na vida do desenvolvedor para manutenção, e no ORMBr os TFields são adicionados em runtime, e todas as características de cada TFields é passada usando o atributo Dictionary() que os parâmetros são:
property ConstraintErrorMessage: string read FConstraintErrorMessage write 
FConstraintErrorMessage;
property DefaultExpression: string read FDefaultExpression write 
FDefaultExpression;
property DisplayFormat: string read FDisplayFormat write FDisplayFormat;
property EditMask: string read FEditMask write FEditMask;
property Alignment: TAlignment read FAlignment write FAlignment;
É isso ai, fiquem atentos e aguardem as próximas dicas.

sexta-feira, 23 de setembro de 2016

ORMBr Residência Fixa

É com muito orgulho e alegria que informo a todos vocês, que o ORMBr agora tem uma residência fixa e desde já, deixo meus agradecimentos a um  amigo em particular o Jeickson, que fez com que isso se tornasse uma realidade de forma rápida, sem medir esforços.

Nossa nova casa está no endereço : http://www.ormbr.com.br/



Graças a Deus o ORMBr está sendo muito bem recebido pela comunidade Delphi, tenho recebido inúmeras solicitações de amizade no Facebook, cadastros no fórum, entre outros contatos.

Também quero convocar a todos que fizeram seus cadastros no fórum http://ormbr.forumeiros.com/, que refaça seu cadastro, mas agora no fórum do site, o link do novo fórum é http://ormbr.com.br/forum/, conto com a compreensão e paciência de todos para essa repetição, mas o motivo foi porque o fórum atual não me disponibilizou a opção de fazer um backup e restaurar no novo. 

Em nome do projeto ORMBr, deixo aqui meus agradecimento também a todos que tem tirado uma parte do seu tempo para baixar os fontes, ler os posts e até mesmo de qualquer forma tentar ajudar, nosso fórum é e sempre será o meios para que possamos colocar nossas dúvidas, sugestões e discussões, la tentarei responder o quanto antes possível os posts de vocês.

Total de visualizações

Postagem em destaque

ORMBr - Mapeamento objeto-relacional

Mapeamento objeto-relacional ( ou ORM, do inglês: Object-relational mapping ) é uma técnica de desenvolvimento utilizada para reduzir...

Todo os direitos reservados.. Tecnologia do Blogger.

Seguidores