Fórum Delphi + MySql - Retornar número do registro alterado #529299
20/08/2015
0
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;
ENDEverton Carlesso
Curtir tópico
+ 0Posts
21/08/2015
Mateus Ribeiro
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.
Gostei + 0
21/08/2015
Everton Carlesso
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;Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)