GARANTIR DESCONTO

Fórum Delphi + MySql - Retornar número do registro alterado #529299

20/08/2015

0

Bom dia!
Tenho um sistema em Delphi e estou enviando alguns dados para o banco de dados MySql para fazer uma sincronização de arquivos.
Funciona da seguinte forma: Faço um cadastro/alteração no sistema Delphi, depois jogo para o MySql, no MySql tenho uma procedure que verifica se o arquivo já existe, se sim faz um UPDATE, se não existir faz um INSERT.
O problema é o seguinte: tenho duas tabelas MESTRE/DETALHE, tabela FAZENDAS que são os dados da fazenda, e tabela FAZENDAS_MAPAS, que são os mapas de uma fazenda. na tabela FAZENDAS_MAPAS tem um campo COD_FAZENDA, que é o numero do registro da tabela FAZENDAS. Esse campo registro é autoincremento.
Quero saber como faço para retornar o número do campo REGISTRO da tabela FAZENDAS quando faço um UPDATE.
Quando faço um INSERT já consegui, usei o seguinte código no Delphi:
function TForm1.mysql_insert_id(SQLConnection: TSQLConnection): Integer;
var
  SqlDataSet: TSqlDataSet;
begin
  result:= 0;
  SqlDataSet:= TSqlDataSet.Create(nil);
  try
    SqlDataSet.SQLConnection:= SQLConnection;
    SqlDataSet.CommandText:= 'select LAST_INSERT_ID()';
    SqlDataSet.Open;
    result:= SqlDataSet.Fields[0].AsInteger;
    SqlDataSet.Close;
  finally
    SqlDataSet.Free;
  end;
end;

O código "select LAST_INSERT_ID()" retorna o número do ultimo registro inserido. Mas para retornar o ultimo registro alterado não consegui fazer.

Abaixo segue a procedure de importar fazendas no MySql. Se dentro dessa procedure desse para retornar o numero do registro seria ótimo.
CREATE DEFINER=`innetsistemas15`@`%%` PROCEDURE `ImportaFazendas`(
PREGISTRO int(11),
PCLIENTE int (11),
PNOME_FAZENDA varchar(80),
PENDERECO varchar(80),
PNUMERO varchar(10),
PBAIRRO varchar(60), 
PCIDADE varchar (60),
PESTADO varchar (2), 
PCEP varchar(10),
PRESPONSAVEL varchar(80),
POBS varchar(250),
PTEL_RESPONSAVEL varchar(16),
PDATAMOD timestamp)
BEGIN 
   DECLARE cli int (11);
   declare nome varchar(80);
   Set cli = 0;
   set nome = '0';
   SELECT cliente, nome_fazenda From FAZENDAS where cliente = PCLIENTE and nome_fazenda = PNOME_FAZENDA into cli, nome;
  if ((cli <> 0) and (nome <> '0')) then
     UPDATE `FAZENDAS` SET DATAMOD=PDATAMOD, CLIENTE = PCLIENTE, NOME_FAZENDA = PNOME_FAZENDA, ENDERECO = PENDERECO, NUMERO = PNUMERO, BAIRRO = PBAIRRO, CIDADE = PCIDADE,
     ESTADO = PESTADO, CEP = PCEP, RESPONSAVEL = PRESPONSAVEL, OBS = POBS, TEL_RESPONSAVEL = PTEL_RESPONSAVEL WHERE DATAMOD < PDATAMOD and cliente = cli and nome_fazenda = nome;
  else
     Insert into FAZENDAS (CLIENTE, NOME_FAZENDA, ENDERECO, NUMERO, BAIRRO, CIDADE, ESTADO, CEP, RESPONSAVEL, OBS, TEL_RESPONSAVEL, DATAMOD)
	 values (PCLIENTE, PNOME_FAZENDA, PENDERECO, PNUMERO, PBAIRRO, PCIDADE, PESTADO, PCEP, PRESPONSAVEL, POBS, PTEL_RESPONSAVEL, PDATAMOD);
 end IF;
END
Everton Carlesso

Everton Carlesso

Responder

Posts

21/08/2015

Mateus Ribeiro

Boa noite!

Não existe nenhum comando que vc possa usar para trazer o último registro que sofreu um UPDATE.

O que vc pode estar fazendo é criar um campo DATA_ALTERACAO que armazene a Data e Hora, e então através disso vc poderá retornar qual o ultimo registro sofreu um UPDATE.
Responder

Gostei + 0

21/08/2015

Everton Carlesso

Obrigado Mateus.
Consegui resolver de uma outra forma.
Fiz o seguinte: criei uma função que logo depois que eu insiro/modifico um registro, chamo uma função que faz a consulta buscando o número do registro inserido/alterado. Segue a função:
function TForm1.Num_Registro_Fazenda(Cliente,Fazenda : string): Integer;
var
  SqlDataSet: TSqlDataSet;
begin
  result:= 0;
  SqlDataSet:= TSqlDataSet.Create(nil);
  try
    SqlDataSet.SQLConnection:= BancoWeb;
    SqlDataSet.CommandText:= 'select registro From FAZENDAS where cliente = '''+Cliente+''' and nome_fazenda = '''+Fazenda+'''';
    SqlDataSet.Open;
    result:= SqlDataSet.Fields[0].AsInteger;
    SqlDataSet.Close;
  finally
    SqlDataSet.Free;
  end;
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar