hola, quisiera saber si me pueden ayudar en esto. Uso Delphi7, FB2, MDO e IBExpert. Lo que quiero lograr es que en el momento de dar de alta un cliente me verifique por medio del SP EXIST_CLIENTE si ya existe un cliente con un campo dicose (que es la clave) igual en la tabla. Entonces ejecuto el SP y luego pregunto si el SP es vacio, entonces no existe el cliente, si no esta vacio ya existe el cliente. La verdad no se si se puede hacerlo de esta forma, ya que yo hacia esto en Paradox pero usando uan query.
El SP CLIENTES_ALTAS funciona bien, lo para que vean todo el proceso.
El problema es que me deja entrar la misma clave 2 veces y por supuesto me da error en la clave primaria.
Desde ya muchas gracias.
Código:
SET TERM ^ ;
CREATE PROCEDURE SP_EXIST_CLIENTE (
sp_dicose char(10))
returns (
dicose char(10))
as
begin
FOR
SELECT DICOSE
FROM CLIENTES WHERE DICOSE=:SP_DICOSE
INTO :DICOSE
do
suspend;
end^
SET TERM ; ^
GRANT SELECT ON CLIENTES TO PROCEDURE SP_EXIST_CLIENTE;
GRANT EXECUTE ON PROCEDURE SP_EXIST_CLIENTE TO SYSDBA;
Código:
SET TERM ^ ;
CREATE PROCEDURE SP_CLIENTES_ALTAS (
sp_dicose char(10),
sp_nombre varchar(20))
as
begin
insert into CLIENTES (DICOSE, NOMBRE)
values (:sp_dicose, :sp_nombre);
end^
SET TERM ; ^
GRANT INSERT ON CLIENTES TO PROCEDURE SP_CLIENTES_ALTAS;
GRANT EXECUTE ON PROCEDURE SP_CLIENTES_ALTAS TO SYSDBA;
Código Delphi
[-]
procedure TfrmClientesAltas.BitBtn1Click(Sender: TObject);
begin
if (Edit1.Text = '') or (Edit2.Text = '') then
begin
MessageDlg('Se deben completar todos los campos.', MtInformation, [MbOK], 0);
Exit;
end
else
begin
dmTablas.MDOSPExistCPCliente.Close;
dmTablas.MDOSPExistCPCliente.ParamByName('SP_DICOSE').AsString := Edit1.Text;
dmTablas.MDOSPExistCPCliente.Prepare;
dmTablas.MDOSPExistCPCliente.ExecProc;
if (not dmTablas.MDOSPExistCPCliente.IsEmpty) then
begin
MessageDlg('Ya existe un cliente con este número de DICOSE.', MtInformation, [MbOK], 0);
Exit;
end
else
begin
with dmTablas.MDOSPClientesAltas do
begin
Params.ParamByName('SP_DICOSE').Value := Edit1.Text;
Params.ParamByName('SP_NOMBRE').Value := UpperCase(Edit2.Text);
Prepared := True;
ExecProc;
end;
end;
end;