PDA

Ver la Versión Completa : Problemas con procedimientos almacenados de informix en delphi


neokobu
17-12-2006, 20:18:13
Que tal,

Estoy trabajando con Informix y Delphi 2006, pero no logro que los procedimientos almacenados me funcionen como en otras bases de datos.

El primer problema es que no muestra el nombre de los parametros como debe de ser, sino sequencias de numeros (iniciando del '1','2' ...n)

Otro problema es que me marca error al momento de ejecutar funciones almacenadas ... en los parametros ni siquiera detecta que debe obtener un resultado.

Y otro problema es que necesito que me regrese cursores, ya que algunos resultados son varios renglones.

Si alguien tiene infortacion y tips de como trabajar con informix en delphi le estare muy agradecido. Por lo pronto posteare si logro encontrar solucion a estos casos.

Salu2.

Gydba
18-12-2006, 20:30:47
Hola,

Tengo que aclarar que no conozco para nada Informix. Sin embargo viendo tu cuestión me surgen ciertas preguntas: Qué componentes utilizas para acceder a la BD? BDE acaso? En donde te muestra el nombre del los parámetros en el IDE de Delphi o en un gestor de Informix?

Saludos!

pcjav52
07-06-2007, 19:04:02
ok.. mira he trabajado con informix mucho... pero no desde deplhi.. lo trabajo sobre unix, aun que ahora tambien estoy tratanto de conectarme con delphi. y quisiera saber que componentes usas para conectarte y los pasos necesarios para realizar la conexion.., tengo muchos ejemplos de procedures, trigres etc., asi que podemos hacer unos cambios... tu me dices..
alugnos

Luis Heriberto
07-06-2007, 20:31:49
Hola mira yo he utilizado los componentes de acceso a datos de BDE y de ADO voy primero con BDE

En efecto en los storeprocedures no reconoce los nombres, solo las posiciones por lo tanto al indicarle al componente TStoreProcedure el nombre del procedimiento almacenado y te vas a la sección de [PARAMS], guíate por el nombre que ahí te marca de igual manera cuando agregues los campos de respuesta, luego en tu código donde les asignes los valores a los parametros puedes utilizar la siguiente instruccion

[Nombre Procedimiento].ParamByName('[nombre de parametro]').[tipo de dato] (AsString, AsInteger, AsDatetime, etc)

Como Informix permite regresar un conjunto de registros, manéjalo como un simple dataset (Instrucciones First, Next, Previous, etc) y para hacer referencia a la columna sigues la siguiente instrucción:

[Nombre Procedimiento].FieldByName('[nombre de columna]').[tipo de dato] (AsString, AsInteger, AsDatetime, etc)

o

[Nombre Procedimiento].Fields[posición de columan (inicia en cero)].[tipo de dato] (AsString, AsInteger, AsDatetime, etc)

Bueno ahora con ADO tiene un componente que se denomina ComandText, dónde tú puedes introducir una instrucción de sql en la propieda comantext:

EXECUTE PROCEDURE [NombreProcedimiento](valor parametro1, valor parametro2)

y posteriormente a la instrucción [nombre componente].exec te puede devolver un dataset que lo manejas como cualquier otro y haces referencia a sus columnas por la posición

[Nombre Procedimiento].Fields[posición de columan (inicia en cero)].[tipo de dato] (AsString, AsInteger, AsDatetime, etc)


Espero que te sirva ..

Saludos

pcjav52
07-06-2007, 21:33:04
drop procedure "a713ap00".upd_historia;

create procedure "a713ap00".upd_historia(aclave INTEGER,
arfc CHAR(13),
aname CHAR(70),
aingdt CHAR(8),
ainidesc INTEGER)
define aConsec integer ;
-- Busca que se haya dado de alta previamente el RFC
select max(fconsec) into aConsec from adhe_historia ;
-- Checa si encontro clave a asignar
if aConsec <= 0 then
let aConsec = 1 ;
else
let aConsec = aConsec + 1 ;
end if
-- Agrega nuevo registro al historial
insert into adhe_historia
(fconsec, fcveadhe, frfc, fnombre, ingdt, finidesc)
values(aconsec, aclave, arfc, aname, aingdt, ainidesc) ;
end procedure



-------------------TRIGGER
drop trigger upd_usuario_his;
create trigger upd_usuario_his
update on usuario referencing
old as adhe new as histo for each row
(
execute procedure upd_usuario_historia(adhe.idUsuario ,adhe.Usuario ,adhe.Pwd)
);