quinta-feira, 2 de agosto de 2012

002 - Utilizando Entity framework 4

Bom neste post, vamos criar nossa camada de dados que é continuação do post anterior , onde criamos nossa camada de domínio.

Vamos criar um projeto chamado ProjetoOne.CamadaDeDados, neste projeto vamos criar uma pasta "Consultas" e outra "Repositorios":



Nosso primeiro repositório é o RepositorioPessoa, herdando da nossa interface IPessoaRepository, criada no projeto ProjetoOne.Dominio.

A interface IPessoaRepository, implementa os métodos Save, Delete, GetById, GetAll, ExecuteQuery.

Com isso para cada repositório, teremos nossos métodos implementados de acordo com a entidade relacionada, conforme a imagem abaixo:




Veja no método Save eu instancio o contexto e verifico se o Id é igual a zero, com isso eu identifico que é um novo objeto, se não for zero , eu mudo a propriedade State para 
 EntityState.Modified , da minha entidade do contexto em questão;

Referente ao Id=0, eu atribuo na minha entidade Poco do meu Domínio, ou seja, para cada objeto criado , no construtor do objeto, eu atribuo Id=0; 


 
Após a verificação , para saber se meu objeto esta sendo adicionado ou alterado, eu chamo o SaveChanges(), enviando as informações para o banco de dados. Conforme a imagem abaixo:




Método Delete():
 


Método GetById()



GetAll()



ExecuteQuery() 

Bom por hoje é só, ate nosso próximo post.

quinta-feira, 26 de julho de 2012

001 - Utilizando Entity framework 4

Vamos criar um projeto do tipo Class Library chamado ProjetoOne.Dominio com a seguinte estrutura:

Dentro de uma pasta Models vamos criar uma classe chamada DatabaseOneContext.cs


Agora vamos criar uma classe chamada Poco.cs essa classe será abstract , no construtor sempre inicializo o Id como zero, e o campo Criado, como a data atual.



A inicialização do Id como zero, irá identificar se o objeto é um novo , ou é um objeto que esta sendo alterado.
Agora vamos criar nossa primeira entidade, Pessoa.cs herdando de Poco;


Vou criar uma pasta chamada Mapping, para criarmos a classe de mapeamento da entidade X banco de dados.
Nesta pasta, vamos criar uma classe de mapeamento para a entidade Pessoa

Agora vamos criar nosso repositório. Vamos criar uma pasta chamada Repository e dentro desta pasta , duas interfaces IRepository e IPessoaRepository







bom, com isso temos nosso projeto de domínio criado e pronto para criarmos nossa camada de dados.
Ate o próximo post.

terça-feira, 10 de julho de 2012

Alterando a propriedade SQLConnection no delphi em tempo de execução

Recentemente, tive uma necessidade de alterar a SQLConnection do banco de dados SQLServer em tempo de execução , em um sistema em delphi.
A necessidade era em um determinado momento consultar dados de um banco de dados em um outro servidor, e importar dados para a conexão atual. Em primeiro momento, pensei que seria simples, só trocar o valor;
  • SQLConnection.params.values['Database'] := 'bancox';
  • SQLConnection.params.values['HostName'] := 'Servidor1';
mas, não foi tão simples assim...

depois de algum tempo , cheguei na seguinte solução:

Criei um novo componente NovoSQLConnection, e instancio juntamente com meu SQLConnection.

Criei uma procedure passando por parametro um TComponet , que retorna um objeto TSQLConnection; com o objetivo de , dentro da procedure e percorrer todos os componentes do objeto passado, trocando a sqlconnection para a nova conexão.

Ex: para um DataModule ( DmImportacao ) , tenho query's responsaveis pela importação de dados que pretendo realizar.
a função ficou :

procedure AlterarSqlConnection(Componente:TComponent);
var
  i:integer;
begin
  { percorrer todos os componente , e alterar somente os do tipo TSQLQuery }
  for i:= 0 to Componente.ComponentCount -1 do
    begin
      if (Componente.Components[i] is TSQLQuery) then
        TSQLQuery(Componente.Components[i]).SQLConnection :=NovoSQLConnection;
    end;

  end;
end;

Com a função acima, consegui alterar a SQLConnection, no momento que preciso buscar dados de outra conexão. assim é possivel alternar a conexão , sem fechar o sistema.

domingo, 8 de julho de 2012

Delphi - ClientDataSet gravação em xml


Utilizando o componente ClientDataSet para gravar e recuperar dados via XML.
Primeiramente, selecione na aba Data Access, inclua um componente ClientDataSet no formulário.


Clicando com o botão direito sobre o componente ClientDataSet
Adicione os campos selecionando a opção Fields Editor...



Em seguida, selecione New Field...  
adicione todos os campos, informando o nome e o Tipo do campo
 



Agora, clique com o botão direito no clientdataset e selecione Create Dataset

Para incluir os campos criados no formulário, você pode selecionar todos os campos e arrastar para o formulário, automaticamente os campos já estarão ligados ao datasource

Agora vamos incluir um DBGrid, na aba Data Controls.
Inclua também um componente DBNavigator, para a manipulação e navegação dos dados, não esqueça de ligar ao dataSource faça a ligação do DBGrid ao DataSource1


Clique uma vez no ClientDataSet em seguida, Duplo clique no evento AfterPost é neste evento que vamos salvar o arquivo .XML, que irá armazenar os dados.
No Evento OnCreate do Formulário vamos ler o arquivo .XML
Na primeira vez, que executarmos, o arquivo não existirá, portanto, vamos verificar caso não exista , vamos criar.
 
Pronto, agora é só testar, incluindo alguns dados.


video aula disponível em https://vimeo.com/45411385


até ao proximo post.