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