Delphi xe7 + Mysql

31/03/2016

2

Boa tarbe pessoal,

sou iniciante no delphi, e preciso de ajuda. Estou com um problema. Quero pegar o ultimo registro da tabela e add mais 1.
ja pesquisei na net mais nao encontrei um ex que eu pudesse usar.

se alguem puder mais ajudar e me explicar bem detalhado.
desde ja agradeço a atenção.
Responder

Posts

31/03/2016

Bin Laden

Poderia dar mais detalhes de que tipo de registro seria, e qual banco de dados e conexão utiliza?
Responder

31/03/2016

P2

var
Id:integer;
begin
id:=0;


Suatabela.open;
id:=Suatabela.recordcount+1;
showmessage(inttostr(id);
end;
Responder
Bom dia.

Eu estou usando o banco de dados Mysql 5.5 com os componentes FireDac nativo do delphi xe7, estou usando tbm o action manager para controlar os botoes do form.
O q esta acontecendo e o seguinte se eu vou inserir o primeiro registro blz nao da nenhum erro ele gera o codigo 1 e da tudo certo. So q quando eu vou inserir outro registro o banco gera o codigo 2 mais à aplicação me mostra o cogido 1 novamente com isso gera um erro.

Eu to pescisando pegar o ultimo id inserido e add + 1 da tabela.
eu nao faço a minima ideia de como fazer isso. kkkkkkkk
Responder

01/04/2016

P2

Gerando proximo ID, manualmente.
VAR PROXIMA_ID:INTEGER;

BEGIN
PROXIMA_ID:=0;

DM.SUAQUERY.CLOSE;
DM.SUAQUERY.SQL.CLEAR;
DM.SUAQUERY.SQL.TEXT:='SELECT * FROM SUA TABELA ORDER BY ID';// AQUI VAI ORDENAR PELO ID.
DM.SUAQUERY.OPEN;

DM.SUAQUERY.LAST; //SETA PARA O ULTIMO REGISTRO
PROXIMA_ID:=DM.SUAQUERY.FIELBYNAME('ID').ASINTEGER+1; //PEGA O VALOR DO CAMPO ID NO REGISTRO DE SUA TABELA E SOMA +1
showmessage(inttostr(PROXIMA_ID);
END;

Agora você poderia colocar para esta ID ser gerada automaticamente pelo Mysql colocando o campo ID com PK e UN
Responder
VAR
PROXIMA_ID:INTEGER;
begin
PROXIMA_ID:=0;

DM.SQL_Clientes.CLOSE;
DM.SQL_Clientes.SQL.CLEAR;
DM.SQL_Clientes.SQL.TEXT:='SELECT * FROM Clientes ORDER BY CodCli';// AQUI VAI ORDENAR PELO ID.
DM.SQL_Clientes.OPEN;

DM.SQL_Clientes.LAST; //SETA PARA O ULTIMO REGISTRO
PROXIMA_ID:= DM.SQL_Clientes.FieldByName('CodCli').ASINTEGER+1; //PEGA O VALOR DO CAMPO ID NO REGISTRO DE SUA TABELA E SOMA +1
//showmessage(inttostr(PROXIMA_ID);
END;

meu codigo ficou assim.
qual seria o lugar certo para colocar esse codigo? Fiz uns testes aki e nao deu certo.
Responder

02/04/2016

Raylan Zibel

Fiz um teste aqui no Delphi 10:


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type
TForm1 = class(TForm)
FDQuery1: TFDQuery;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function genID(tabela: string; campo: string): integer;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
id_cliente: integer;
begin
id_cliente := genID('clientes', 'cd_cliente');
end;

function TForm1.genID(tabela, campo: string): integer;
begin
FDQuery1.SQL.Text := Format('select (max(''%s'') + 1) as chave from %s', [tabela,campo]);
FDQuery1.Open;
Result := FDQuery1.Fields[0].AsInteger;
FDQuery1.Close;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Ve se funciona pra voce...
Responder

02/04/2016

Raylan Zibel

Mas o MySQL incrementa campos de chave primária automaticamente, se for o caso.

http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
Responder