Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Mostrar valor de DBEDIT con Procedimiento Almacenado (https://www.clubdelphi.com/foros/showthread.php?t=22029)

JoanKa 04-06-2005 11:51:19

Mostrar valor de DBEDIT con Procedimiento Almacenado
 
Bueno esta rutina de aumentarle una unidad al codigo anterior ya me esta volviendo cabezon !!!!!

Les explico tengo dos DBEDIT (Uno que corresponde al codigo:txt_codi y el otro al nombre: txt_nomb)

Dentro de un formulario los tengo a los dados y en un Datamodule a los objetos de conexion.

En Firebird he creado un Generador
CREATE GENERATOR SIGUIENTE_CODIGO;
SET GENERATOR SIGUIENTE_CODIGO TO 1025;

Asi mismo un Trigger

CREATE TRIGGER CODIGO_CLIENTE FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.codi_cli = 'CLI' || CAST(gen_id(SIGUIENTE_CODIGO,1) AS VARCHAR(7));
end

y por ultimo un Procedimiento almacenado
CREATE PROCEDURE CODI_INCRE1
RETURNS ( NUM_SIG VARCHAR(10))
AS
begin
num_sig = 'CLI' || CAST(gen_id(siguiente_codigo,0)+1 AS VARCHAR(7));
suspend;
end

Ahora es cuando lo pongo en Accion (en la Tabla clientes tengo como ultimo codigo el CLI1025)

Entoces ejecuto el formulario y en el txt_codi me coloca automaticamente el codigo : CLI1026 (esto es correcto puesto que al ejecutar el programa me ha llamado el procedimiento almacenado , entonces al momento de grabar me lo registra en mi tabla (debido al lanzamiento del trigger asi como el generador) y todo ok.

AHORA ES DONDE VIENE EL PROBLEMA AL EJECUTAR ESTA RUTINA, ES DECIR DESPUES DE GRABAR EL CODIGO CLI1026, ES DECIR, CUANDO DESEO HACER OTRO INGRESO EN EL DBEDIT (TXT_CODI) ME DEBERIAAAAAAAA SALIR EL CODIGO CLI1027 PERO NO LO PUEDO OBTENER.

Esta es la rutina cuando le doy click en el boton

*********************************************
procedure Tfrm_Mant_Clie.BotonClick(Sender: TObject);
var
resp1 : integer;
resp2 : integer;
begin
resp1 := Application.MessageBox('Estas seguro que Deseas Grabar este Cliente','Mantenimiento de Clientes',MB_YESNO+MB_ICONINFORMATION);
if resp1=6 then
begin
DM_Conexiones.IBT_Clientes.Post;
Application.MessageBox('Cliente Registrado con éxito','Mantenimiento de Clientes');
resp2 := Application.MessageBox('Deseas Registrar a Otro Cliente','Mantenimiento de Clientes',MB_YESNO+MB_ICONINFORMATION);
if resp2=6 then
begin
DM_Conexiones.IBTransaction1.Commit;
DM_Conexiones.IBT_Clientes.Active := True;
DM_Conexiones.IBQuery1.Close;
DM_Conexiones.IBQuery1.SQL.Clear;
DM_Conexiones.IBQuery1.SQL.Add('SELECT num_sig FROM CODI_INCRE1');
DM_Conexiones.IBQuery1.Open;
txt_codi.Text := DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;
txt_nomb.SetFocus
end
else
begin
DM_Conexiones.IBT_Clientes.Last
end
end
else
begin
DM_Conexiones.IBT_Clientes.Cancel;
showmessage('Sus datos Ingresados han sido cancelados')
end
end;

*********************************************

Me sale este Error:

Project Ingreso_Clientes.exe raised exception class EDATABASEError with messagr ''IBQUERY1: Parameter 'num_sig' not found'. Process stopped .............

Pero Hay algo curioso les cuento

Puse un marcador en la linea :
txt_codi.Text := DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;
Entonces coloque el puntero del mouse sobre txt_codi.Text y me di cuenta que si obtenia el codigo CLI1026, pero en el formulario no obtenia el codigo CLI1026 y luego me arojaba el error que antes lo escribi.

Que puede ser este error. Sera algo de estructura o sintaxis al momento de escribir.

Espero que me puedan ayudar ya que estoy parado en esto y no puedo continuar.

Gracias y saludos a todos por dedicarse un tiempo a mi respuesta.

Crandel 04-06-2005 23:14:07

Tenes dos errores:

1. No captures el parametro por el nombre si no por el número (número 0).

2. Nunca insertas el registro, por lo que nunca se incrementa.

Suerte

RONPABLO 05-06-2005 05:09:30

Faltan los dos puntos
 
Te doy esta respuesta pensando en que lo que quieres es tener el valor en una sql y no el de ingresar un parametro, así pues debes cambiar la siguente linea:
Código Delphi [-]
 txt_codi.Text :=  DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;

por la siguiente linea

Código Delphi [-]
  txt_codi.Text := DM_Conexiones.IBQuery1.FieldByName('num_sig').AsString;

JoanKa 05-06-2005 11:10:35

Gracias amigo diste en el Clavo. :D


Ese era el error. El error de uno que recien esta empezando!!!! :confused:


La franja horaria es GMT +2. Ahora son las 02:23:34.

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