Ver Mensaje Individual
  #1  
Antiguo 20-03-2008
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Reputación: 21
gorsan Va por buen camino
Valores previos únicos en controles data-aware

Buenos días a todos.
Hoy les planteo la siguiente cuestión:
Trabajo con Delphi 7 e Interbase 6.

Dispongo sobre un formulario una serie de controles data-aware (DBEdit) linkados a los campos de un IBDataSet. En respuesta al click de un botón añado un nuevo registro en blanco:
Código Delphi [-]
procedure TWCpu.TBAddClick(Sender: TObject);
begin
   TBAdd.Enabled:=False;
   TBEditar.Enabled:=False;
   TBBorrar.Enabled:=False;
   TBGrabar.Enabled:=True;
   TBCancelar.Enabled:=True;
   EBuscar.SetFocus;
   with DMCpu.IBCpu do
    try
       DisableControls;
       Close;
       Open;
       Append;
    finally
       EnableControls;
    end;
   DBId_inv_cpu.SetFocus;
end;
Es en este momento donde quiero que salga escrito en algunos de ellos una serie de valores. Pero la cosa no es tan simple porque esos campos están definidos como not null y unique.
Lo que pido es ayuda en la construcción de un mecanismo que escriba valores unicos en esos controles, valores algo asi como NoIp01, NoDominio01, etc, y que luego, al quedar solo escritos en los DBEdit, el usuario pueda introducir sus valores y de no hacerlo, que no salte la excepcion por ser un valor repetido.
He intentado hacerlo con generadores pero estos escriben el valor en la tabla más tarde de lo que yo quiero que lo hagan. En concreto he intentado:

Código Delphi [-]
procedure TDMCpu.IBCpuNewRecord(DataSet: TDataSet);
begin
   with IBSQLValores_Iniciales do
   begin
      close;
      ExecQuery;
      FreeHandle;
   end;
end;
El Stored Procedure que construi al efecto es:
Código SQL [-]
ALTER PROCEDURE "INSERTAR_VALORES_EN_TABLA_CPU" 
AS
BEGIN
 UPDATE CPU
 SET
   "ID_DOMINIO"=GEN_ID(CONTADOR_PARA_ID_DOMINIO_EN_CPU,1),
   "IP"=GEN_ID(CONTADOR_PARA_IP_EN_CPU,1),
   "RACK"=GEN_ID(CONTADOR_PARA_RACK_EN_CPU,1),
   "LP_SIP_ACTUAL"=GEN_ID(CONTADOR_PARA_IMP_EN_CPU,1);
END
 ^
Pero no funciona como yo quiero. ¿Alguien me puede dar una idea de como hacerlo? Muchas gracias por vuestro tiempo.
Responder Con Cita