PDA

Ver la Versión Completa : Volver a Incrementar y asignar a un DBtext


JoanKa
03-06-2005, 00:27:10
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


DM_Conexiones.IBQuery1.ExecSQL;

vtdeleon
03-06-2005, 02:34:19
Saludos
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
endQuizas 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

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??????????????'