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)
-   -   Ayuda con Consulta, Declarar Variables (https://www.clubdelphi.com/foros/showthread.php?t=62029)

look 01-12-2008 21:20:28

Ayuda con Consulta, Declarar Variables
 
Hola amigos, tengo la siguiente consulta en SQL, esta me trabaja muy bien en MSSQL, pero me gustaria Pasarla a Firebird.
Código Delphi [-]
Q_CxC.SQL.Text:=' DECLARE @num_regs int; set @num_regs=( select num_regs from CU0N01 )+1 ; '+
'insert into cuen01 (NUM_REG,CCLIE,STATUS,TIPO_MOV,NO_FACTURA,DOCTO,REFER,IMPORTE,FECHA_APLI,FECHA_VENC,COB,AFEC_COI,OBS  _CXCCXP,BANK_COM,STRCVEVEND,NUM_MONED,TCAMBIO,IMPMON_EXT,CCONREFER,FECHAELAB,USUARIO,CTLPOL) '
+'Values(@num_regs'+','+QuotedStr(FORM2.showcli.Text)+','+QuotedStr('A')+',1,'+QuotedStr(NF)+','+Quo  tedStr(NV)+','+QuotedStr(NV)
+','+FormatFloat('0.####',form2.tot.Value*FORM2.MONEDA.FieldBYNAME('TCAMBIO').asfloat)+','+QuotedStr  (FORM2.Edit1.Text)+','+QuotedStr(FORM2.Edit1.Text)
+','+QuotedStr(USR2)+','+QuotedStr('A')+',0,0,'+QuotedStr(CVVD)+','+QuotedStr(FORM2.numo.Text)+','+F  ormatFloat('0.####',FORM2.moneda.FieldBYNAME('TCAMBIO').asfloat)+','+FormatFloat('0.####',form2.tot.  Value*FORM2.moneda.FieldBYNAME('TCAMBIO').asfloat)
+','+QuotedStr('N')+','+QuotedStr(FORM2.Edit1.Text)+','+FORM13.Table1.FieldBYNAME('USSAAE').Text+',0  )'
+'update CU0N01 set num_regs=@num_regs ';
Q_CxC.ExecSQL;

me da problema aqui:

Código SQL [-]
DECLARE @num_regs int; set @num_regs=( select num_regs from CU0N01 )+1 ; '+

el problema es que firebird no trabaja de esta manera, obviamente!...
me gustaria que me echaran una manito :) si!.

Caral 02-12-2008 01:32:40

Hola
No se por que pero los punto y coma me dan mala espina.
Por que no pasas los datos con parametros y lo pruebas en el generador de consultas?.
Este te podria decir que esta mal, asi lo hice una vez y sirve de mucho, por lo menos se aprende de firebird y como funciona.
Lo que si se es que los parametros lo entienden todos.
Saludos

defcon1_es 02-12-2008 13:51:01

Hola.

En firebird deberias crear un procedimiento almacenado, puesto que sólo puedes definir variables en un procedimiento o en un disparador.

