quarta-feira, 30 de maio de 2012

Trabalhando com DataSet (Insert, edit, post, last, prior, first, ...)

Trabalhando com DataSets

Um DataSet é um conjunto de dados organizado em forma de tabela (em linhas e colunas). As colunas são os campos e as linhas são os registros. Todo o acesso a bancos de dados no Delphi é feito através de DataSets. Os componentes Table e Query são os tipos principais de DataSets. Neste capítulo, veremos as propriedades, eventos e métodos dos DataSets. Tudo que veremos aqui vale para os componentes Table e Query.

Abrindo e fechando DataSets

Para alterar ou ler os dados em uma DataSet, você deve primeiro abrir o DataSet.
  • Para abrir um DataSet, realize uma das seguintes operações:
  • Altere a propriedade Active do DataSet para True.
Isso pode ser feito em tempo de desenvolvimento no Object Inspector, ou em tempo de execução. O seguinte comando abre o componente chamado "Table1":
Table1.Active := True;
  • Use o método Open no DataSet, como abaixo:
Query1.Open;
Quando um DataSet é aberto os dados conectados a ele são lidos e exibidos automaticamente (se houver componentes onde os dados possam ser exibidos, é claro). No exemplo do capítulo anterior, abrimos um componente Table em um formulário para que os dados fossem exibidos imediatamente em um componente DBGrid.
Você deve sempre fechar um DataSet depois de usá-lo, para liberar recursos do sistema.
  • Para fechar um DataSet, realize uma das seguintes operações:
  • Altere a propriedade Active do DataSet para False.
  • Use o método Close no DataSet, como em Table1.Close

Estados de um DataSet

Um DataSet pode estar em vários estados diferentes. O estado de um DataSet determina o que pode ser feito (ou está sendo feito) com o DataSet. O valor da propriedade State de um DataSet determina o seu estado atual. Veja a seguir uma descrição breve dos estados mais importantes em que pode estar um DataSet.

Estado
(valor de State)

Significado

dsInactive

O Dataset está fechado. Seus dados não estão disponíveis (não podem ser lidos nem alterados).

dsBrowse

O Dataset está aberto. Seus dados podem ser visualizados, mas não podem ser alterados. Este é o estado padrão de um DataSet.

dsEdit

O DataSet está aberto. O registro atual pode ser modificado.

dsInsert

O DataSet está aberto. Um novo registro acaba de ser inserido.


O estado dsBrowse é o estado padrão. Quando um DataSet é aberto, ele é colocado automaticamente neste estado. Vários métodos de um DataSet podem ser usados para alterar o seu estado. Na ilustração a seguir, são mostrados os quatro estados mais importantes e os métodos que podem ser usados para passar de um estado para outro.

Estados de um DataSet
Para usar um dos métodos da ilustração, simplesmente use o nome do DataSet seguido pelo nome do método. O trecho de código abaixo, por exemplo, altera cinco vezes o estado de um componente Table.
procedure TForm1.Button1Click(Sender: TObject);
begin    Table1.Open; // O estado muda para dsBrowse ...
    Table1.Edit; //... muda para dsEdit...
    Table1.Insert; //... muda novamente para dsInsert ...
    Table1.Close; //... e finalmente muda para dsInactive
end;

Navegando em um DataSet

Os DataSets teriam pouca utilidade se não fosse possível percorrer e consultar (navegar) os seus registros. Há vários métodos e propriedades úteis para a navegação de DataSets.
Para permitir a navegação de seus registros, todo DataSet contém um cursor que indica o registro atual (ou linha atual) do DataSet. É no registro atual que são feitas alterações, ou onde são inseridos (ou removidos) registros. Todos os métodos de navegação alteram a posição do cursor. Veja uma descrição breve desses métodos na tabela a seguir:

Método

Descrição

First

Move o cursor para o primeiro registro do DataSet.

Last

Move o cursor para o último registro do DataSet.

Next

Move o cursor para o próximo registro do DataSet (imediatamente depoisdo registro atual). Se o cursor já estiver no último registro, nada acontece.

Prior

Move o cursor para o registro anterior do DataSet (imediatamente antes do registro atual). Se o cursor já estiver no primeiro registro, nada acontece.

MoveBy(num)
Move o cursor o número de registros especificado em num. Um valor positivo move o cursor para frente; um valor negativo move-o para trás. Por exemplo, Table1.moveBy(-10) move o cursor 10 registros para trás na tabelaTable1.

