Olá, Obrigado pelas criticas, com certeza ajudam muito.
Mas vou explicar alguns detalhes. O framework utiliza o padrão DAO ou MODELO/GERENTE, então você não usa diretamente componentes como ado ou dbx, você cria os modelos e o framework se encarrega de montar baseado nas configurações do arquivo INI, embora você até possa acessar o dbx ou ado pelo gerente, mas não recomendo. A transparência do framework permite deixar você livre de qual componente suar, já que estou colocando os 2 padrões do delphi, mas nada impede de você alterar o gerente para usar o UniDac por exemplo. Outra vantagem é você trabalhar com componentes desconectados e liberando da memória o desnecessário, sempre criando e excluindo o objeto quando não usar mais. Outra vantagem é você trabalhar com objetos , utilizando padrões e definindo uma metodologia de desenvolvimento para seus projetos, ao invés de manipular componentes, você vai manipular objetos, como : - cliente.nome - mercadoria.valor - pessoa.data_nascimento - etc... Os códigos não são confusos, apenas IFs para saber se o grid tem item selecionado e depois vem: /////////////////////////// gMembro := TPRFWK_Membro.Create; gMembro.ID := 1; //substitui por um numero gMembro := gGR_Membro.obter(gMembro) as TPRFWK_Membro; //estou dizendo neste bloco que criei um objeto da minha classe de dominio "Membro", defini o atributo padrão "ID" para 1 e usei o gerente para obter este objeto pela chave "ID". //por padrão todas os modelos do dominio possuem o atributo "ID" (pode ser alterado na classe pai dos modelos) /////////////////////////// //////////////////////////////////// if (gMembro <> nil) then begin gMembro.nome := edNome.Text; gGR_Membro.alterar(gMembro); gMembro.Free; end; carregarGrid(); //aqui estou verificando se o valor retornado para meu objeto não está nulo, ou seja, se realmente encontrou o Membro pelo ID dele. Em seguida defino o nome do membro como o texto do edit e uso o gerente para alterá-lo e libero o modelo recebido da memória. //////////////////////////////////// Não vi complicação. E em nenhum momento me preocupei com componentes. Essa é a regra. Esqueça esse lance de componente, foque na orientação a objetos. Mais uma classe útil, é usada aqui: /////////////////////////// lTemp := MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('APLICACAO','titulo', ''); self.Caption := lTemp; //aqui eu estou usando uma classe do framework para obter do arquivo de configuração o TITULO da aplicação, mas em aplicações que tenho aqui, possuo trocentas configurações pelo INI, então ajuda bastante. /////////////////////////// Mais alguma dúvida? Em 31 de maio de 2010 09:09, Marcos Douglas <m...@delfire.net> escreveu: > > > 2010/5/30 Paulo Coutinho <pa...@prsolucoes.com <paulo%40prsolucoes.com>>: > > > Alguém testou? > > > > Tem alguma sugestão? > > > > Não testei, mas vi o código. > Se está buscando opiniões, espero que aceite as críticas construtivas > abaixo: > > - Não entendi porque o framework é para acesso a dados. Isso já temos > aos montes por aí. > - Existem várias classes praticamente sem código; ou elas são > desnecessárias ou imcompletas. > - Na classe TPRFWK_Gerente (sugiro utilizar nomes bem menores nas > classes e units) vc tem atributos do tipo TPRFWK_ClientDataSet e > TPRFWK_ADODataSet. Se o framework é para "acesso a dados de forma > transparente" vc não deveria "amarrar" a forma de conexão; nem todos > utilizam ClientDataSet. > - unit projeto_teste\UFrmPrincipal.pas possui códigos bem confusos: > procedure TFrmPrincipal.alterarItem; > begin > if (lvItens.ItemIndex > -1) then > begin > gMembro := TPRFWK_Membro.Create; > > gMembro.ID := StrToInt(lvItens.Items[lvItens.ItemIndex].Caption); > gMembro := gGR_Membro.obter(gMembro) as TPRFWK_Membro; > > if (gMembro <> nil) then > begin > gMembro.nome := edNome.Text; > gGR_Membro.alterar(gMembro); > gMembro.Free; > end; > > carregarGrid(); > end; > end; > > procedure TFrmPrincipal.excluirItem; > begin > if (lvItens.ItemIndex > -1) then > begin > gMembro := TPRFWK_Membro.Create; > > gMembro.ID := StrToInt(lvItens.Items[lvItens.ItemIndex].Caption); > gMembro := gGR_Membro.obter(gMembro) as TPRFWK_Membro; > > if (gMembro <> nil) then > begin > gGR_Membro.excluir(gMembro); > gMembro.Free; > end; > > carregarGrid(); > end; > end; > > procedure TFrmPrincipal.inicializar; > var > lTemp : String; > begin > //título > lTemp := > MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('APLICACAO', > 'titulo', ''); > self.Caption := lTemp; > > //conexão > //TSqlConnection ou TAdoConnection > gConexao := TPRFWK_Conexao.Create; > gConexao.vendorlib := > > MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('CONEXAO', > 'vendorlib', ''); > gConexao.libraryName := > > MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('CONEXAO', > 'libraryname', ''); > gConexao.criarConexao( > > MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('CONEXAO', > 'driver', ''), > > > MD_PRFWK_Utilidades.TPRFWK_Utilidades.obterInstancia().obterConfiguracao('CONEXAO', > 'nomeconexao', '') > ); > gConexao.conectar; > end; > > Sem manual e/ou exemplos claros, fica muito dificil o pessoal começar > a utilizar. > > Marcos Douglas > > -- Atenciosamente, Paulo Coutinho. Blog: www.prsolucoes.com/blog Site: www.prsolucoes.com Msn: pa...@prsolucoes.com Skype: paulo.prsolucoes Consultor Certificado Bindows [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html