Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2007
Saltamontes Saltamontes is offline
Registrado
 
Registrado: dic 2006
Posts: 6
Poder: 0
Saltamontes Va por buen camino
Cual es la forma correcta de llamar y ejecutar un ProcAlmacenado en IB6 y Delphi 7???

Buenos(as) DIas/Tardes/Noches

Estoy trabajando en un proyectito con Delphi7 e InterBase 6, la cosa es que intento ejecutar un procedimiento almancenado y me salen errores al momento de ejecutarlo desde el delphi, porque no me muestran errores de sintaxis, el codigo del query en Delphi es:
Código Delphi [-]
pinventario := txt_inventario.Text; 
pmarca := txt_marca.Text; 
pmodelo := txt_modelo.Text; 
pserie := txt_serie.Text; 
pdescripcion := txt_descripcion.Text; 
pprecio := strToFloat(txt_precio.Text); 
pedofunc := txt_edofunc.Text; 
ptitular := txt_titular.Text; 
pfecha := DateToStr(DTPfecha.Date); 
pidArea := DBLCBox_Areas.KeyValue; 
DM.IBQ_Inventario.Close;
DM.IBQ_Inventario.SQL.Clear;
DM.IBQ_Inventario.SQL.Add('execute procedure PR_Ins_InvCatArea("' + pinventario + '"," + pmarca + "," + pmodelo + "," + pdescripcion + "," + pprecio + "," + pedofunc + "," + pfecha + "," + pidArea + "," + ptitular + ")');
DM.IBQ_Inventario.ExecSQL;
DM.IBQ_Inventario.Open;
y el procedimiento hecho en el InterBAse 6 es:
Código Delphi [-]
set term !!;
create procedure PR_Ins_InvCatArea(pinventario VARCHAR(12),pmarca VARCHAR(20),pmodelo VARCHAR(20),pserie VARCHAR(20),pdescripcion VARCHAR(50), pprecio FLOAT, pedofunc VARCHAR(15), pfechainv DATE, pidArea integer ,pdepositario VARCHAR(70))
as
  declare variable vidInventario integer;
Begin
insert into Inventario (Inventario,Marca,Modelo,Serie, Descripcion, Precio,EdoFuncional, Fecha_Inv)
          VALUES(:qinventario,:qmarca,:qmodelo,:qserie,:qdescripcion,:qprecio,:qedofunc,:qfechainv);

  select idInventario from Inventario where Inventario = :qinventario into :vidInventario;
  insert into Inv_CatAreas VALUES(:qidArea,:vidInventario,:qdepositario);
End!!
set term ;!!
y ya lo ejecute en el Interbase y si se deja, pero desde delphi no,
inclusive intente "insert into PR_Ins_InvCatArea VALUES(parametros)"
y pos tampoco.

Les agradezco su tiempo y la asesoria que me puedan brindar.
Sales pues
Nos vemos

Última edición por Saltamontes fecha: 08-07-2007 a las 14:31:51.
Responder Con Cita
  #2  
Antiguo 08-07-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola, veo que eres miembro desde hace ya medio año, y que tienes 5 mensajes escritos... da la impresión de que todavía eres "iniciado en clubdelphi" Pero igualmente, creo que debo hacerte notar que por favor escribas el código entre las etiquetas [ DELPHI ] y [ /DELPHI ] (sin espacios), ¡No se entiende el código que expones!
Te remito a la guia de estilo.

No soy moderador, pero igualmente creo que es recomendable de que te haya hecho la observación.

Te pido amablemente que edites tu mensaje y que emplees las etiquetas. Veras que el texto sale bonito y legible. De ese modo, podríamos detectar cual es problema con mayor facilidad.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 08-07-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
A primera vista parece que todo está bien. Yo no uso Interbase, uso Firebird y lo que me llama la atención son los !! ¿Es correcto eso? Por lo general se usa el ^

Si es posible, podrías exponer cual/es es/son el/los error/es que te arroja/n?
Saludos,

__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 08-07-2007
Saltamontes Saltamontes is offline
Registrado
 
