IBO - Como obter o máximo de Performance?

Delphi

12/03/2005

Olá Pessoal

Tenho uma aplicação onde trabalho com IBO x Firebird x Delphi 7
Utilizo o componente da Paleta IBOCore para acesso a base de dados:
TIB_Connection e TIB_Transaction.
Uso também os componentes TIB_Query e TIB_Datasource para acessar as
tabelas.

As perguntas são:
1->Como configurar as propriedades destes componentes para obter o
máximo de performance?
2->Quando utilizar o TIB_Cursor?
3->Qual a forma correta de abrir a conexão. Hoje eu utilizo a seguinte
forma dentro do Evento FormActivate.

if not dm.conexao.connected then
dm.conexao.connected :=true;
if not dm.qryclientes.active then
dm.qryclientes.active := true;

3.1->É aconselhável testar a conexão a cada form?
3.2->É preciso abrir/fechar as query´s a cada form, ou posso
deixá-las aberta até a saida do sistema?
3.3->Estas informações ( da query ) ficam em cache ou o há um
ponteiro aberto no banco dados?
3.4->Em qual evento é melhor fazer a abertura da query.

4->É possível trabalhar multi-camadas com IBO?
5->Qual a performance do IBO no acesso a uma base de dados remota (
internet )?
6->Como arrastar os campos para um form atrases do TIB_Datasource sendo
que este está em um Datamodule.
7->Qual exemplo de select usar? e porque?
7.1
SELECT E.CODCLI
, E.RAZAO
, E.CODMUNCOM
, A.DESCMUN
FROM CLIENTES E
LEFT JOIN MUNICIPIO A ON (A.CODMUN = E.CODMUNCOM)
7.2
SELECT E.CODCLI
, E.RAZAO
, E.CODMUNCOM
, (SELECT DESCMUN FROM MUNICIPIO WHERE CODMUN =
E.CODMUNCOM) AS DESCMUN
FROM CLIENTES E
8->Há alguma configuração adicional para rodar o firebird em uma máquina
com Windows 2003 Server? Achei que ficou mais lento, uma vez que o
servidor firebird estava instalado numa máquina com o XP SP2.

-----------------
Desculpem a quantidade de perguntas, mas é porque não estou conseguindo
fazer com minha aplicação rode satisfatoriamente, já que há momentos que
o programa não consegue abrir uma tabela com apenas 10.000, acessando
diretamente no servidor.

Reuber Abdias de Moura Junior.


Jubrovolski

Jubrovolski

Curtidas 0

Respostas

Silviogs

Silviogs

12/03/2005

Olá amigo

estou utilizando agora o 2005 com ZeosLib e FireBird, para min utilizar o zeos foi o que mais satisfatório dos componentes, além de ser free fornece acesso a outros tipos de banco. vai um emxemplo de conexão que desenvolvi.


crie um arq. ini dessa forma com o mesmo nome do exe.

EX: sistema.exe ---> sistema.ini

[SYSCONFIG]
DIRETORIO_RELATORIOS=
HOSTNAME=
DATABASE=D:\SISTEMAS\CARTORIO\DADOS\CARTORIOFB.GDB
USER=SYSDBA
PASSWORD=masterkey
PROTOCOL=firebird-1.5
CONFIGURACAO=
TELAFUNDO=TelaFundo.JPG
TELAPRINCIPAL=telapadrao.JPG
OPCAOMENSXP=0


crie uma unit com estas funções

