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
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
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
  #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.096
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
  #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: 30
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
  #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.096
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 08:46:03.


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