Ver Mensaje Individual
  #8  
Antiguo 05-05-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Reputación: 14
bulc Va por buen camino
LoQueYoUso

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); //Guardar Familia 
begin
if  (ClientDataSet3.State in [dsEdit, dsInsert]) then
    begin
       ClientDataSet3.Post;
       ClientDataSet3.ApplyUpdates(-1);
       //DataSource1.DataSet.Refresh;  // Da 'Error catastrófico' !!
       DBGrid1.Columns[0].Font.Color:= clNavy;
    end else
    ClientDataSet3.Cancel;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);  //CANCELAR   CDS2
begin
 if ClientDataSet3.State in [dsInsert, dsEdit] then
    ClientDataSet3.Cancel;
end;

procedure TForm1.BitBtn5Click(Sender: TObject);  // ALTA ESPECIE cds3
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); //GUARDA ESPECIE
begin
if ClientDataSet3.State in [dsInsert, dsEdit] then
begin
       if DataSource3.DataSet.FieldByName('ESP').asString=''  then
          begin
          ClientDataSet3.Cancel;
          Button2.Click; // EEDIT_NO
          EsAltaE:=False;
          Exit;
          end else
          begin
            ClientDataSet3.Post;
            ClientDataSet3.ApplyUpdates(-1);
            //Detrás del Apply porque así el nuevo número ya se guardó.
            REVISA_GEN_ESP(IBQuery3, esAltaE, Label2);
          end;
end;
 Button2.Click;    //EEDIT_NO
 EsAltaE:=False;
 BitBtn5.Enabled:=True;
 BitBtn8.Enabled:=True;
end;

procedure TForm1.BitBtn7Click(Sender: TObject); // CANCELAR ESPECIE 3
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;   // Si EsNuevo=True, then Avance is 1.
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;  // Primero se abre y luego se recoge el resultado;
    Result := IBQuery3.Fields[0].AsInteger;
    Label2.Caption:= IntToStr(Result); // Label2 = GEN_ESP de ESPECIE.
    EsAltaE:=False;
END;
Suerte,
Bulc
Responder Con Cita