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.