Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2013
willwallace willwallace is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 10
Poder: 0
willwallace Va por buen camino
Unhappy Manipular resultado array, con un ADOStoredProc

Estimados requiro su ayuda,
Tengo una funcion en postgres la cual me retorna un array[2] y no se como recuperarlo en delphi.
Ejemplo:
Funcion Postgres
Código SQL [-]
CREATE OR REPLACE FUNCTION array(a float, b float, fecha date)
  RETURNS double precision[] AS
$BODY$
declare
  c                   float;  
  d                       float;
  vectoresultado   float[];

        
begin
  c=a/b;
        d=a*b;
    
  vectoresultado[1]=c;
  vectoresultado[2]=d;
  
  return vectoresultado;

end;
$BODY$
  LANGUAGE plpgsql VOLATILE

y luego ejecuto la funcion en delphi
Código Delphi [-]

  dm.AdoStorecProc.Close();
        dm.AdoStorecProc.Parameters.Items[1].Value:=StrtoFloat(Edit1.Text);
        dm.AdoStorecProc.Parameters.Items[2].Value:=StrtoFloat(Edit2.Text);
        dm.AdoStorecProc.Prepared;
        dm.AdoStorecProc.ExecProc();

Y quisiera asignar los dos valores retornados a otros edits
Por favor quien puede darme una mano, Tengo entendido que los resultados son retornados en el item[0] dela funcion pero no se manipularlos
Código SQL [-]
dm.AdoStorecProc.Parameters.Items[0].Value
Gracias
Responder Con Cita
  #2  
Antiguo 09-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
No conozco PostgreSQL y no sé si esto será de mucha ayuda, pero en caso de que sea como dices, que existe un "parámetro 0" y éste contiene el resultado, entonces muy probablemente se trate de un Variant matriz ("array"). De tal suerte que una expresión como la siguiente te devolvería uno de los valores de esa matriz:
Código Delphi [-]
dm.AdoStorecProc.Parameters.Items [0].Value [n]

Siendo "n" 0 o 1, o bien 1 o 2 (intenta con 1 primero).

Ojalá sea por ahí, saludos.
Responder Con Cita
  #3  
Antiguo 09-03-2013
willwallace willwallace is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 10
Poder: 0
willwallace Va por buen camino
Gracias estimado, tiene logica lo probare y le aviso
Responder Con Cita
  #4  
Antiguo 10-03-2013
willwallace willwallace is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 10
Poder: 0
willwallace Va por buen camino
Hola estimado colega, le cuento que intente de la siguiente manera..
Código Delphi [-]
Edit1.Text:=dm.AdoStorecProc.Parameters.Items[0].value[1];
y me retorna el siguiente mensaje "Invalid argument." pense que era por el tipo valor float en un edit por eso intente de la siguiente manera.
Código Delphi [-]
   Edit1.Text:=FloatToStr(dm.AdoStorecProc.Parameters.Items[0].value[1]);
pero persiste el mismo mensaje "Invalid argument." No se me ocurre de que otra forma hacer. Por favor espero otras ideas que me puedan ayudar a encontrar la solucion. Saludos y Gracias de antemano
Responder Con Cita
  #5  
Antiguo 10-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿Puedes ver la propiedad dm.AdoStorecProc.Parameters con el inspector de objetos (en tiempo de diseño)? ¿Cuántos parámetros hay? ¿Qué valores tienen estos en sus propiedades DataType y Direction?

Una prueba, ¿podrías decirnos qué valor arroja la siguiente expresión después de ejecutar el procedimiento?
Código Delphi [-]
VarType (dm.AdoStorecProc.Parameters.Items[0].Value)
Responder Con Cita
  #6  
Antiguo 11-03-2013
willwallace willwallace is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 10
Poder: 0
willwallace Va por buen camino
Buenas noches
Si verifico las propiedades en parametros me muestra 4 los cuales son "0:ftString direccion=pdReturnValue; a:ftFloat direccion=pdInput; b:ftFloat direccion=pdInput; fecha:ftDateTime direccion=pdInput"

la expresion
Código Delphi [-]
VarType (dm.AdoStorecProc.Parameters.Items[0].Value);
No me visualiza resultado alguno, cuando lo coloco de esta manera:
Código Delphi [-]
 ShowMessage(VarType (dm.AdoStorecProc.Parameters.Items[0].Value));
me da error e indica "Incompatible types:'string and Word' "
y cuando lo pongo de esta forma:
Código Delphi [-]
ShowMessage(dm.AdoStorecProc.Parameters.Items[0].Value);
me muestra resultado de la siguiente forma "{2.1,8.4}" para los valores ingresados 4.2 y 2 la clave esta en manipular estos valores para asignarlos a un edit, que aun no lo logro.
Gracias por la atencion, estare atento
Responder Con Cita
  #7  
Antiguo 11-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Gracias willwallace.

Eso quiere decir que el resultado viene como cadena de caracteres. Para lo último que comentas, te pongo un sencillo ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
  I :Integer;
  R, S1, S2 :String;
begin
  R := '{2.1,8.4}';
  I := Pos (',', R);
  S1 := Copy (R, 2, I - 2);
  S2 := Copy (R, I + 1, Length (R) - (I + 1));
  ShowMessage (S1);
  ShowMessage (S2);
end;
Responder Con Cita
  #8  
Antiguo 11-03-2013
willwallace willwallace is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 10
Poder: 0
willwallace Va por buen camino
Thumbs up

Muchas gracias, esa fue la solucion, para entenderla realmente tuve q investigar como funciona "Pos"y"Copy" pero me fue de gran ayuda logrando lo deseado
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ADOStoredProc vs ADoQuery lgarcia Debates 0 11-04-2006 23:06:07
ADOStoredProc error Juanito-Kun SQL 5 24-05-2005 20:53:15
cargar un EDIT con el resultado de un AdoStoredProc cocoliso Conexión con bases de datos 4 12-05-2005 05:06:25
Problema con ADOStoredProc ernestocad SQL 4 06-04-2005 17:42:31
Urge: Manipular un array en una tabla TDBASE mrmanuel Conexión con bases de datos 3 08-09-2003 17:25:20


La franja horaria es GMT +2. Ahora son las 00:19:06.


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