Ver Mensaje Individual
  #5  
Antiguo 09-06-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Reputación: 0
taote Va por buen camino
Hola:

Claro que es posible. De esta manera mantengo aislado el programa de la capa de acceso a datos (donde tengo los componentes DBExpress), accediendo a través de la capa intermedia. Y puedo tratar las capas de manera independiente.

Si se configura tal y como he puesto en el primer mensaje, puede hacerse, de una manera similar a

Código Delphi [-]
function TDMDatos.GetNuevoCodigo(CDS: TClientDataSet): string;
var
    P : TParams;
    Tipo : integer;
begin
    Result:='';
    P := TParams.Create;
    try
        P.Assign(CodNuevo.Params);
        if CDS = Facturas then
           Tipo := 0
        else if CDS = Clientes then
           Tipo := 1
        else
           exit;

        CodNuevo.Params.ParamByName('TIPO').AsInteger := Tipo;
        CodNuevo.Execute;
        Result := CodNuevo.Params.ParamByName('Codigo').AsString;
    finally
        CodNuevo.Params.Assign(P);
    end;
end;

En este caso CodNuevo es el TClientDataSet, enlazado a un proveedor que a su vez está enlazado al componente de procedimiento almacenado, que tiene un parámetro de entrada Tipo, y uno de salida Codigo del tipo VARCHAR(10).

Lo utilizo para obtener un nuevo código para la tabla. Si lo que devuelvo es un entero no hay problema, pero con el VARCHAR si falla.
Responder Con Cita