Delphi xe7 + Mysql
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.
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.
Alexandre Berti
Curtidas 0
Respostas
Bin Laden
31/03/2016
Poderia dar mais detalhes de que tipo de registro seria, e qual banco de dados e conexão utiliza?
GOSTEI 0
Raimundo Pereira
31/03/2016
var
Id:integer;
begin
id:=0;
Suatabela.open;
id:=Suatabela.recordcount+1;
showmessage(inttostr(id);
end;
Id:integer;
begin
id:=0;
Suatabela.open;
id:=Suatabela.recordcount+1;
showmessage(inttostr(id);
end;
GOSTEI 0
Alexandre Berti
31/03/2016
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
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
GOSTEI 0
Raimundo Pereira
31/03/2016
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
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
GOSTEI 0
Alexandre Berti
31/03/2016
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.
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.
GOSTEI 0
Raylan Zibel
31/03/2016
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...
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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...
GOSTEI 0
Raylan Zibel
31/03/2016
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
http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
GOSTEI 0