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 09-12-2010
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Lightbulb Procedimiento con parámetros con valor por defecto

Hola, tengo varios procedimientos donde quisiera saber si hay alguna forma de ponerles valores por defecto a los parámetros. Ya que en la mayoria de los casos lo que es el mismo valor.

Este es uno de los tantos procedimientos, pero hay algunos que tienen mas de 10 parámetros.

Código Delphi [-]
procedure InicializaDocLegal(Id: Variant; Codigo: Variant; Nombre: Variant);
begin
 with DM.SPListaDocLegal.Parameters do
  begin
   ParamByName('@idDocLeg').Value := Id;
   ParamByName('@Codigo').Value := Codigo;
   ParamByName('@Nombre').Value := Nombre;
  end;
end;

Ejemplo de la llamada:
Código Delphi [-]
InicializaDocLegal(Null,Null,Null);
InicializaDocLegal(32,Null,Null);
InicializaDocLegal(Null,'0069',Null);
InicializaDocLegal(Null,'0069','Certifico');

Pero de todas las más usadas es la primera. Y pensé en que si hubiera alguna forma que los parámetros cogieran por defecto el valor Null fuera fabuloso.

Muchas grasias de antemano,

Saludos.

Última edición por Ledian_Fdez fecha: 09-12-2010 a las 17:51:41.
Responder Con Cita
  #2  
Antiguo 09-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si le pasas null en la llamada, por ejemplo, entonces puedes cambiar los valores por defecto en el propio procedimiento, algo así:

Código SQL [-]
procedure xxxxxxx (campos..... etc.)
begin
// cargar valores por defecto los que tengan null
if codigo is null then
  codigo = 10;   <---- este sería el valor por defecto
if campotal is null then
  campotal = 100;
etc.

// hacer lo que sea.

end;
Responder Con Cita
  #3  
Antiguo 09-12-2010
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
Hola.

Los parámetros de tipo Variant no pueden tener valor predeterminado (al menos hasta Delphi 7), por lo que es una solución habitual en estos casos emplear sobrecarga, es decir, escribir dos o más rutinas que lleven el mismo nombre pero que se distingan por sus parámetros.

Código Delphi [-]
Procedure InicializaDocLegal (Const ID :Variant; Const Codigo :Variant;
  Const Nombre :Variant); Overload;
Begin
  With DM.SPListaDocLegal.Parameters Do
  Begin
    ParamByName ('@idDocLeg').Value := ID;
    ParamByName ('@Codigo').Value := Codigo;
    ParamByName ('@Nombre').Value := Nombre;
  End;
End;

Procedure InicializaDocLegal (Const ID :Variant; Const Codigo :Variant);
  Overload;
Begin
  InicializaDocLegal (ID, Codigo, Null);
End;

Procedure InicializaDocLegal (Const ID :Variant); Overload;
Begin
  InicializaDocLegal (ID, Null, Null);
End;

Procedure InicializaDocLegal; Overload;
Begin
  InicializaDocLegal (Null, Null, Null);
End;

El programa llamará al procedimiento que corresponda, según la cantidad de parámetros que pongas en la instrucción que haga esa llamada.

Sin embargo, en el ejemplo que nos das puede que no haya necesidad de que los parámetros sean de tipo Variant. Pueden ser de tipo Integer o String, con lo cual sí puedes indicar un valor predeterminado para cada uno (ahorrándote y ahorrándole a la aplicación cierta cantidad de recursos):

Código Delphi [-]
Procedure InicializaDocLegal (Const ID :Integer = 0;
  Const Codigo :String = '';
  Const Nombre :String = '');
Begin
  With DM.SPListaDocLegal.Parameters Do
  Begin
    If ID = 0 Then
      ParamByName ('@idDocLeg').Value := Null
    Else
      ParamByName ('@idDocLeg').Value := ID;

    If Codigo = '' Then
      ParamByName ('@Codigo').Value := Null
    Else
      ParamByName ('@Codigo').Value := Codigo;

    If Nombre = '' Then
      ParamByName ('@Nombre').Value := Null
    End
      ParamByName ('@Nombre').Value := Nombre;
  End;
End;

PERO antes de optar por alguna de estas dos soluciones, ten presente que una rutina con una cantidad importante de parámetros es señal de una posible falla de diseño. Lo sé, incluso en algunas bibliotecas de Microsoft hay métodos y funciones con una cantidad exorbitante de parámetros, pero si empleas en mayor medida Programación Orientada a Objetos puede que desaparezca esa necesidad de declarar procedimientos de 10 parámetros.

Espero esta contribución haya sido de alguna utilidad.

Casi: En Delphi el operador Is trabaja con objetos, pero no con valores de tipo Variant. Intuyo que ya lo sabes pero seguro andas haciendo algo en SQL.
Responder Con Cita
  #4  
Antiguo 09-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
[..] Casi: En Delphi el operador Is trabaja con objetos, pero no con valores de tipo Variant. Intuyo que ya lo sabes pero seguro andas haciendo algo en SQL.
Me pareció leer Store Procedure... por eso
Responder Con Cita
  #5  
Antiguo 09-12-2010
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Me pareció leer Store Procedure... por eso
¡Ah! Disculpa.

Por un momento imaginé eso, pero de pronto lo vi un tanto pascalizado.
Responder Con Cita
  #6  
Antiguo 09-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que tengo la cabeza ya un poco... obsoleta
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
Valor Por Defecto DBlookupComboBox hcalero Conexión con bases de datos 0 22-01-2008 10:54:17
Parametros Opcionales no Parametros por defecto Velia Varios 7 19-08-2006 15:18:42
Valor por defecto en DBLookUpComboBox Durbed OOP 1 08-07-2005 19:05:54
Valor por defecto en DBRadioGroup RyAr Varios 1 01-07-2004 14:46:53
Valor por defecto en OnNewRecord RyAr Conexión con bases de datos 4 22-06-2004 10:49:32


La franja horaria es GMT +2. Ahora son las 02:52:25.


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