Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-02-2007
Tauro78 Tauro78 is offline
Miembro
 
Registrado: sep 2006
Posts: 88
Poder: 18
Tauro78 Va por buen camino
Problema con Procedimiento almacenado

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;

Última edición por Tauro78 fecha: 06-02-2007 a las 18:30:05.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema con procedimiento almacenado aladelta Firebird e Interbase 7 14-02-2007 01:52:34
Problema con procedimiento almacenado XBart Firebird e Interbase 3 27-10-2005 09:08:17
problema con procedimiento almacenado Choclito Firebird e Interbase 2 04-11-2004 20:58:46
Problema con procedimiento almacenado juziel Firebird e Interbase 4 20-09-2004 18:31:41
Problema con un procedimiento almacenado Markoz Firebird e Interbase 1 08-07-2003 11:47:20


La franja horaria es GMT +2. Ahora son las 13:46:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi