Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Problemas con funcion

Disculpen mi ignorancia (que es inconmensurable), pero es que procedo de la programación en 4gl, donde la declaración de una función te permite el retorno de multiples valores.

Sin embargo, desconozco si esto es posible en delphi, aunque creo que no, ya que solo se puede asociar un valor a la variable Result ¿me equivoco?.

Posdata : Ni que decir que soy principiante en esto.
Responder Con Cita
  #2  
Antiguo 27-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bbjb
ya que solo se puede asociar un valor a la variable Result ¿me equivoco?.
Pues no te equivocas pero una función puede tener como valor de regreso un tipo de datos estructurado, un record por ejemplo, de manera que esto puede solventar la falta de valores de regreso múltiple.

// Saludos
Responder Con Cita
  #3  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
¿La definicion de la misma sería algo asi como?

Function devuelve_valores ( s_cadena:String) :Record;
Responder Con Cita
  #4  
Antiguo 27-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bbjb
¿La definicion de la misma sería algo asi como?

Function devuelve_valores ( s_cadena:String) :Record;
No. Tienes que especificar qué tipo de record vas a usar. Por ejemplo:

Código Delphi [-]
type
  TPersona = record
    Nombre: ShortString;
    Edad: Integer;
  end;

function UnaPersona: TPersona;
begin
  Result.Nombre := 'roman';
  Result.Edad := 65;
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Millon de gracias, te debo una.
Responder Con Cita
  #6  
Antiguo 27-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bbjb
te debo una.
¡Ah! Pues me la puedes pagar fácilmente explicándome esto:

¿Qué viene a ser una función que regresa múltiples valores? En mis tiempos, matemáticamente hablando, regresar un sólo valor es un requisito para que una relación entre dos conjuntos sea una función.

// Saludos
Responder Con Cita
  #7  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Quiero construir una sql dependiendo del campo seleccionado en un formulario, de tal manera que si este campo es coche obtendre:

Código:
If campo = 'automovil' Then
  s_tabla   := 'automovil'
  s_campo := 'aut_descri'
  s_where  := 'aut_codigo' 
Else If campo = 'camion' Then ...
Con estas tres variables puedo construir la sql de la siguiente manera:

Código:
   s_sql := ' Select ' + s_campo + ' From ' + s_tabla + ' Where ' + s_where  + ' =  1'
Este metodo lo puedo utilizar para el resto de tablas utilizadas en el programa.

Esta función la he incluido en un módulo general donde están todas las funciones y procedimientos genéricos.
Entre las diversas y múltiples opciones que existan, está la de crear variables globales y un sinfin más que harán de este método el menos adecuado, pero recuerda que vengo de programar en 4gl y estoy algo atrofiado, así que no te me riñas por favor.
Responder Con Cita
  #8  
Antiguo 27-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bbjb
así que no te me riñas por favor.
Je, je, si no te estoy riñendo Mi pregunta era genuina, quiero saber qué significa en 4GL una función que devuelva múltiples valores. ¿Cómo se especifica algo así? ¿Como escoges cuál valore de regreso usar? Etc.

// Saludos
Responder Con Cita
  #9  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
Es muy diferente la programación.

En la definición de la función no tienes que indicas el número de valores que devuelve la misma, simplemente devuelves los que te sean necesario .

Y a la hora de obtener los valores es tan simple como, poner en el mismo orden las variables que los valores retornados, de esta manera si en la variable 1 quieres guardar el retorno 1 solo habrá que hacer...

Código:
Main
   Define p_var1,p_var2,p_var3  Integer;

  Call devuelve_valores Returning  p_var1,p_var2,p_var3

End Main

Function devuelve valores

   Return 4,6,7

End Function
La variable p_var1 recoge el valor 4 , p_var2 = 6 y p_var3 = 7

Por eso, el cambio de una programación a otra es más que ostensible y uno va a base de tropezarse.

Si no fuera por gente como vosotros...

Última edición por bbjb fecha: 27-09-2004 a las 18:00:23.
Responder Con Cita
  #10  
Antiguo 27-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Interesante.

Pero entonces ¿quiere decir que no puedes usar la llamada a una función como parte de una expresión? Por ejemplo en un lenguaje como Delphi puedes poner la expresión

3*MiFuncion + 4;

En 4GL, ¿debes recoger primero los valores antes de poder usarlos?

// Saludos
Responder Con Cita
  #11  
Antiguo 27-09-2004
Avatar de bbjb
bbjb bbjb is offline
Miembro
 
Registrado: jul 2003
Posts: 97
Poder: 21
bbjb Va por buen camino
También puedes hacer ese uso de la función, solo que te he puesto como ejemplo algo similar a lo que intento hacer en delphi.
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


La franja horaria es GMT +2. Ahora son las 01:53:29.


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