Se o número de registros especificado for maior do que o número que se pode mover, o cursor é movido para o primeiro ou o último registro, dependendo da direção do movimento.

Além dos métodos descritos acima, há duas propriedades que indicam se o cursor chegou ao final ou ao início de um DataSet: BOF e EOF.

Propriedade

Descrição

BOF

BOF é alterado para True quando o cursor está no primeiro registro do DataSet. BOF é a abreviação de Begin of File – "Início do Arquivo".

Quando o cursor estiver em qualquer registro que não seja o primeiro do DataSet, o valor de BOF é False.

EOF

EOF é alterado para True quando o cursor está no último registro do DataSet. EOF é a abreviação de End of File – "Final do Arquivo".

Quando o cursor estiver em qualquer registro que não seja o último do DataSet, o valor de EOF é False.

Modificando Datasets

Pode-se alterar um DataSet diretamente, modificando valores campo a campo, ou adicionando e removendo registros inteiros. Os seguintes métodos permitem fazer essas alterações:

Método

Descrição

Edit

Coloca o DataSet no estado dsEdit. Isto permite a alteração dos valores do registro atual. Muitos componentes chamam esse método implicitamente para permitir a alteração direta dos valores de um DataSet. O componente DBGrid, por exemplo, entra no estado dsEdit usando o método Edit, quando se dá um duplo clique em um dos registros.

Append

Adiciona um registro vazio ao final do DataSet. O estado do DataSet muda paradsInsert.

Insert

Adiciona um registro vazio na posição atual do cursor. O estado do DataSet muda para dsInsert (como para o método Append).

Post

Tenta enviar o novo registro ou o registro alterado para o banco de dados. Se tudo correr bem, o DataSet é colocado no estado dsBrowse. Caso contrário, o estado do DataSet não é alterado. O comando Post é um tipo de confirmação da última entrada.

Muitos componentes chamam Post automaticamente (quando se passa de um registro para outro em um DBGrid, por exemplo).

Cancel

Cancela a última operação (uma alteração em um registro, por exemplo) e coloca o DataSet no estado dsBrowse.

Delete

Apaga o registro atual e coloca o DataSet no estado dsBrowse.


Fonte : angelfire

segunda-feira, 28 de maio de 2012

Usando xp_fixeddrives para monitorar o espaço livre em disco


Usando xp_fixeddrives para monitorar o espaço livre em disco

Por Gregory A. Larsen

Como um DBA uma de suas responsabilidades é monitorar disco espaço . Você sempre precisa ter certeza de que você tem o suficiente para suas bases de dados, backups de banco de dados e quaisquer outros tipos de arquivos que você pretende armazenar no seu servidor. Se você não controlar o seu espaço em disco e verifique se você tem espaço suficiente, eventualmente, um de seus processos de banco de dados críticos ou componentes vai falhar, porque não é possível alocar o espaço em disco ele precisa.

Há um número de diferentes métodos para monitorizar a utilização do espaço de disco. Não vou discutir os métodos diferentes que você poderia usar, eu só vou escrever sobre um. O método que eu vou discutir é um método de monitoramento simples espaço que usa um SQL Server em situação irregular estendido xp_fixeddrives procedimento armazenado chamado. Os xp_fixeddrives estendido procedimento armazenado retorna um conjunto de registros que contém o número de megabytes de espaço livre para cada unidade física associada com a máquina do SQL Server.
Agora é simples basta executar o comando xp_fixeddrives cada tantas vezes do Query Analyzer para analisar a quantidade de espaço livre, embora este método é muito demorado para administradores de banco de dados ocupados. Um método melhor seria automatizar executando este comando periodicamente para rever a quantidade de espaço livre. Com a aproximação automática, você pode realizar o que quer que você achar mais adequado com as informações de espaço livre. Eu posso pensar de um casal de diferentes tarefas de DBA, onde informações de espaço livre pode ser valioso. A primeira coisa seria alertar o DBA quando o espaço livre cai abaixo de um limite específico em qualquer unidade do SQL Server, ea segunda seria a de acompanhar historicamente o espaço livre em disco para o gerenciamento da capacidade do espaço.
Primeiro, vamos olhar como construir um processo para alertar o DBA quando qualquer uma das unidades de disco do SQL Server cai abaixo de um determinado limite. Para utilizar as informações xp_fixeddrives neste processo automatizado alertando que eu preciso para obter as informações emitidas pelos procedimentos de armazenamento prolongados em uma tabela SQL Server ou variáveis ​​de aplicativo, para que eu possa programaticamente tomar decisões sobre se uma unidade já passou do limite de espaço livre. Para obter as informações xp_fixeddrives em uma tabela temporária eu uso o seguinte T-SQL.

