PDA

Ver la Versión Completa : Mostrar valor de DBEDIT con Procedimiento Almacenado


JoanKa
04-06-2005, 11:51:19
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
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:

txt_codi.Text := DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;


por la siguiente linea


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: