Utilizo cuatro botones: Altas, Guardar,Modificar y Cancelar. Es una base de datos de mamíferos con orden, familia y especies.
Código Delphi
[-]
procedure TForm1.BitBtn2Click(Sender: TObject); begin
if (ClientDataSet3.State in [dsEdit, dsInsert]) then
begin
ClientDataSet3.Post;
ClientDataSet3.ApplyUpdates(-1);
DBGrid1.Columns[0].Font.Color:= clNavy;
end else
ClientDataSet3.Cancel;
end;
procedure TForm1.BitBtn3Click(Sender: TObject); begin
if ClientDataSet3.State in [dsInsert, dsEdit] then
ClientDataSet3.Cancel;
end;
procedure TForm1.BitBtn5Click(Sender: TObject); begin
if ClientDataSet3.State in [dsBrowse] then
ClientDataSet3.Insert;
ClientDataSet3.FieldByName('ENUM').AsInteger:= StrToInt(Label2.Caption)+1;
Button1.Click;
EsAltaE:=True;
end;
procedure TForm1.BitBtn6Click(Sender: TObject); begin
if ClientDataSet3.State in [dsInsert, dsEdit] then
begin
if DataSource3.DataSet.FieldByName('ESP').asString='' then
begin
ClientDataSet3.Cancel;
Button2.Click; EsAltaE:=False;
Exit;
end else
begin
ClientDataSet3.Post;
ClientDataSet3.ApplyUpdates(-1);
REVISA_GEN_ESP(IBQuery3, esAltaE, Label2);
end;
end;
Button2.Click; EsAltaE:=False;
BitBtn5.Enabled:=True;
BitBtn8.Enabled:=True;
end;
procedure TForm1.BitBtn7Click(Sender: TObject); begin
if ClientDataSet3.State in [dsInsert, dsEdit] then
ClientDataSet3.Cancel;
end;
Para automatizar el incremento del nº de registro uso: Select GEN_ID(GEN_ESP, 1) FROM RDB$DATABASE, cuando es un Alta de nuevo registro. (Variable EsAlta:=True).
Espero que se entienda. Aquí la función externa para el autoincremento.
Código Delphi
[-]
Function REVISA_GEN_ESP( IBQuery3: TIBQuery; EsAltaE : Boolean ; Label2: TLabel) : Integer;
Var
Avance : String; begin
if EsAltaE then Avance:='1' else Avance:='0';
IBQuery3.Close;
IBQuery3.SQL.Clear;
IBQuery3.SQL.ADD('SELECT GEN_ID( GEN_ESP,'+Avance+' ) FROM RDB$DATABASE');
IBQuery3.Open; Result := IBQuery3.Fields[0].AsInteger;
Label2.Caption:= IntToStr(Result); EsAltaE:=False;
END;
Suerte,
Bulc