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)
-   -   Volver a Incrementar y asignar a un DBtext (https://www.clubdelphi.com/foros/showthread.php?t=21997)

JoanKa 03-06-2005 00:27:10

Volver a Incrementar y asignar a un DBtext
 
Hola Nuevamene con un problema que no puedo visualizar.

Bueno

En un formulario tengo varios dbText pero hay uno (txt_codigo).

Cuando ingreso por primera vez al formulario me muestra el ultimo codigo incrementado en 1 mediante un SP , y lleno todo lso DBTEXT y cuando le digo registrar me lo graba todo bien en la Tabla pero cuando le pregunto

resp2 := Application.MessageBox('Deseas Registrar a Otro Cliente','Mantenimiento',MB_YESNO+MB_ICONINFORMATION);
me sale


Project Proyecto_Clienes.exe raised exception class EIBClientError with message 'use Open for a Select Statement'. Process Stopped. Use Step o Run........

Le mando el codigo

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.IBT_Clientes.Last;
DM_Conexiones.IBT_Clientes.Insert;
DM_Conexiones.IBQuery1.SQL.Clear;
DM_Conexiones.IBQuery1.SQL.Add('SELECT num_sig FROM CODI_INCRE1');
DM_Conexiones.IBQuery1.ExecSQL;
txt_codi.Text := DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;
txt_nomb.SetFocus
end
else
begin
DM_Conexiones.IBT_Clientes.Last
end


Donde puede estar el Error ????????????

Gracias y Saludos a la Comunidad.

RESP 3.0 03-06-2005 02:31:33

Es por la forma en la que ejecutas el Query, deberias de hacer esto

Código:

 
DM_Conexiones.IBQuery1.ExecSQL;


vtdeleon 03-06-2005 02:34:19

Saludos
Código Delphi [-]
 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.IBT_Clientes.Last;//No creo que sea necesario 
  DM_Conexiones.IBT_Clientes.Insert;//Podrias usar Append
  DM_Conexiones.IBQuery1.SQL.Clear;
   DM_Conexiones.IBQuery1.SQL.Add('SELECT num_sig FROM CODI_INCRE1');
  DM_Conexiones.IBQuery1.ExecSQL;//Utiliza Open, ya que ExecSql por lo regular se utiliza para Updates e Insert
  txt_codi.Text := DM_Conexiones.IBQuery1.ParamByName('num_sig').AsString;// Supongo que num_sig 
 //es una columna no un parametro:confused:, por tanto no entiendo esto
  txt_nomb.SetFocus
             end
          else
             begin
  DM_Conexiones.IBT_Clientes.Last
              end
Quizas no resuelva tu problema, pero...:p

JoanKa 03-06-2005 14:54:36

Me explico mejor lo que pasa que esta consulta
DM_Conexiones.IBQuery1.SQL.Add('SELECT num_sig FROM CODI_INCRE1');

lo tengo en modo de diseño, y esta consulta lo paso al txt_codi.Text el valor de la consulta.(esto es la inicio y no tengo problemas).

Pero cuando esa consulta esta en modo de ejecucion obtengo ese errros


Pero la consulta es un Procedimieto almacenado es decir

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


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


CREATE GENERATOR SIGUIENTE_CODIGO;
SET GENERATOR SIGUIENTE_CODIGO TO 1009;



Todo esto me lo hace bien al momento de ingresar un cliente(por ejemplo CLI1020) pero cuando quiero ingresar otro usuario(CLI1021) alli es donde no lo obtengo (PARECIERA QUE NO LO LLAMARA EN TIEMPO DE EJECUCION AL PROCEDIMIENTO) y me sale ese error

Project Proyecto_Clientes.exe raised exception class EIBClientError with message 'use Open for a Select Statement'. Process Stopped. Use Step o Run........


Bueno espero que me puedan Ayudar.

Gracias y Saludos

Kreyser 03-06-2005 15:00:59

Hola,

Creo que dieron en el clavo con esto...:p

Cita:

Empezado por vtdeleon
DM_Conexiones.IBQuery1.ExecSQL;//Utiliza Open, ya que ExecSql por lo regular se utiliza para Updates e Insert

Cambialo como te dicen por DM_Conexiones.IBQuery1.Open ...

Saludos.

JoanKa 03-06-2005 16:11:29

Si lo cambien pero me sigue saliendo el mismo Error. Sera acaso del Trigger???? Que no se incrementa en uno despues de ingresar otro Cliente??????????????'


La franja horaria es GMT +2. Ahora son las 22:51:14.

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