![]() |
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. |
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 |
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:
por la siguiente linea
|
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 04:42:24. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi