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.