Registrado: dic 2006
Posts: 6
Poder: 0
Saltamontes Va por buen camino
Hola nuevamente, los !! son de la declaracion del procedimiento "a manita", pero en la pestaña METADATA de InterBase me lo muestra de esa manera:

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE "PR_INS_INVCATAREA"
(
"PINVENTARIO" VARCHAR(12),
"PMARCA" VARCHAR(20),
"PMODELO" VARCHAR(20),
"PSERIE" VARCHAR(20),
"PDESCRIPCION" VARCHAR(50),
"PPRECIO" FLOAT,
"PEDOFUNC" VARCHAR(15),
"PFECHAINV" DATE,
"PIDAREA" INTEGER,
"PDEPOSITARIO" VARCHAR(70)
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE "PR_INS_INVCATAREA"
(
"PINVENTARIO" VARCHAR(12),
"PMARCA" VARCHAR(20),
"PMODELO" VARCHAR(20),
"PSERIE" VARCHAR(20),
"PDESCRIPCION" VARCHAR(50),
"PPRECIO" FLOAT,
"PEDOFUNC" VARCHAR(15),
"PFECHAINV" DATE,
"PIDAREA" INTEGER,
"PDEPOSITARIO" VARCHAR(70)
)
AS
declare variable vidInventario integer;
Begin
insert into Inventario (Inventario,Marca,Modelo,Serie, Descripcion, Precio,EdoFuncional, Fecha_Inv)
VALUES(: pinventario,: pmarca,: pmodelo,: pserie,: pdescripcion,: pprecio,: pedofunc,: pfechainv);
select idInventario from Inventario where Inventario = : pinventario into :vidInventario;
insert into Inv_CatAreas VALUES(: pidArea,: vidInventario,: pdepositario);
End
^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;

y como digo, el procedimiento ya lo probe desde InterBase y si funciona, pero desde el Delphi 7 no lo hace, me dice que el primer parametro no es una columna valida...

Ahora intente usar la otra forma, llamando el procedimiento como tal, primero agregando el Icono ese de IBStoredProc a un modulo de datos y llamandolo en el codigo asi (ya cheque la BD y seleccione el proc, que es el unico y que estuviera activo):
Código Delphi [-]
DM.IB_PR_Ins_InvCatAreas.ParamByName('PINVENTARIO').AsString := Trim(txt_inventario.Text);
DM.IB_PR_Ins_InvCatAreas.ParamByName('PMARCA').AsString := txt_marca.Text;
DM.IB_PR_Ins_InvCatAreas.ParamByName('PMODELO').AsString := txt_modelo.Text;
DM.IB_PR_Ins_InvCatAreas.ParamByName('PSERIE').AsString := txt_serie.Text;
DM.IB_PR_Ins_InvCatAreas.ParamByName('PDESCRIPCION').AsString := txt_descripcion.Text;
DM.IB_PR_Ins_InvCatAreas.ParamByName('PPRECIO').AsFloat := StrToFloat(txt_precio.Text);
DM.IB_PR_Ins_InvCatAreas.ParamByName('PEDOFUNC').AsString := txt_edofunc.Text;
DM.IB_PR_Ins_InvCatAreas.ParamByName('PFECHAINV').AsString := DateToStr(DTPfecha.Date);
DM.IB_PR_Ins_InvCatAreas.ParamByName('PIDAREA').AsInteger := StrToInt(txt_inventario.Text);
DM.IB_PR_Ins_InvCatAreas.ParamByName('PDEPOSITARIO').AsString := txt_inventario.Text;
DM.IB_PR_Ins_InvCatAreas.ExecProc;

y de esta forma me sale un error que dice que el valor de mi primer parametro (string de 12 caracteres) no es un valor entero valido.


Les agradezco por la orientacion que me puedan dar.
Sales pues
Nos vemos
Responder Con Cita
  #5  
Antiguo 08-07-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Disculpa, pero esto me deja confundido:

Cita:
y de esta forma me sale un error que dice que el valor de mi primer parametro (string de 12 caracteres) no es un valor entero valido.
¿En que quedamos? ¿Se está esperando un string o un integer?
Por un lado estoy viendo un inventario de tipo VARCHAR, por el otro del tipo INTEGER.

¿Puedes, si no es molestia, por favor transcribir textualmente el error?
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 11-07-2007
iuqrul iuqrul is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cartagena
Posts: 36
Poder: 0
iuqrul Va por buen camino
Debes definir en el TIBStoredProc (si usas IBX) el tipo de paramétro de cada uno, debe estar definido por defecto como integer, y lo tendrás que indicar como string.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo utilizar consultas con DISTINCT de forma correcta dec MySQL 9 19-09-2006 17:50:47
cual es la sintaxis correcta de ini_set para mandar mail sakuragi PHP 3 14-11-2005 15:24:43
cual es la mejor forma ? martita Varios 14 07-07-2005 19:35:55
Cual es la Forma Correcta de Guardar Texto en un IbDataset con TcpServer???? AGAG4 Varios 0 10-12-2004 22:14:41
Forma correcta de emigrar base de datos.. ronimaxh Firebird e Interbase 5 07-04-2004 23:34:38


La franja horaria es GMT +2. Ahora son las 14:37:01.


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
Copyright 1996-2007 Club Delphi