procedure TSysConfig.CarregaArquivoIni;
var
Arq: TIniFile;
ListaAtributos: TStrings;
NovoNome: string;
i: Integer;
begin
ListaAtributos := TStringList.Create;
NovoNome := Copy(Application.ExeName, 1, Pos(´.EXE´, UpperCase(Application.ExeName)) - 1) + ´.ini´;
if not FileExists(NovoNome) then
ShowMessage(Format(´Arquivo ´¬s´ não foi localizado!´,[NovoNome]));
Arq := TIniFile.Create(NovoNome);
SysConfig := TSysConfig.Create;
Arq.ReadSectionValues(´SYSCONFIG´, ListaAtributos);
SysConfig.DIRETORIO_RELATORIOS := Arq.ReadString(´SYSCONFIG´,´DIRETORIO_RELATORIOS´,´´);
SysConfig.HOSTNAME := Arq.ReadString(´SYSCONFIG´,´HOSTNAME´,´´);
SysConfig.DATABASE := Arq.ReadString(´SYSCONFIG´,´DATABASE´,´´);
SysConfig.USER := Arq.ReadString(´SYSCONFIG´,´USER´,´´);
SysConfig.PASSWORD := Arq.ReadString(´SYSCONFIG´,´PASSWORD´,´´);
SysConfig.PROTOCOL := Arq.ReadString(´SYSCONFIG´,´PROTOCOL´,´´);
SysConfig.TELAFUNDO := Arq.ReadString(´SYSCONFIG´,´TELAFUNDO´,´´);
SysConfig.TELAPRINCIPAL := Arq.ReadString(´SYSCONFIG´,´TELAPRINCIPAL´,´´);
SysConfig.OPCAOMENSXP := Arq.ReadInteger(´SYSCONFIG´,´OPCAOMENSXP´,0);
Arq.Free;
ListaAtributos.Free;
end;

procedure TSysConfig.AbirConexao(Conexao: TZConnection; Config: TZQuery);
begin
Conexao.Connected := false;
Conexao.Database := SysConfig.DATABASE;
Conexao.HostName := SysConfig.HOSTNAME;
Conexao.User := SysConfig.USER;
Conexao.Password := SysConfig.PASSWORD;
Conexao.Protocol := Sysconfig.PROTOCOL;
Conexao.Connected := true;
AbrirQuery(Config, False);
Config.First;
// Sysconfig.COR_TEXTO_MENU := ADOQrySysConfig.FieldValues[´COR_TEXTO_MENU´].AsString;
// Sysconfig.COR_TEXTO_MODELO_NAV := ADOQrySysConfig.FieldValues[´COR_TEXTO_MODELO_NAV´].AsString;
FecharQuery(Config);

end;

procedure TSysConfig.FecharConexao(Conexao: TZConnection);
begin
Conexao.Connected := false;
end;


procedure AbrirQuery(Query : TZQuery; ForceReopen : Boolean);
begin
Query.Active := true;
if (Query.State <> dsInactive) and (ForceReopen) then
Query.Close;
if Query.State = dsInactive then
Query.Open;
end;

procedure FecharQuery(Query: TZQuery);
begin
if (Query.State <> dsInactive) then
Query.Close;
end;

no source do projeto inclua:

Application.Initialize;
SysConfig.CarregaArquivoIni; <<------aqui
Application.CreateForm(TFmMain, FmMain);
Application.CreateForm(TDM, DM);
SysConfig.AbirConexao(DM.Conexao,DM.QrySysConfig); <<----aqui
Application.CreateForm(TFLogon, FLogon);
FLogon.DSOperadorAcesso.DataSet := DM.QryOperador;
FLogOn.i := 1;
repeat
FLogon.ShowModal
until not FLogon.Ok;
if (Flogon.i = 4 ) or FLogon.Ok then
Application.Terminate;
Application.Run;

estas foram desenvolvidas para funcionar com qualquer base de dados que o zeos suporte.

caso queira usar MSQSL fica assim:

[SYSCONFIG]
DIRETORIO_RELATORIOS=
HOSTNAME=SERVIDOR
DATABASE=CLIENTES
USER=SA
PASSWORD=
PROTOCOL=mssql
CONFIGURACAO=
TELAFUNDO=TelaFundo.JPG
TELAPRINCIPAL=telapadrao.JPG
OPCAOMENSXP=0

Quando for abrir a tabelas faça no evento OnCreate do form:

AbrirQuery(QueryClientes,false);

para fechar:

FecharQuery(QueryClientes);


Um abraço


Silvio Guedes


GOSTEI 0
POSTAR