Fórum Firebird 1.5 Super Server via Internet, qual Comp. usar? #280922
10/05/2005
0
Queria uma soluçao que seja relativamente, mais rápida que o IBX
Desde já agradeco
[]s
Fellipe H.
Titanius
Curtir tópico
+ 0Posts
10/05/2005
Faelcavalcanti
Gostei + 0
10/05/2005
Gandalf.nho
Gostei + 0
10/05/2005
Titanius
- Todas as minhas consultas (SQL), estão definidas, nunca uso select *, sempre seleciono os campos.
- O Transaction está ReadCommited.
- Estou usando o CDS para trazer uma consulta maior, com mais de 100 registros.
Quanto ao ZeeBeDee, ouvi falar nele, o que ele faz?
Vocês não veriam vantagem em mudar pra outro componente nao? senao o IBX... a, eu uso os componentes da paleta Interbase, acho que é IBX mesmo né? só pra confirmar..
Desde ja agradeco
[]s
Gostei + 0
10/05/2005
Faelcavalcanti
Do que se trata ????
Gostei + 0
10/05/2005
Bruno Belchior
Gostei + 0
10/05/2005
Gandalf.nho
O ZeBeDee é um túnel seguro para suas conexões via rede. Ele criptografa e compacta os pacotes de dados que passam pela conexão, ou seja, além de proteger os dados, tb melhora o tráfego na rede ao dimunuir o tamanho dos pacotes
Gostei + 0
10/05/2005
Titanius
[]s
Gostei + 0
10/05/2005
Faelcavalcanti
No caso o [b:04699380af]CDS[/b:04699380af] seria o [b:04699380af]ClientDataSet[/b:04699380af], aí a performace seria menor.
Agora para resolver este probleminha de componente estive fazendo o seguinte. Fiquei vários dias chateado por uma questão de componente e pretendi isolar, de certa forma essa amarração.
Vocês já ouviram falar do [b:04699380af]Hibernate[/b:04699380af] em Java, usava uma idéia quase parecida, em que você teria métodos a respeito dos campos ou atributos de uma determinada classe.
Apesar de parecer meio trabalhoso o único trabalho sujo ter que replicar toda vez uma novo campo a nova lista. Para ser mais direto utilizei o tipo do delphi [b:04699380af]Record[/b:04699380af], em que associei a um tipo e daí envio a uma função solicitada no momento.
Por exemplo, tenho a seguinte tabela abaixo:
Toda vez que eu quiser no delphi consultar um novo cliente de uma certa empresa terei que criar um query ... parara .... parara .... lá se vai mais tempo.
O que fiz foi o seguinte simplesmente criei uma unit chamada de [b:04699380af]Map[/b:04699380af] apenas para declarar os campos contidos em determinadas tabelas envolvidas naquele projeto como por exemplo abaixo a unit que declarei:
unit UMap; interface type // produtos TRecProduto = Record ID_PRODUTO_PK : Integer; // código do produto ID_GRUPO_PRODUTO_FK : Integer; // código do grupo DESCRICAO : String; // descrição do produto DESCRICAO_SIMPLIFICADA : String; // descrição simplificada do produto ID_UNIDADE_VENDA_FK : Integer; // código de unidade de venda QTDE_UNIDADE_VENDA : Integer; // qtde. referente à unidade PESO_BRUTO : Double; // PESO_LIQUIDO : Double; // ... CUSTO_ENTRADA : Double; COMISSAO : Double; ISENTO : String; ICMS : Double; ICMS_ESTADO : Double; ICMS_FORA_ESTADO : Double; DATA_ULTIMA_COMPRA : TDateTime; DATA_ULTIMA_VENDA : TDateTime; ID_UNIDADE_COMPRA_FK : Integer; CUSTO_CONTABIL : Double; CODIGO_TRIBUTACAO : Integer; PERCENTUAL_VENDA : Double; ID_FORNECEDOR : Integer; QTDE_UNIDADE_COMPRA : Integer; LOTE : String; end; implementation end.
Pronto criei uma unit para declarar os campos contidos em determinadas tabelas contidas em um Database. Posteriormente criei mais uma unit de apoio ao sistema chamada de [b:04699380af]Helper[/b:04699380af]. Nela irei declarar apenas os métodos para acesso a banco de dados como por exemplo:
unit UHelper;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Dialogs, SqlExpr, UMap, DB, Printers, SqlTimSt, ComCtrls;
type
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
TViewHelper = Class(TObject) { Package declarations }
Qry_Aux : TSQLQuery;
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
private { Private declarations }
//
protected
//
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
public { Public declarations }
// variáveis de reconhecimento
function f_Produto_Atributos (v_CodProduto : Integer) : TRecProduto;
end;
var
Helper : THelper;
//******************************************************************************
implementation
{ THelper }
function THelper.f_Produto_Atributos(v_CodProduto: Integer): TRecProduto;
const c_SQL_Produtos : String = ´SELECT * FROM PRODUTOS WHERE CODPRODUTO = :PCODPRODUTO´;
var
Qry_Aux : TSQLQuery;
Rec_Produto : TRecProduto;
begin
Qry_Aux := TSQLQuery.Create(Nil);
Qry_Aux.SQLConnection := DMServidor.SQLConnection1;
try
Qry_Aux.SQL.Add(c_SQL_Produtos);
Qry_Aux.Open;
if not Qry_Aux.IsEmpty then begin
Rec_Produto.DESCRICAO := Qry_Aux.FieldByName(´DESCRICAO´).AsString;
Rec_Produto.QTDE_UNIDADE_VENDA := Qry_Aux.FieldByName(´DESCRICAO´).AsInteger;
// ....
// ´todos os campos declarados como acima, não coloquei os outros por preguiça :^)
// ....
Result := Rec_Produto;
finally
FillChar(Rec_Produto, SizeOf(Rec_Produto), 0);
Qry_Aux.Free;
end;
end;
Pronto agora se eu quiser saber qualquer informação sobre algum determinado produto a partir da chave primária seria somente fazê-lo:
var Rec_Produto : TRecProduto; begin Rec_Produto := Helper.f_Produto_Atributos; ShowMessage(Rec_Produto.DESCRICAO); FillChar(Rec_Produto, SizeOf(Rec_Produto), 0); // limpando objeto record end;
Pronto o código acima poderia ser implementado em qualquer parte do produto para que facilite e agilize na hora de nossas implementações. Eu poderia também ter feito uma classe para escolher qual o componente que eu iria trabalhar de acordo com o banco de dados utilizado. Aí no caso dependerá do projeto. Apenas fiz uma mera ilustração do que venho tentando fazer e padronizar para acelerar o desenvolvimento. E também aguardo opniões e/ou críticas. :roll:
:wink:
Espero ter ajudado!
Gostei + 0
10/05/2005
Titanius
Gostei + 0
10/05/2005
Faelcavalcanti
Gostaria de deixar claro que a intenção no caso seria de debater o que estou propondo em retirar no caso a forma de toda vez ter que modificar um componente e também modificá-lo no sistema. Neste caso aí, já teríamos 2 camadas. Qualquer dúvida estarei por aqui apesar do tempo ser pouco! :wink:
Gostei + 0
10/05/2005
Faelcavalcanti
Quase isso, na verdade o framework do delphi não possui um boa implementação quanto a Coleções, tá certo que eu poderia criar outras listas não sei quanto a performace perderia ou ganharia em utilizar o Record mais o que gostaria de passar seria a separação entre implementações do componente, ou seja, você teria um meio padronizado em receber os dados e lá dentro o cara se preocupa em utilizar o componente certo. Ok
Gostei + 0
10/05/2005
Titanius
ele eh melhor pra isso? se for o que eu posso usar pra conexao?
[]s
Gostei + 0
10/05/2005
Michael
Por que vc não usa definitivamente dbExpress? Não seria a solução mais indicada para uma aplicação deste porte?
Abraços!
Gostei + 0
10/05/2005
Faelcavalcanti
Olha amigo, acho que seria mais viável você identificar aqui como teria de se comportar o seu projeto proposto, de forma que possamos definir um tipo de arquitetura e/ou banco de dados e etc. que seja eficaz e eficiente com o seu objetivo. Por exemplo quando se fala em componentes, banco de dados, utilização em camadas pode-se ficar meio perdido em alguns aspectos de forma que o código não fique conciso, ou seja, poderá existir pouca reutilização. Você já ouviu falar em [b:a964d71c49]design patterns[/b:a964d71c49], apesar de poucos existem alguns aplicados ao delphi e a maioria vêm dos existentes e propostos pela SUN, a microsoft está copiando isto também, existe um site muito legal da [url=http://www.oodesign.com.br/]OODesign[/url]. Você poderia propôr outro tópico ou tentar definir as suas necessidades em geral para que possamos chegar a um concesso. Ok!
:wink:
Qualquer coisa estamos por aqui!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)