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.