Session - explanacao |
Top Previous Next |
|
TSESSION Quando o Delphi acessa uma base qualquer ele cria automaticamente um componente do tipo TSession com o nome Session. mesmo que voce nunca tenha ouvido falar nele. ele sempre esteve presente nas suas aplicacoes.
Atravez do componente TSession o Delphi controle um conjunto de conexoes a uma base de dados. normalmente apenas um componente TSession e' o suficiente para uma aplicacao. mas existem casos em que uma aplicacao necessita de caracteristicas especiais para o controle do acesso.
Nestes casos um desenolvedor pode utilizar quantos componentes TSession julgar necessarios. cada componente TSession seria utilizado para o controle de acesso a uma base. nao necessariamente do mesmo tipo. podemos acessar indistintamente uma base Paradox. Oracle. Dbase. Interbase. etc ...
O componente TSession disponibiliza diversas propriedades para controle da conexao. sao elas :
PrivateDir Atravez da propriedade PrivateDir estabelecemos onde serao criadas as tabelas temporarias criadas pelo BDE quando necessario. Normalmente esta e' uma propriedade que deveria ser definida em tempo de execucao. procedendo desta forma o desenolvedor pode definir um diretorio local na maquina do usuario. existe um ganho de performance muito grande com este procedimento. como todas as tabelas temporarias sendo criadas localmente o tempo de acesso e' extremamente reduzido facilitando todo o trabalho da sua aplicacao.
Contudo a propriedade PrivateDir pode ser definida em tempo de desenvolvimento. uma vez que e' uma propriedade published de TSession.
No caso de nao definir o PrivateDir manualmente sera considerado o PrivateDir definido no momento da inicializacao do BDE.
No caso de uma aplicacao ter o seu executavel compartilhado em uma rede o diretorio atual da aplicacao sera considerado o PrivateDir desta aplicacao.
Se diversos componentes TSession forem utilizados cada um devera ter o seu PrivateDir especificado.
NetFileDir Assim como PrivateDir a propriedade NetFileDir pode ser definida em tempo de desenvolvimento. por ser published. ou em tempo de execucao.
NetFileDir define onde sera acessado o arquivo de controle PDOXUSRS.NET, tambem conhecido como "Net File". este arquivo e' necessario para o controle de compartilhamento de todos os usuarios.
Alguns cuidados sao necessarios para a correta utilizacao e configuracao desta propriedade de TSession. no caso de uma definicao em tempo de execucao e' importante que este diretorio esteja devidamente compartilhado na rede e que todos os usuarios tenham direitos para manipular e alterar o arquivo.
Como este parametro e' relativamente estatico podemos defini-lo tranquilamente em tempo de desenvolvimento ou em tempo de execucao.
Existem dois pontos importantes que devem ser observados quanto a utilizacao do NetFileDir.
1 - Nao podemos alterar o valor de NetFileDir quando existir alguma tabela aberta. 2 - NetFileDir e PrivateDir nao podem apontar para o mesmo diretorio 3 - Se uma tabela for aberta por um usuario. esta tabela so podera ser aberta por outro usuario que apontar para o mesmo NetFileDir caso contrario uma execption sera gerado "This File is Controled By Another Net File". Keepconnections A propriedade KeepConections e' do tipo Boolean e define como um componente TDatabase devera devera administrar uma conexao quando nenhum Dataser estiver aberto.
Com KeepConections definido como True. um componente TDatabase devera manter a conexao com a base de dados mesmo que nenhum dataset estiveja ativo no momento.
Com KeepConections definido como False. sempre que todos os datasets forem fechado a conexao e' encerrada automaticamente.
O default para a propriedade KeepConections e' true. assim sendo a conexao com a base de dados so' precisa ser feita uma unica vez. assim mesmo que sua aplicacao venha a fechar todos os datasets abertos a conexao com a base sera mantida.
Este default existe apenas para facilitar o trabalho de controle da aplicacao que normalmente e' atribuido ao desenvolvedor. na verdade o fato de ser mantida uma conexao sem que nenhum dataset esteja realmente sendo utizado consome recursos do equipamento.
Quando o pessoal da Borland/Inprise deixou o KeepConections como true indiretamente eles estao assumindo que o montante de recursos que sao alocados pela sua aplicacao em virtude da conexao nao ser encerrada nao representa uma quantidade significando. assim optou-se por colocar a facilidade de nao ter de controlar quando a conexao esta no ar ou nao privilegiando o desenvolvedor. SQLHourGlass SQLHourGlas e' uma propriedade do tipo Boolean que define se o cursor sera alterado para a ampulheta durante as operacoes do BDE. Assim se SQLHourGlass estiver definido como true a ampulheta sera utilizada como cursor do mouse sempre que o BDE estiver executando operacoes para a base de dados. caso SQLHourGlass esteja como false o cursor nao sera alterado. ConfigMode ConfigMode define como a configuracao de Aliases dentro do BDE sera utilizada para a sessao atual. ConfigMode nao esta disponivel em tempo de desen volvimento assim sendo nao devera estar disponivel dentro o ObjectInspector.
A propriedade ConfigMode so deve afetar os aliases criados com os metodos AddAlias ou AddStandardAlias.
Os valores possiveis para ConfigMode:
cfmVirtual - Todos os aliases criados dentro do BDE e os aliases criados locais a sessao estao disponiveis cfmPersistent - Os aliases definitivamente gravados dentro do BDE e os aliases criados localmente a sessao mas adicionados ao armazenamento permanente estao disponiveis. cfmSession - Apenas os Aliases criados localmente a sessao estao disponiveis para a sessao.
ConfigMode normalmente nao e alterado. o motivo principal talvez seja o proprio desconhecimento do que a propriedade pode fazer. o valor default para ConfigMode e cfmVirtual. assim sendo todos os aliases cadastrados no BDE. os aliases permanentes criados em tempo de execucao e os aliases nao permanentes estao disponiveis a aplicacao.
Como existem diversas formas diferentes da sua aplicacao interagir com o BDE e todos os controles disponiveis devemos utilizar a propriedades Config Mode com um certo criterio. Diversos desenvolvedores optam por armazenar a configuracao de acesso a base de dados de seu aplicativo dentro de uma base de dados do proprio sistema. assim toda a configuracao e estabelecida pelo proprio aplicativo quando da inicializacao.
Observando por este aspecto a configuracao ideal seria cfmSession. assim a aplicacao teria o total controle dos aliases. inclusive independente se existirem outros aliases ja definidos. TraceFlags TraceFlags e uma propriedade do tipo Set ( Conjunto ) com um ou mais valores possiveis que especificam quais operacoes de banco de dados o SQL Monitor devera analisar para o componente TSession.
Normalmente TraceFlags com o SQL Monitor sao utilizados durante a fase de otimizacao das Querys do aplicativo. certamente nao sao todos os desenvolvedores que fazem esse tipo de trabalho mas e' extremamente importante em aplicativos Cliente Servidor.
Os valores possiveis para TraceFlags sao :
tfQPrepare - As instrucoes de Prepare serao monitoradas tfQExecute - As instrucoes de ExecSQL serao monitoradas tfError - As mensagens de Erro do servidor serao monitoradas. o servidor podera enviar codigos de erro dentro destas mensagens tfStmt - Todas as instrucoes SQL serao monioradas tfConnect - As operacoes de conexao e desconexao com a base de dados serao monitoradas. inclusive alocacao e liberacao dos handles necessarios para cada conexao. tfTransact - As instrucoes referentes as transacoes serao monitoradas. sao elas StartTransaction. Commit e Rollback tfBlob - As operacoes que envolvam tipos de campo blob serao monitoradas tfMisc - Monitora qualquer operacao que nao estejam cobertas pelas outras opcoes de TraceFlags tfVendor - As chamadas diretas a API do banco de dados serao monitoradas tfDataIn - Os dados recebidos do servidor serao monitorados tfDataOut - Os dados enviados ao servidor serao monitorados
Normalmente utilizamos estes valores para analisar um SQL que por ventura esteja demasiadamente lento. afim de otimizar processos ou a modelagem da base de dados. Evento OnStartUp O evento OnStartUp e' especialmente interessante para estabelecer a configuracao inicial do nosso componente TSession e de propriedades estrategicas de outros componentes de base de dados. isto ocorre porque o Evento OnStartUp e' disparado antes de um OnLogin do TDatabase por exemplo.
Se o componente TSession e o componente TDatabase estiverem inativos qualquer demanda de uma conexao a base de dados sempre devera ativar o componente TSession primeiro. sendo assim OnStartUp sempre sera chamado em primeiro lugar.
Se estivermos utilizando apenas o componente default. criado automaticamente pelo Delphi. o evento OnStartUp devera ser associado ao seu correspondente evento em tempo de execucao.
O evento OnStartUp sempre sera disparado quando a propriedade Active do seu componente TSession for definido como True. Metodo AddaAlias AddAlias cria um novo BDE alias em tempo de execucao para ser utilizado com um servidor de banco de dados para a sessao atual.
AddAlias necessita de tres parametros para ser utilizado. sao eles :
Nome - Nome do Alias sendo criado Driver - Driver que sera utilizado por este novo Alias. obrigatoriamente este driver tem de ter sido previamente instalado e configurado Parametros - Um stringlist com todos os parametros para este novo alias, sempre um parametro por linha dentro do stringlist
Apenas os componentes conectados a TSession poder utilizar o Alias criado com AddAlias.
Para criar um Alias dinamicamente utilize o seguinte codigo ...
procedure TForm1.AddLocalAlias; var AliasInfo: TStringList; begin AliasInfo :- TStringList.Create; try with AliasInfo do begin Add('SERVER NAME-C:\CSBASE\ARQUIVO1.GDB'); Add('USER NAME-SYSDBA'); end; Session1.AddAlias('DelphiCSBASE'.'INTRBASE'.AliasInfo); finally AliasInfo.Free; end; end;
No exemplo acima criamos um novo alias temporario chamado DelphiCSBASE que deve utilizar o driver do Interbase ( INTRBASE ) e todos os parametros relacionados em AliasInfo. foram definidos aPenas dois parametros SERVER NAME que aponta para o arquivo "C:\CDBASE\ARQUIVO1.GDB". obviamente um arquivo do Interbase. e USER NAME que recebeu SYSDBA que e' o user padrao da instalacao do Interbase.
Este procedimento ao ser executado devera criar o Alias. entao ele estara disponivel para que a aplicacao possa utilizado. podemos criar quantos Aliases julgarmos necessarios devemos apenas tomar o cuidado de nao tentar criar o mesmo alias duas vezes. um erro ate' comum.
Se tentarmos criar o mesmo alias duas vezes. ou dois aliases com o mesmo nome uma exeception devera ocorrer "Name not unique in this context." observe como esta mensagem de erro e' sutilmente correta. ela esta informando que o nome de alias que estamos tentando utilizar ja existe no contexto atual. esta mensagem e' mostrada desta forma porque o alias criado com o metodo AddAlias nao esta definitivamente gravado no BDE. para isso devemos usar SaveConfigFile. mas esta presente no momento dentro do contexto de trabalho da sua aplicacao.
Para evitar que este erro ocorra devemos deletar o Alias antes de tentar cria-lo novamente. para isso devemos usar o comando DeleteAlias. Metodo DeleteAlias DeleteAlias apaga um alias presente na sessao atual. isso por si so nao quer dizer realmente que o alias foi apagado. para garantir que um alias seja apagado definitivamente do BDE devemos usar SaveConfigFile.
DeleteAlias pode apagar um alias criado dentro do BDE ou um alias criado unicamente dentro da sessao atual.
DeleteAlias recebe um unico parametro que e' o nome do Alias que se deseja apagar. um alias que foi criado dinamicamente sera automaticamente destruido quando a aplicacao for encerrada.
Session1.DeleteAlias('DelphiCSBASE'); Metodo IsAlias Quando uma aplicacao necessita criar e apagar Aliases dinamicamente e' comum o desenvolvedor ter de verificar se um determinado Alias ja existe antes de usa-lo. ou simplesmente se ele nao existe para que seja devidamente criado antes de ser utilizado.
Em ambos os casos temos de determinar se um Alias deve ser criado. ou se ele ja existe.
Usamos IsAlias para isso. este metodo retorna um valor booleano que devera ser analisado da seguinte forma. se o valor for true quer dizer que o alias passado como parametro ja existe e nao deve ser criado novamente. se o valor retornado for false nao existe um alias com o nome passado como parametro.
Observe como devemos utilizar IsAlias em conjunto com DeleteAlias.
procedure VerificaDeleteAlias; begin If (Session1.IsAlias('DelphiCSBASE')) then Session1.DeleteAlias('DelphiCSBASE'); end; Metodo ModifyAlias Existem situacoes em que o desenvolvedor pode encontrar a necessidade de alterar algum parametro de um determinado Alias em tempo de execucao. embora um pouco raro tal caso pode ocorrer. sendo assim podemos utilizar o metodo ModifyAlias para esta finalidade.
ModifyAlias recebe dois parametros para funcionar corretamente. o um string com o nome do Alias que se deseja alterar e um TStrings com a lista do que se deseja alterar.
Obiamente nao podemos alterar o nome do alias ou o driver que estamos utilizando neste alias. nestes dois casos temos de primeiro apagar o alias e criar um novo alias com as caracteristicas que desejamos.
ModifyAlias deve ser utilizado de forma semelhante a AddAlias.
procedure ModificaAlias; var AliasInfo: TStringList; begin AliasInfo:- TStringList.create; try AliasInfo.Add('USER NAME-MARTINS'); Session1.ModifyAlias('DelphiCSBASE'. AliasInfo); Finally AliasInf.free; end; end;
Para que as modificacoes sejam permanentes e' necessario utilizar o metodo SaveConfigFile. SaveConfigFile Como pudemos ver nos metdos anteriores AddAlias. DeleteAlias. etc ... todas as mudancao processadas por estes metodos sao efetuadas unicamente em memoria. isto ocorre porque o BDE trabalha da seguinte forma:
Quando um aplicacao inicializa o BDE todas as configuracoes sao copiadas para a memoria. sendo assim os metodos tratados ate aqui alteram a informaca que esta na memoria e nao no disco.
Para que possamos alterar definitiamente as informaces contidas no BDE devems gravar as alteraces que fizems definitiamente no arqui de configuracao do BDE. e esta tarefa e' executada pelo metodo SaveCnfigFile. |