Código SQL [-]
SET TERM !! ;
CREATE OR ALTER PROCEDURE PR_prueba (
/* Parámetros de entrada */
PARCCLIE INTEGER, 
PARSTATUS CHAR(1), 
PARTIPOMOV INTEGER,
PARAMETRONF , /* el resto de tipos de datos no lo escribo :D */
PARNUM_REG, 
PARCCLIE, 
PARSTATUS, 
PARTIPO_MOV, 
PARNO_FACTURA, 
PARDOCTO, 
PARREFER, 
PARIMPORTE, 
PARFECHA_APLI, 
PARFECHA_VENC, 
PARCOB, 
PARAFEC_COI, 
PAROBS_CXCCXP, 
PARBANK_COM, 
PARSTRCVEVEND, 
PARNUM_MONED, 
PARTCAMBIO, 
PARIMPMON_EXT, 
PARCCONREFER, 
PARFECHAELAB, 
PARUSUARIO, 
PARCTLPOL)
AS
DECLARE VARIABLE num_regs int; 
BEGIN
  select num_regs from CU0N01 INTO :num_regs;

  num_regs = num_regs +1;

  insert into cuen01 (NUM_REG, CCLIE, STATUS, TIPO_MOV, NO_FACTURA, DOCTO, REFER, IMPORTE, FECHA_APLI, FECHA_VENC, COB, AFEC_COI,
OBS _CXCCXP, BANK_COM, STRCVEVEND, NUM_MONED, TCAMBIO, IMPMON_EXT, CCONREFER, FECHAELAB, USUARIO, CTLPOL) 
  Values(:num_regs, :PARCCLIE, :PARSTATUS, :PARTIPOMOV,:PARAMETRONF,
:PARNUM_REG, :PARCCLIE, :PARSTATUS, :PARTIPO_MOV, :PARNO_FACTURA, :PARDOCTO, :PARREFER, :PARIMPORTE, 
:PARFECHA_APLI, :PARFECHA_VENC, :PARCOB, :PARAFEC_COI, :PAROBS_CXCCXP, 
:PARBANK_COM, :PARSTRCVEVEND, :PARNUM_MONED, :PARTCAMBIO, :PARIMPMON_EXT, 
:PARCCONREFER, :PARFECHAELAB, :PARUSUARIO, :PARCTLPOL);

  update CU0N01 
  set num_regs = :num_regs;

END

look 02-12-2008 15:18:19

Cita:

Empezado por defcon1_es (Mensaje 329071)
Hola.

En firebird deberias crear un procedimiento almacenado, puesto que sólo puedes definir variables en un procedimiento o en un disparador.

Código SQL [-]SET TERM !! ; CREATE OR ALTER PROCEDURE PR_prueba ( /* Parámetros de entrada */ PARCCLIE INTEGER, PARSTATUS CHAR(1), PARTIPOMOV INTEGER, PARAMETRONF , /* el resto de tipos de datos no lo escribo :D */ PARNUM_REG, PARCCLIE, PARSTATUS, PARTIPO_MOV, PARNO_FACTURA, PARDOCTO, PARREFER, PARIMPORTE, PARFECHA_APLI, PARFECHA_VENC, PARCOB, PARAFEC_COI, PAROBS_CXCCXP, PARBANK_COM, PARSTRCVEVEND, PARNUM_MONED, PARTCAMBIO, PARIMPMON_EXT, PARCCONREFER, PARFECHAELAB, PARUSUARIO, PARCTLPOL) AS DECLARE VARIABLE num_regs int; BEGIN select num_regs from CU0N01 INTO :num_regs; num_regs = num_regs +1; insert into cuen01 (NUM_REG, CCLIE, STATUS, TIPO_MOV, NO_FACTURA, DOCTO, REFER, IMPORTE, FECHA_APLI, FECHA_VENC, COB, AFEC_COI, OBS _CXCCXP, BANK_COM, STRCVEVEND, NUM_MONED, TCAMBIO, IMPMON_EXT, CCONREFER, FECHAELAB, USUARIO, CTLPOL) Values(:num_regs, :PARCCLIE, :PARSTATUS, :PARTIPOMOV,:PARAMETRONF, :PARNUM_REG, :PARCCLIE, :PARSTATUS, :PARTIPO_MOV, :PARNO_FACTURA, :PARDOCTO, :PARREFER, :PARIMPORTE, :PARFECHA_APLI, :PARFECHA_VENC, :PARCOB, :PARAFEC_COI, :PAROBS_CXCCXP, :PARBANK_COM, :PARSTRCVEVEND, :PARNUM_MONED, :PARTCAMBIO, :PARIMPMON_EXT, :PARCCONREFER, :PARFECHAELAB, :PARUSUARIO, :PARCTLPOL); update CU0N01 set num_regs = :num_regs; END

Gracias Amigo... esto es lo que necesitaba...:)


La franja horaria es GMT +2. Ahora son las 16:51:10.

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