Olá galera, nesta Quick Tips, irei mostra como podemos criar uma Sequence dentro do MySQL, utilizando o Delphi, para isso vamos ter que criar duas tabelas, uma seria para armazenar nossa Sequence, e outra para registrar os ID gerados.

Segue abaixo o Script para vocês acompanharem. Vamos criar um Schema chamado BDDevMedia

Criando a Sequence

 

DROP TABLE IF EXISTS `bdDevMedia`.`sequenceidbaixaparcelapagar`;

CREATE TABLE  `bdDevMedia`.`sequenceidbaixaparcelapagar` (

  `ID` int(10) NOT NULL,

  PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

Criando a Tabela

 

CREATE TABLE `bdDevMedia`.`DOCUMENTO` (

  `IDDOCUMENTO` INTEGER UNSIGNED NOT NULL,

  `DESCRICAO` VARCHAR(45) NOT NULL,

  PRIMARY KEY (`IDDOCUMENTO`)

)

ENGINE = InnoDB DEFAULT CHARSET=latin1;

 

Tendo criado estas duas tabelas no seu banco, vamos agora criar uma classe com dois métodos, para isso criaremos uma Unit e vamos salvar esta como uSequence.pas .

 

Vamos então a criação da Classe e definição dos métodos além de darmos uses no que será preciso, para evitar surpresas.

 

unit uSequenceMySQL;

interface

 

uses DB, SqlExpr, SysUtils;

Type

   TSequence = Class

   private

      class function GetLastSequence(xNome: String; Conexao: TSQLConnection): Integer;

   public

      class function UpdateSequence(xNome: String; Conexao: TSQLConnection): String;

End;

implementation

end.

 

Feito isso vamos agora implementar cada um dos métodos listados a cima, mas antes observe que estou utilizando métodos de Class, por que isso ?

Simples ! Para evitarmos criar um objeto do tipo TSequence apenas para executar nossos métodos, sendo assim não haverá objetos vejamos como isso funciona na prática.

 

Implementaremos agora o método GetLastSequence

class function TSequence.GetLastSequence(xNome: String; Conexao: TSQLConnection): Integer;

Var

   xQry : TSQLQuery;

begin

   Try

      xQry := TSQLQuery.Create(Nil);

      With xQry do

      begin

         SQLConnection := Conexao;

         SQL.Clear;

         SQL.Add('select MAX(ID) FROM ' + xNome);

         Open;

         if Fields[0].IsNull then

         begin

            Close;

            SQL.Clear;

            SQL.Add('INSERT INTO ' + xNome + ' VALUES(0)' );

            ExecSQL;

            SQL.Clear;

            SQL.Add('select MAX(ID) FROM ' + xNome);

            Open;

          end;

            Result := Fields[0].AsInteger;

      end;

   Finally

         FreeAndNil(xQry);

   End;

end;

Este método GetLastSequence, serve para pegarmos o último ID gerado, observe que ele tem um teste para ver se a tabela esta vazia, pois se estiver Null, atualizamos ela para zero(0), onde veremos mais a frente como isso irá funcionar.

Por que colocar a function GetLastSequence na seção private? Para evitar que externo(objetos) tenham acesso a ela, somente de dentro dela temos acesso.

Fico por aqui ate à próxima Quick Tips. Veremos a implementação do nosso método UpdateSequence, e como usarmos este exemplo na prática

Um abraço

Wesley Y

wyamazack@rwsolution.com.br