create table #FreeSpace(
 Drive char(1), 
 MB_Free int)

insert into #FreeSpace exec xp_fixeddrives
Como você pode ver, eu criei uma tabela temporária chamada # FreeSpace para inserir os registros que xp_fixeddrives saídas. Esta tabela temporária é então preenchida quando o "insert into" instrução é executada. Agora esse código por si só não alertar o DBA, embora não obter as informações de espaço livre para cada unidade em sua caixa de SQL Server em uma tabela temporária onde algum código T-SQL pode processá-lo para alertar o DBA.
O método que estou usando para controlar o processo de alerta de limite é um trabalho do SQL Agent que é executado de hora em hora. Cada hora o trabalho do agente SQL Server coleta as informações de espaço livre para cada unidade do SQL Server em uma tabela temporária, como o descrito acima. Então, para cada unidade de eu recuperar as informações de espaço livre a partir desta tabela temporária e compará-lo a um limiar que definiu para cada unidade. Se a quantidade de espaço livre cai abaixo do limiar de configuração especial para a unidade, então eu enviar e-mail do DBA usando xp_sendmail. Aqui está um exemplo de algum código que faz exatamente isso.

declare @MB_Free int

create table #FreeSpace(
 Drive char(1), 
 MB_Free int)

insert into #FreeSpace exec xp_fixeddrives

select @MB_Free = MB_Free from #FreeSpace where Drive = 'C'

-- Free Space on C drive Less than Threshold
if @MB_Free < 1024
  exec master.dbo.xp_sendmail 
     @recipients ='greg.larsen@netzero.net',
     @subject ='SERVER X - Fresh Space Issue on C Drive',
     @message = 'Free space on C Drive 
                 has dropped below 1 gig'

select @MB_Free = MB_Free from #FreeSpace where Drive = 'F'

-- Free Space on F drive Less than Threshold
if @MB_Free < 2048 
   exec master.dbo.xp_sendmail 
     @recipients ='greg.larsen@netzero.net',
     @subject ='SERVER X - Fresh Space Issue on C Drive',
     @message = 'Free space on F Drive 
                 has dropped below 2 gig'
Este exemplo apenas verifica o espaço livre em dois discos, mas poderia facilmente ser modificado para lidar com unidades adicionais. Esse código de exemplo pode ser colocado diretamente em uma etapa de trabalho do SQL Agent, ou pode ser construído em um procedimento armazenado que é executado por uma etapa de trabalho. Ao construir um trabalho de agente do SQL Server para executar o código acima, o DBA será notificado logo após uma unidade atinge o seu limite de espaço designado livre.Este alertando de espaço livre baixo esperança de permitir que o tempo de DBA para resolver o problema de espaço livre antes torna-se crítico, e faz com que os processos a falhar. Note-se que o código acima tem um limite de espaço livre diferente para cada unidade.

Outro uso do xp_fixeddrives poderia ser a de controlar o uso de espaço em disco ao longo do tempo. Diga-lhe para onde se reúnem as informações de espaço livre em intervalos regulares, por exemplo, semanal, e armazená-lo em uma tabela de banco de dados. Isso poderia ser feito usando o método acima para preencher a tabela # FreeSpace temporária. Ao reunir informações sobre o espaço livre ao longo do tempo e armazená-lo em uma tabela permanente do SQL Server, você será capaz de produzir um gráfico de tendência, mostrando seu disco de horas extras consumo de espaço. Ao comparar a quantidade de espaço livre entre dois pontos no gráfico que será capaz de determinar o espaço de disco consumido entre os intervalos. Ter a taxa de consumo de espaço em disco é valioso no rastreamento quão rápido as suas aplicações estão consumindo seu espaço de disco livre disponível. Esta informação taxa de crescimento é importante para determinar quanto espaço em disco é necessário para suportar suas aplicações para o próximo ano.

Monitoramento de espaço em disco disponível e as taxas de crescimento são um par de coisas que um DBA deve ser espetáculo. Sem o acompanhamento você corre o risco de ficar sem espaço e causando problemas críticos para a sua aplicação. Caso você não tenha vindo a acompanhar a disponibilidade de espaço em disco e uso, então você pode considerar como você pode usar xp_fixeddrives para apoiar as necessidades do seu monitor.