
Conexion Informix
#1
Escrito 07 mayo 2009 - 02:42
Aunque he visto que no se maneja mucho el informix por aqui, quisiera preguntar si alguien sabe si puedo conectar Delphi 2009 con Informix usando ADO en una aplicacion de varias capas...
Y si es mas rapido que DBExpress...
Saludos...
#2
Escrito 07 mayo 2009 - 03:02
Saludos.
#3
Escrito 07 mayo 2009 - 03:08
De hecho si hay un proveedor OLE DB... Intentare hacer unas pruebas para checarlo...
Saludos...
#4
Escrito 07 mayo 2009 - 03:12
Suerte
#5
Escrito 07 mayo 2009 - 03:16
#6
Escrito 08 mayo 2009 - 08:48
si se puede o no se puede ??
navegas o vuelas por la base de datos ??
#7
Escrito 08 mayo 2009 - 12:05
He logrado hacer la conexion usando ADO, pero quiero manejar 3 capas usando Datasnap de Delphi 2009...
Repito, la conexion si se realiza en la capa intermedia... Pero en la capa cliente no puedo visualizar los datos de una consulta... Supongo que quiere decir que no se puede usar ADO con Datasnap???...
Use DBExpress y funciona a la perfeccion...
Sera entonces que no son compatibles ADO y Datasnap... Seguire intentando...
Saludos...
#8
Escrito 08 mayo 2009 - 03:17
#9
Escrito 08 mayo 2009 - 03:30
SELECT * FROM Tabla
Pero a la hora de ejecutar la consulta usando un ClientDataset desde el cliente me marca el siguiente error: Remote error: Unexpected metadata type...
A que se refiere ese error?
#10
Escrito 09 mayo 2009 - 11:16
El escenario es el siguiente:
Tengo esta funcion de informix:
CREATE PROCEDURE informix.capturarvalor ( entrada VARCHAR(30) ) RETURNS INTEGER DEFINE salida INTEGER; SELECT valorcampo INTO salida FROM tabla WHERE nombre = entrada; RETURN salida; END PROCEDURE
Como capturo el valor de la variable "salida" desde delphi?
Gracias de antemano y saludos...
#11
Escrito 22 mayo 2009 - 12:59
Le estuve moviendo a este asunto de delphi con informix y ha costado un poco de trabajo...
Por si alguien esta interesado les digo como realizo las cosas en el sistema...
Las consultas las tengo en la capa intermedia y utilizo un TSQLDataSet...
Los procedimientos almacenados tambien los ejecuto desde un TSQLDataSet con la instruccion execute procedure nombre(parametros)... Esto porque no me funcionaron los TSQLStoredProc...
Entiendo por lo que he investigado que el funcionamiento depende mucho de la forma en que esta configurada la BDD... Pero en fin, hasta el momento asi es como me funciona...
Ahora la aplicacion que estoy haciendo de repente me sale el error "Remote error: Connection name in use"... Alguien sabe a que se refiere?... O que puedo hacer?...
Saludos...
#12
Escrito 22 mayo 2009 - 03:04
Siguiendo con este tema...
El escenario es el siguiente:
Tengo esta funcion de informix:
sql
CREATE PROCEDURE informix.capturarvalor ( entrada VARCHAR(30) ) RETURNS INTEGER DEFINE salida INTEGER; SELECT valorcampo INTO salida FROM tabla WHERE nombre = entrada; RETURN salida; END PROCEDURE
Como capturo el valor de la variable "salida" desde delphi?
Gracias de antemano y saludos...
Aunque no se nada de Informix te voy a comentar como hago algo parecido con firebird:
Primero que todo no olvides poner la siguiente directiva de compilación en el módulo del servidor para que los métodos públicos puedan ser vistos en el lado cliente:
type {$MethodInfo ON} TMiModulo = class(TDSServerModule)
luego declaro la función en public
public function CapturarValor(Entrada: string):Integer;
La implementacion (con un StoreProcedure de dbExpress que apunta al procedimiento 'Informix.CapturarValor', que automaticamente debería cargar los parámetros de la DB):
function CapturarValor(Entrada: string):Integer; begin MiStoreProcdure.ParamByName('Entrada').AsString := Entrada; MiStoreProcedure.ExecProc; Result := MiStoreProcedure.ParamByName('Salida').AsInteger; end;
Ahora en el lado cliente llevamos desde dbExpress un TSQLServerMethod que apunte en su propiedad ServerMethodName a: TMiModulo.CapturarValor, en GetMetadata := False y obviamente SQLConecction a la respectiva conexión.
Para ejecutarlo en el lado cliente hacemos lo siguiente:
function CapturarValorEnCliente(Entrada:String):Integer; begin MiTSqlServerMethod.Params[0].asString := Entrada; MiTSqlServerMethod.ExecuteMethod; Result := MiTSqlServerMethod.Params[1].asInteger; end;
Espero te sirva de algo.
Saludos.
#13
Escrito 22 mayo 2009 - 03:39
Tienes razon, de hecho asi lo hago con Firebird y funciona...
El problema con Informix es precisamente que el TSQLStoredProc no carga todos los parametros automaticamente... Es decir, si mi procedimiento almacenado tiene 3 parametros solo me carga el primero, los otros dos no los toma en cuenta... Entonces procedo a ponerselos manualmente, pero me marca error al ejecutarlo porque solo toma en cuenta el primer parametro...
Por eso mismo uso un TSQLDataSet como query y en su propiedad CommandText le pongo
EXECUTE PROCEDURE MiProcedimiento(:parametro1, :parametro2, :parametro3)
Asi si me carga los parametros y me funciona bien...
Es un poco raro, pero asi funciona...
Saludos...